Vivado使用技巧(32) IO延遲的約束方法

2021-08-28 12:19:33 字數 3132 閱讀 1944

為了對設計外部的時序情況進行精確建模,設計者必須設定輸入和輸出埠的時序資訊。vivado只能識別出fpga器件範圍內的時序,因此必須使用set_input_delay和set_output_delay命令來設定fpga範圍外的延遲值。兩者在含義、約束命令等方面有很多地方是相似的,只不過乙個是輸入,乙個是輸出,本文還是分開對兩者進行講述。

set_input_delay命令設定輸入埠上相對於設計介面時鐘邊沿的輸入路徑延遲。輸入延遲既指資料從外部晶元經過板級傳輸到fpga輸入管腳間的相位差,也指相對參考板級時鐘間的相位差。輸入延遲值可以是正的,也可以是負的,由時鐘和資料在fpga介面處的相對相位決定。

約束時的相對時鐘可以是乙個設計時鐘,也可以是乙個虛擬時鐘。輸入延遲命令的選項包括:

輸入延遲約束只能應用於輸入埠或雙向埠(不包括時鐘輸入埠),不能用於設計內部的管腳。下面給出幾個使用輸入延遲約束的典型例子。

1.示例一

create_clock -name sysclk -period 10 [get_ports clk0]

set_input_delay -clock sysclk 2 [get_ports din]

定義乙個主時鐘sysclk作為輸入延遲的相對時鐘,設定的值同時作為最小值(min)分析和最大值(max)分析。

2.示例二

create_clock -name clk_port_virt -period 10

set_input_delay -clock clk_port_virt 2 [get_ports din]

該例子約束目的與上例相同,只是相對時鐘換為乙個虛擬時鐘。使用虛擬時鐘的好處是可以在不改變內部設計時鐘的情況下,設定任意的抖動和延遲。

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]

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的時鐘,最小值分析和最大值分析採用不同的輸入延遲值。約束的一端是器件外部時鐘的上公升沿和下降沿啟動的資料,另一端是器件內部同時對上公升沿和下降沿敏感的觸發器的輸入資料。

set_output_delay命令設定輸出埠上相對於設計介面時鐘邊沿的輸出路徑延遲。輸出延遲既指資料從fpga的輸出管腳通過板級傳輸到另乙個器件間的相位差,也指相對參考板級時鐘間的相位差。輸出延遲值同樣也可以是正的或負的,由時鐘和資料在fpga器件外的相對相位決定。

約束時的相對時鐘可以是乙個設計時鐘,也可以是乙個虛擬時鐘。輸出延遲命令的選項基本與輸入延遲約束相同,還是陳列如下:

同樣,輸出延遲約束只能應用於輸出埠或雙向埠,不能用於設計內部的管腳。下面給出幾個使用輸出延遲約束的典型例子。

1.示例一

create_clock -name sysclk -period 10 [get_ports clk0]

set_output_delay -clock sysclk 6 [get_ports dout]

定義乙個主時鐘sysclk作為輸出延遲的相對時鐘,設定的值同時作為最小值(min)分析和最大值(max)分析。

2.示例二

create_clock -name clk_port_virt -period 10

set_output_delay -clock clk_port_virt 6 [get_ports dout]

該例子約束目的與上例相同,只是相對時鐘換為乙個虛擬時鐘。使用虛擬時鐘的好處是可以在不改變內部設計時鐘的情況下,設定任意的抖動和延遲。

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的時鐘,最小值分析和最大值分析採用不同的輸出延遲值。約束的一端是器件外部時鐘的上公升沿和下降沿啟動的資料,另一端是器件內部同時對上公升沿和下降沿敏感的觸發器的輸出資料。

最後再補充一句,雖然上面說輸入延遲約束和輸出延遲約束不能應用於fpga內部管腳,但也有特例。ultrascale+系列fpga的startupe3內部管腳就可以進行輸入延遲和輸出延遲約束。不過博主連ultrascale+的晶元都沒摸過,本文便不做介紹。

Vivado使用技巧(9) COE檔案使用方法

在某些ip核的配置中,需要使用coe coefficient 檔案來傳遞引數,正如 fpga數字訊號處理系列 中我多次使用matlab自動生成fir濾波器所需的濾波係數檔案。coe檔案是一種ascii文字檔案,檔案頭部定義資料基數 radix 可以時2 10或16。資料以向量的形式給出,每個向量以分...

Vivado使用技巧(10) 實現前的準備工作

vivado的實現可以來自於多種原始檔,包括 1 rtl設計 2 網表設計 3 以ip核為核心的設計 下圖包括vivado的整個設計流程 vivado的實現過程包括將網表對映到fpga資源上的所有步驟,涉及到邏輯 物理 時序等多種約束 支援sdc和xdc約束格式 vivado的實現過程將網表和約束轉...

stm32 io 口配置和使用

對於stm32 gpio的配置種類有8種之多 1 gpio mode ain 模擬輸入 2 gpio mode in floating 浮空輸入 3 gpio mode ipd 下拉輸入 4 gpio mode ipu 上拉輸入 5 gpio mode out od 開漏輸出 6 gpio mode...