<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

VIVADO時序約束及STA基礎

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-03-11 14:39 ? 次閱讀

一、前言

無論是FPGA應用開發還是數字IC設計,時序約束和靜態時序分析(STA)都是十分重要的設計環節。在FPGA設計中,可以在綜合后和實現后進行STA來查看設計是否能滿足時序上的要求。本文闡述基本的時序約束和STA操作流程。內容主要來源于《Vivado從此開始》這本書,我只是知識的搬運工。

二、時序約束與XDC腳本

時序約束的目的就是告訴工具當前的時序狀態,以讓工具盡量優化時序并給出詳細的分析報告。一般在行為仿真后、綜合前即創建基本的時序約束。Vivado使用SDC基礎上的XDC腳本以文本形式約束。以下討論如何進行最基本時序約束相關腳本。

1 時序約束首要任務是創建主時鐘,主時鐘即為時鐘引腳進入時鐘信號或高速收發器生成時鐘。[create_clock]

create_clock -name clk_name -period N-waveform {pos_time neg_time}[get_ports port_name](劃線部分可選)

創建兩個異步的主時鐘:

create_clock -name clk_a -period 10 [get_ports clk_a]

create_clock -name clk_b -period 15 [get_ports clk_b]

set_clock_groups -asynchronous -group clk_a -group clk_b

當兩個主時鐘是異步關系,它們生成時鐘同樣是異步關系:

set_clock_groups -asynchronous -group [get_clocks clk_a -include_generated_clocks]

-group [get_clocks clk_b -include_generated_clocks]

差分時鐘僅約束P端口

create_clock -name clk -period 10 [get_ports clk_p]

高速收發器生成時鐘作為主時鐘:

create_clock -name gt0_txclk -period 8 [get_pins GT0/.../TXOUTCLK]

有一種特殊情況無需與具體引腳綁定,即創建虛擬時鐘。該約束用于設定輸入/輸出延遲。需要創建虛擬時鐘的場景是輸入FPGA的數據由FPGA內部產生時鐘采樣,如串口通信。

create_clock -name clk_v -period 5

2 創建主時鐘后,需要約束生成時鐘:[create_generated_clock]

生成時鐘分為兩種。由PLL MMCM等專用時鐘單元生成產生的時鐘信號,Vivado會自動產生相關約束。還有一種是自定義生成時鐘,一般為邏輯分頻得到。

時鐘源是時鐘端口:

create_generated_clock -name clk_div -source [get_ports clk] -divide_by 2 [get_pins rega/Q] 意思是在rega單元的Q引腳上的時鐘信號clk_div是由clk經過2分頻得到的生成時鐘。

時鐘源是引腳:

create_generated_clock -name clk_div -source [get_pins rega/C] -divide_by 2 [get_pins rega/Q]

除了使用-divide_by -multiply_by表示主時鐘和生成時鐘的頻率關系,也可以用 -edges實現更精確的表達:

create_generated_clock -name clk_div -source [get_pins rega/C] -edges {1 3 5} [get_pins rega/Q]

相移關系使用-edge_shift命令描述。

該約束命令還常用于重命名時鐘信號:

create_generated_clock -name clk_rename [get_pins clk_gen/.../CLKOUT0]

3 創建時鐘組:[set_clock_groups]

a. 異步時鐘情況:

set_clock_groups -asynchronous -group clk_a -group clk_b clk_a和clk_b是異步時鐘。

b. 物理互斥情況:

create_clock -name clk_a -period 10 [get_ports clk]

create_clock -name clk_b -period 8 [get_ports clk] -add

create_clock -name clk_c -period 5 [get_ports clk] -add

set_clock_groups -physically_exclusive -group clk_a -group clk_b -group clk_c

該種情況僅是為了觀察clk引腳時鐘信號周期依次為10ns 8ns和5ns時,時序是否收斂。因此這三個時鐘物理上不同時存在。

c. 邏輯互斥情況:

set_clock_groups -logically_exclusive

-group [get_clocks -of [get_pins clk_core/.../CLKOUT0]] -group [get_clocks -of [get_pins clk_core/.../CLKOUT1]]

clkout0和clkout1送入到BUFGMUX中,后續根據sel信號確定選擇哪一個作為工作時鐘。此時clkout0和clkout1同時存在電路中,但僅有一個會作為后續電路工作時鐘,因此邏輯上互斥。

特殊用法:當asynchronous 的group只有一個,說明改組內時鐘是同步的,但與其他所以時鐘異步。

4 設置偽路徑:[set_false_path]

設置偽路徑后,不再對特殊路徑進行時序分析。特殊路徑如測試邏輯、添加同步電路后的跨時鐘域路徑等。在兩個時鐘域之間應該相互設置為set_false:

set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b]

set_false_path -from [get_clocks clk_b] -to [get_clocks clk_a]

5 常用時鐘相關命令:

report_clocks:查看創建的所有時鐘

report_property [get_clocks ]:查看時鐘clk_name的屬性

report_clock_network:查看時鐘的生成關系網絡

report_clock_interaction:查看時鐘交互關系

其中最后一項非常重要,經常被用于查看異步時鐘域之間的路徑是否安全。若存在不安全路徑,需要添加同步、握手或FIFO后,設置為異步時鐘組或false_path。

8808f6b2-54ab-11ec-b2e9-dac502259ad0.png

鍵入該命令后,會生成時鐘交互矩陣。對角線是每個時鐘內部路徑,其他非黑色部分即為存在對應兩個時鐘的跨時鐘域路徑。紅色部分是非安全路徑,若不處理會產生亞穩態。

三、查看時序報告(STA)

本節以一個有很多時序問題的工程為例進行講解。在綜合后即可打開時序概要查看時序報告。

8818b912-54ab-11ec-b2e9-dac502259ad0.png

打開后有如下界面:

88287730-54ab-11ec-b2e9-dac502259ad0.png

其中Design Timing Summary是時序概況,包括最大延遲分析、最小延遲分析以及脈沖寬度三個部分。其中WNS或WHS為負數,說明當前設計無法滿足建立時間或保持時間要求,也就是說數據無法被穩定采樣。

Clock Summary內的信息與使用report_clocks TCL腳本調出來的信息相似,包含了全部已創建的時鐘信號。Check Timing部分則包含了未被約束的部分,我們可以根據該部分信息進一步添加必要的約束。Intra-Clock Paths和Inter-Clock Paths則分別描述了同步和異步電路時序路徑的裕量參數。

點擊WNS或WHS后的數值可以直接找到時序裕量最差的路徑:

8839f2f8-54ab-11ec-b2e9-dac502259ad0.png

雙擊路徑信息所在行任意位置,界面會跳轉到該路徑的詳細信息界面:

88497390-54ab-11ec-b2e9-dac502259ad0.png

四類時序路徑中,除了FPGA輸入端口到輸出端口這一特殊情況外,其他時序路徑均由源時鐘路徑、數據路徑和目的時鐘路徑三部分構成。上表中各項的具體解釋見官方文檔UG908.

本文說明了時序約束和STA的關系,基本時序約束情形及相應的XDC腳本。之后簡單介紹了如何在VIVADO中查看時序報告來分析時序問題。后續會以網絡通信中常見的RGMII接口設計實例闡述I/O延遲約束部分。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 時序
    +關注

    關注

    5

    文章

    359

    瀏覽量

    37027
  • Vivado
    +關注

    關注

    18

    文章

    791

    瀏覽量

    65413

原文標題:VIVADO時序約束及STA基礎

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA主時鐘約束詳解 Vivado添加時序約束方法

    在FPGA設計中,時序約束的設置對于電路性能和可靠性都至關重要。在上一篇的文章中,已經詳細介紹了FPGA時序約束的基礎知識。
    發表于 06-06 18:27 ?8041次閱讀
    FPGA主時鐘<b class='flag-5'>約束</b>詳解 <b class='flag-5'>Vivado</b>添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>方法

    FPGA I/O口時序約束講解

    前面講解了時序約束的理論知識FPGA時序約束理論篇,本章講解時序約束實際使用。
    發表于 08-14 18:22 ?1062次閱讀
    FPGA I/O口<b class='flag-5'>時序</b><b class='flag-5'>約束</b>講解

    時序約束資料包

    、Vivado基本操作流程2、時序基本概念3、時序基本約束和流程4、Baselining時序約束
    發表于 08-01 16:45

    vivado時序分析與約束優化

    轉自:VIVADO時序分析練習時序分析在FPGA設計中是分析工程很重要的手段,時序分析的原理和相關的公式小編在這里不再介紹,這篇文章是小編在練習VI
    發表于 08-22 11:45

    時序約束時序分析 ppt教程

    時序約束時序分析 ppt教程 本章概要:時序約束時序分析基礎常用
    發表于 05-17 16:08 ?0次下載

    時序約束用戶指南

    時序約束用戶指南包含以下章節: ?第一章“時序約束用戶指南引言” ?第2章“時序約束的方法” ?
    發表于 11-02 10:20 ?0次下載

    Xilinx時序約束培訓教材

    時序約束的概念 時序約束主要包括周期約束(FFS到FFS,即觸發器到觸發器)和偏移約束(IPAD
    發表于 03-16 18:10 ?0次下載

    Vivado中的靜態時序分析工具Timing Report的使用與規范

    過程必須以滿足XDC中的約束為目標來進行。那么: 如何驗證實現后的設計有沒有滿足時序要求? 如何在開始布局布線前判斷某些約束有沒有成功設置? 如何驗證約束的優先級? 這些都需要用到
    發表于 11-17 18:03 ?3.5w次閱讀
    <b class='flag-5'>Vivado</b>中的靜態<b class='flag-5'>時序</b>分析工具Timing Report的使用與規范

    時序約束資料包】培訓課程Timing VIVADO

    來維持嗎? 1、Vivado基本操作流程 2、時序基本概念 3、時序基本約束和流程 4、Baselining時序
    發表于 08-06 15:08 ?449次閱讀

    Vivado進行時序約束的兩種方式

    上面我們講的都是xdc文件的方式進行時序約束,Vivado中還提供了兩種圖形界面的方式,幫我們進行時序約束
    的頭像 發表于 03-08 17:17 ?1.9w次閱讀
    <b class='flag-5'>Vivado</b>進行<b class='flag-5'>時序</b><b class='flag-5'>約束</b>的兩種方式

    基本的時序約束STA操作流程

    一、前言 無論是FPGA應用開發還是數字IC設計,時序約束和靜態時序分析(STA)都是十分重要的設計環節。在FPGA設計中,可以在綜合后和實現后進行
    的頭像 發表于 08-10 09:33 ?5043次閱讀
    基本的<b class='flag-5'>時序</b><b class='flag-5'>約束</b>和<b class='flag-5'>STA</b>操作流程

    如何在Vivado中添加時序約束

    前面幾篇文章已經詳細介紹了FPGA時序約束基礎知識以及常用的時序約束命令,相信大家已經基本掌握了時序約束
    的頭像 發表于 06-23 17:44 ?1576次閱讀
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>

    如何在Vivado中添加時序約束呢?

    今天介紹一下,如何在Vivado中添加時序約束,Vivado添加約束的方法有3種:xdc文件、時序
    的頭像 發表于 06-26 15:21 ?2558次閱讀
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>時序</b><b class='flag-5'>約束</b>呢?

    Vivado綜合階段什么約束生效?

    Vivado綜合默認是timing driven模式,除了IO管腳等物理約束,建議添加必要的時序約束,有利于綜合邏輯的優化,同時綜合后的design里面可以評估
    的頭像 發表于 07-03 09:03 ?488次閱讀

    淺談時序設計和時序約束

    ??本文主要介紹了時序設計和時序約束。
    的頭像 發表于 07-04 14:43 ?929次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>