為了對設(shè)計外部的時序情況進(jìn)行精確建模,設(shè)計者必須設(shè)定輸入和輸出端口的時序信息。Vivado只能識別出FPGA器件范圍內(nèi)的時序,因此必須使用set_input_delay和set_output_delay命令來設(shè)置FPGA范圍外的延遲值。兩者在含義、約束命令等方面有很多地方是相似的,只不過一個是輸入,一個是輸出,本文還是分開對兩者進(jìn)行講述;
輸入延遲
set_input_delay命令設(shè)定FPGA的輸入端口上相對于上游芯片接口時鐘邊沿的輸入路徑延遲(不包括FPGA輸入端口到第一個觸發(fā)器數(shù)據(jù)輸入端的延時);輸入延遲既指數(shù)據(jù)從外部芯片經(jīng)過板級傳輸?shù)紽PGA輸入管腳間的相位差,也指相對參考板級時鐘間的相位差;輸入延遲值可以是正的,也可以是負(fù)的,由時鐘和數(shù)據(jù)在FPGA接口處的相對相位決定;
約束時的相對時鐘可以是一個設(shè)計時鐘,也可以是一個虛擬時鐘;輸入延遲命令的選項包括:
-min和-max:-min設(shè)定的值用于最小延遲分析(保持時間、移除時間);-max設(shè)定的值用于最大延遲分析(建立時間、恢復(fù)時間);如果約束命令中沒有使用這兩個選項,輸入延遲值會同時應(yīng)用于min和max;
-clock_fall:用于指定由相對時鐘的下降沿啟動的時序路徑上的輸入延遲約束;如果沒有這個選項,Vivado只假定使用相對時鐘的上升沿;
-add_delay:該選項通常用于約束與多個時鐘沿相關(guān)的輸入端口(比如DDR接口),而且必須已經(jīng)存在一個最大或最小輸入延遲約束,設(shè)計者使用該命令為同一端口設(shè)置其它相對時鐘沿的最大或最小輸入延遲約束;
輸入延遲約束只能應(yīng)用于輸入端口或雙向端口(不包括時鐘輸入端口),不能用于設(shè)計內(nèi)部的管腳,下面給出幾個使用輸入延遲約束的典型例子:
1.示例一
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]
定義一個主時鐘sysClk作為輸入延遲的相對時鐘,設(shè)定的值同時作為最小值(min)分析和最大值(max)分析;
2.示例二
create_clock -name clk_port_virt -period 10
set_input_delay -clock clk_port_virt 2 [get_ports DIN]
該例子約束目的與上例相同,只是相對時鐘換為一個虛擬時鐘;使用虛擬時鐘的好處是可以在不改變內(nèi)部設(shè)計時鐘的情況下,設(shè)定任意的抖動和延遲 ;
3.示例三
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk -max 4 [get_ports DIN]
set_input_delay -clock sysClk -min 1 [get_ports DIN]
該例中最小值分析和最大值分析采用不同的輸入延遲值;
4.示例四
create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]
如果兩個I/O端口之間僅有組合邏輯路徑,沒有任何時序單元,必須相對于虛擬時鐘為I/O端口定義輸入與輸出延遲。上例中DIN和DOUT之間的組合邏輯路徑約束為5ns(10-1-4);
5.示例五
create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay
set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay
這里相對時鐘為DDR的時鐘,最小值分析和最大值分析采用不同的輸入延遲值;約束的一端是器件外部時鐘的上升沿和下降沿啟動的數(shù)據(jù),另一端是器件內(nèi)部同時對上升沿和下降沿敏感的觸發(fā)器的輸入數(shù)據(jù);
輸出延遲
set_output_delay命令設(shè)定數(shù)據(jù)從FPGA輸出端口上(都是相對于數(shù)據(jù)源的時鐘來說)到下一級芯片輸入端口的輸出路徑延遲;輸出延遲既指數(shù)據(jù)從FPGA的輸出管腳通過板級傳輸?shù)搅硪粋€器件間的相位差,也指相對參考板級時鐘間的相位差;輸出延遲值同樣也可以是正的或負(fù)的,由時鐘和數(shù)據(jù)在FPGA器件外的相對相位決定;
約束時的相對時鐘可以是一個設(shè)計時鐘,也可以是一個虛擬時鐘;輸出延遲命令的選項基本與輸入延遲約束相同,還是陳列如下:
同樣,輸出延遲約束只能應(yīng)用于輸出端口或雙向端口,不能用于設(shè)計內(nèi)部的管腳;下面給出幾個使用輸出延遲約束的典型例子:
-min和-max:-min設(shè)定的值用于最小延遲分析(保持時間、移除時間);-max設(shè)定的值用于最大延遲分析(建立時間、恢復(fù)時間);如果約束命令中沒有使用這兩個選項,輸入延遲值會同時應(yīng)用于min和max;
-clock_fall:用于指定由相對時鐘的下降沿捕獲的時序路徑上的輸出延遲約束;如果沒有這個選項,Vivado只假定使用相對時鐘的上升沿;
-add_delay:該選項通常用于約束與多個時鐘沿相關(guān)的輸出端口(比如DDR接口同時使用上升沿和下降沿,或者輸出端口與幾個使用不同時鐘的器件相連),而且必須已經(jīng)存在一個最大或最小輸入延遲約束,設(shè)計者使用該命令為同一端口設(shè)置其它相對時鐘沿的最大或最小輸入延遲約束;
1.示例一
create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]
定義一個主時鐘sysClk作為輸出延遲的相對時鐘,設(shè)定的值同時作為最小值(min)分析和最大值(max)分析;
2.示例二
create_clock -name clk_port_virt -period 10
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]
該例子約束目的與上例相同,只是相對時鐘換為一個虛擬時鐘;使用虛擬時鐘的好處是可以在不改變內(nèi)部設(shè)計時鐘的情況下,設(shè)定任意的抖動和延遲;
3.示例三
create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay
set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay
這里相對時鐘為DDR的時鐘,最小值分析和最大值分析采用不同的輸出延遲值;約束的一端是器件外部時鐘的上升沿和下降沿啟動的數(shù)據(jù),另一端是器件內(nèi)部同時對上升沿和下降沿敏感的觸發(fā)器的輸出數(shù)據(jù) ;
歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!
原文標(biāo)題:FPGA學(xué)習(xí)-IO延遲的約束方法
文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
FPGA
+關(guān)注
關(guān)注
1630文章
21777瀏覽量
604733
原文標(biāo)題:FPGA學(xué)習(xí)-IO延遲的約束方法
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論