FPGA設(shè)計(jì)時(shí)序約束二、輸入延時(shí)與輸出延時(shí)
一、背景
????為了在設(shè)計(jì)中準(zhǔn)確的模擬信號(hào)從FPGA傳輸?shù)酵獠炕蛲獠啃盘?hào)進(jìn)入到FPGA端口的時(shí)序,在設(shè)計(jì)中需要給定輸入端口和輸出端口的延時(shí)信息,因?yàn)関ivado僅僅能夠識(shí)別邊界內(nèi)部的時(shí)序。
二、set_input_delay
????FPGA端口和外部的時(shí)延約束命令有兩種,輸入時(shí)延命令set_input_delay和輸出時(shí)延命令set_output_delay。
??2.1 set_input_delay含義
????輸入時(shí)延約束指定了設(shè)計(jì)中輸入時(shí)鐘端口的輸入時(shí)延,以應(yīng)用板為例,輸入時(shí)延表示在數(shù)據(jù)從外部芯片通過應(yīng)用板到達(dá)FPGA的輸入引腳和應(yīng)用板的時(shí)鐘相位存在差異。因此,輸入時(shí)延值可以是正數(shù)也可以是復(fù)數(shù),正負(fù)值取決于數(shù)據(jù)信號(hào)和時(shí)鐘信號(hào)在外部芯片與FPGA接口處的相對(duì)相位。
????注:在Ultrascale系列的器件中,輸入時(shí)延也可以設(shè)置到內(nèi)部的數(shù)據(jù)引腳上。
? 2.2 set_input_delay參數(shù)說明
打開vivado中set input delay的設(shè)置窗口,有三種可選項(xiàng):Rise/Fall,Min/Max,Add delay。

Clock:指定約束引腳的同步時(shí)鐘,必須是事先定義的主時(shí)鐘或虛擬時(shí)鐘。
Objects:用于指定約束的目標(biāo)端口。
Delay value:指定約束的時(shí)延值。
Delay value is relative to clock edge:指定輸入時(shí)延值是相對(duì)于同步時(shí)鐘的邊沿,可以是上升沿rise或下降沿fall,默認(rèn)值為上升沿
Delay value already includes latencies of the specified clock:設(shè)置延時(shí)值是否包含指定時(shí)鐘(包括源時(shí)鐘,網(wǎng)絡(luò)時(shí)鐘,源時(shí)鐘/網(wǎng)絡(luò)時(shí)鐘)的潛在因素
Rise/Fall:指定約束信號(hào)相對(duì)時(shí)鐘約束的延時(shí)邊沿,可為上升沿rise或下降沿fall
Min/Max:Min為最小時(shí)延值,作用于hold/removal,Max為最大時(shí)延值,作用于setup/removal,如果Min/Max都未選擇,表示最大時(shí)延和最小時(shí)延值相等
Add delay information to the existing delay:用于輸入端口關(guān)聯(lián)超過一個(gè)時(shí)鐘沿的場(chǎng)景,例如,DDR接口。
2.3 使用樣例
a) 設(shè)定一個(gè)輸入延時(shí),相對(duì)于時(shí)鐘sysclk,最大時(shí)延和最小時(shí)延相等
b)設(shè)定一個(gè)輸入延時(shí),同步時(shí)鐘為虛擬時(shí)鐘
c)設(shè)定一個(gè)輸入延時(shí),同步時(shí)鐘為sysclk,最大時(shí)延值和最小時(shí)延值不同
d)在兩個(gè)IO端口間是純組合邏輯,輸入端口為DIN,同步時(shí)鐘為虛擬時(shí)鐘
?e)輸入時(shí)延設(shè)置到DDR的數(shù)據(jù)輸入引腳DDR_IN?,數(shù)據(jù)被clk_ddr的上升沿和下降沿觸發(fā),到FPGA內(nèi)部FF的數(shù)據(jù)輸入端口,對(duì)上升沿和下降沿都敏感??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
f)設(shè)置輸入時(shí)延到startupe3的內(nèi)部引腳,時(shí)延路徑從startupe3到組合邏輯單元(針對(duì)Ultrascale器件)
三、set_output_delay
3.1 set_output_delay含義
????set_output_delay約束指定了關(guān)聯(lián)時(shí)鐘沿的輸出端口的輸出路徑時(shí)延,輸出時(shí)延可理解為在數(shù)據(jù)從FPGA的輸出端口到達(dá)其他芯片和關(guān)聯(lián)的參考時(shí)鐘間的相位差。輸出時(shí)延值可以是正數(shù)也可以是復(fù)數(shù),正負(fù)值取決于數(shù)據(jù)信號(hào)和時(shí)鐘信號(hào)在外部芯片與FPGA接口處的相對(duì)相位。
?3.2 set_output_delay參數(shù)說明
打開set_output_delay窗口,與set_input_delay窗口類似,相關(guān)配置項(xiàng)的作用也相同。

?3.3 使用樣例
a) 設(shè)定一個(gè)輸出時(shí)延,同步時(shí)鐘為sysClk,最大時(shí)延和最小時(shí)延值相同
b) 設(shè)定輸出時(shí)延,同步時(shí)鐘為虛擬時(shí)鐘
c)設(shè)置輸出時(shí)延,同步時(shí)鐘為DDR時(shí)鐘,最大時(shí)延和最小時(shí)延值有多個(gè)
上述約束的效果如下圖,時(shí)鐘上升沿的時(shí)延范圍為0.9-2.1ns,下降沿的時(shí)延范圍為1.1-1.9ns

d)設(shè)置輸出時(shí)延到STARTUPE3(對(duì)于Ultrascale+器件)的pins,從邏輯單元到STARTUPE3
四、樣例工程
4.1 工程代碼
約束文件,4、5、6為set_input_delay和set_output_delay
網(wǎng)表連接圖,F(xiàn)F1_reg和ff2_reg的輸出經(jīng)過LUT2輸出到ff3_reg,對(duì)應(yīng)的時(shí)鐘分別為clk1,clk2,clk3。

4.2 時(shí)序報(bào)告
執(zhí)行Flow Navigator中綜合流程下的report timing summary查看時(shí)序報(bào)告

查看約束到create_clk1的input_delay

input_delay中min時(shí)延值對(duì)應(yīng)hold路徑

輸出時(shí)延報(bào)告,設(shè)置的約束值為0.8ns,符合預(yù)期

五、參考資料
用戶手冊(cè):ug903-vivado-using-constraints-en-us-2022.2.pdf
鏈接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt?
提取碼:mylt