Xilinx FPGA程式設計技巧之常用時序約束詳解

2022-08-09 16:03:15 字數 3444 閱讀 3278

為了保證成功的設計,所有路徑的時序要求必須能夠讓執行工具獲取。最普遍的三種路徑為:

offset in約束限定了輸入資料和輸入時鐘邊沿的關係。

在系統同步介面中,同乙個系統時鐘既傳輸資料也獲取資料。考慮到板子路徑延時和時鐘抖動,介面的操作頻率不能太高。

1‑1簡化的系統同步輸入sdr介面電路圖

1‑2sdr系統同步輸入時序

上述時序的約束可寫為:

net "sysclk" tnm_net = "sysclk";

timespec "ts_sysclk" = period "sysclk" 5 ns high 50%;

offset = in 5 ns valid 5 ns before "sysclk";

在源同步介面中,時鐘是在源裝置中和資料一起產生並傳輸。

1‑3簡化的源同步輸入ddr介面電路

1‑4ddr源同步輸入時序

上圖的時序約束可寫為:

net "sysclk" tnm_net = "sysclk";

timespec "ts_sysclk" = period "sysclk" 5 ns high 50%;

offset = in 1.25 ns valid 2.5 ns before "sysclk" rising;

offset = in 1.25 ns valid 2.5 ns before "sysclk" falling;

暫存器到暫存器約束往往指的是週期約束,週期約束的覆蓋範圍包括:

使用這一類時鐘ip core,只需指定它們的輸入時鐘約束,器件將自動的根據使用者生成ip core時指定的引數約束相關輸出,不需使用者手動干預。

1‑5輸入到dcm的時鐘約束

上圖的時序約束可寫為:

net 「clkin」 tnm_net = 「clkin」;

timespec 「ts_clkin」 = period 「clkin」 5 ns high 50%;

在某些情況下,工具並不能自動確定同步的時鐘域之間的時鐘時序關係,這個時候需要手動約束。例如:有兩個有相位關係的時鐘從不同的引腳進入fpga器件,這個時候需要手動約束這兩個時鐘。

1‑6通過兩個不同的外部引腳進入fpga的相關時鐘

上圖的時序約束可寫為:

net「clk1x"tnm_net=「clk1x";

net「clk2x180"tnm_net=「clk2x180";

timespec"ts_clk1x"=period"clk1x 7 5ns;

timespec"ts_clk2x180"=period"clk2x180「ts_clk1x/2phas2 +1.25ns;

非同步時鐘域的傳送和接收時鐘不依賴於頻率或相位關係。因為時鐘是不相關的,所以不可能確定出建立時間、保持時間和時鐘的最終關係。因為這個原因,xilinx推薦使用適當的非同步設計技術來保證對資料的成功獲取。xilinx約束系統允許設計者在不需考慮源和目的時鐘頻率、相位的情況下約束資料路徑的最大延時。

非同步時鐘域使用的約束方法的流程為:

輸出時序約束約束的是從內部同步元件或暫存器到器件管腳的資料。

系統同步輸出的簡化模型如圖所示,在系統同步輸出介面中,傳輸和獲取資料是基於同乙個時鐘的。

1‑7系統同步輸出

其時序約束可寫為:

net "clkin" tnm_net = "clkin";

offset = out 5 ns after "clkin";

在源同步輸出介面中,時鐘是重新產生的並且在某一fpga時鐘的驅動下和資料一起傳輸至下游器件。

1‑8源同步輸出簡化電路時序圖

1‑9源同步小例子時序圖

小例子的時序約束可寫為:

net 「clkin」 tnm_net = 「clkin」;

offset = out after 「clkin」 reference_pin 「clkout」 rising;

offset = out after 「clkin」 reference_pin 「clkout」 falling;

令src_grp為一組源暫存器,dst_grp為一組目的暫存器,如果你確定src_grp到dst_grp之間的路徑不會影響時序效能,那麼可以將這一組路徑約束為虛假路徑,工具在進行時序分析的時候將會跳過對這組路徑的時序分析。這種路徑最常見於不同時鐘域的暫存器資料傳輸,如下圖:

1‑10虛假路徑

其約束可寫為:

net "clk1" tnm_net = ffs "grp_1";

net "clk2" tnm_net = ffs "grp_2";

timespec ts_example = from "grp_1" to "grp_2" tig;

在多週期路徑裡,令驅動時鐘的週期為period,資料可以最大n*period的時間的從源同步元件傳輸到目的同步元件,這一約束降低工具的佈線難度而又不會影響時序效能。這種約束通常用在有時鐘使能控制的同步元件路徑中。

圖 1-11時鐘使能控制的暫存器路徑

必須說明的是上圖enable訊號的產生週期必須大於等於n*period,且每個enable傳輸乙個資料。假設上圖的n=2,mc_grp為時鐘使能enable控制的多週期同步元件組,則約束可寫為:

net "clk1" tnm_net = "clk1";

timespec "ts_clk1" = period "clk1" 5 ns high 50%;

net "enable" tnm_net = ffs "mc_grp";

timespec ts_example = from "mc_grp" to "mc_grp" ts_clk1*2;

Xilinx FPGA管腳XDC約束之 物理約束

說明 本文我們簡單介紹下xilinx fpga管腳物理約束,包括位置 管腳 約束和電氣約束 管腳位置約束 set property pakage pin 管腳編號 get ports 埠名稱 管腳電平約束 set property iostandard 電壓 get ports 埠名稱 舉例 set...

Visual C 程式設計技巧之四

visual c 程式設計技巧之四 25 如何獲取有關視窗正在處理的當前訊息的資訊 26 如何建立乙個不規則形狀的視窗 27 如何在 中獲取工具條和狀態條的指標 28 如何使能和禁止工具條的工具提示 29 如何設定工具條標題 30 如何建立和使用無模式對話方塊 31 如何在對話方塊中顯示乙個位圖 3...

Visual C 程式設計技巧之七

visual c 程式設計技巧之七 49 如何實現乙個橡皮區矩形 50 如何更新翻轉背景顏色的文字 51 如何建立乙個具有特定點大小的字型 52 如何計算乙個串的大小 53 如何顯示旋轉文字 54 如何正確顯示包含標籤字元的串 55 串太長時如何在其末尾顯示乙個省略號 56 如何快速地格式化乙個 c...