ise 時鐘約束 ISE 時鐘約束

2021-10-13 20:23:26 字數 4179 閱讀 9900

本文使用 zhihu on vscode 創作並發布

記錄一下專案中用到的知識,之前從來沒用過ise,由於目前公司原型驗證的平台採用了較老的vitex-6系列晶元,不得不學習下ise的ucf約束,如有錯誤望指正~

系統架構如圖所示:

系統的輸入時鐘有兩個,乙個板級的晶振為fpga提供40m的時鐘,另外射頻soc為fpga提供乙個16m的時鐘,該時鐘和送入fpga的iq adc資料是同步的,因此在ise中首先要對這兩個時鐘進行約束:

net "board_clk_40m" loc pin1;

net "board_clk_40m" tnm_net = board_clk_40m;

timespec ts_board_clk_40m = period "board_clk_40m" 25 ns high 50%;

tnm/tnm_net 在ise的ucf約束檔案中的語法表示分組約束,語法為"ob_name" tnm_net =「 new_group";其中net表示從該ob_name的net相連的所有時鐘元素放入組new_group中,是比較常用的時鐘約束,inst表示例化該模組上的時鐘元素放在改組中,pin就表示能夠從該pin訪問的所有時鐘元素放入組中。tnm_net和tnm的區別大致就在於tnm_net是可以穿過ibuf進行約束的,tnm則不行。timespec表示時序規範。

這裡外部的40m時鐘和16m時鐘衍生了後面需要一系列時鐘,ug612中推薦對每個使用的時鐘進行週期約束,如下圖所示:

因此,最保險的時鐘週期約束可以寫為:

net "board_clk_40m" loc pin1;

net "board_clk_40m" tnm_net = board_clk_40m;

timespec ts_board_clk_40m = period "board_clk_40m" 25 ns high 50%;

net "clk_480m" tnm_net = clk_480m;

timespec ts_clk_480m = period "clk_480m" 2 ns high 50%;

net "clk_32m" tnm_net = clk_32m;

timespec ts_clk_32m = period "clk_32m" 31.25 ns high 50%;

net "clk_64m" tnm_net = clk_64m;

timespec ts_clk_64m = period "clk_64m" 15.625 ns high 50%;

net "clk_32k" tnm_net = clk_32k;

timespec ts_clk_32k = period "clk_32k" 31250 ns high 50%;

net "top/system/lat_sys_clock" tnm_net = top/system/lat_sys_clock;

timespec ts_top_system_lat_sys_clock = period "top/system/lat_sys_clock" 25 ns high 50%;

net "top/rf_module/reg_clk_16m" tnm_net = top/rf_module/reg_clk_16m;

timespec ts_top_rf_module_reg_clk_16m = period "top/rf_module/reg_clk_16m" 62.5 ns high 50%;

net "top/rf_module/reg_clk_16m_rx" tnm_net = top/rf_module/reg_clk_16m_rx;

timespec ts_top_rf_module_reg_clk_16m_rx = period "top/rf_module/reg_clk_16m_rx" 62.5 ns high 50%;

net "top/rf_module/clk_32m_sync" tnm_net = top/rf_module/clk_32m_sync;

timespec ts_top_rf_module_clk_32m_sync = period "top/rf_module/clk_32m_sync" 31.25 ns high 50%;

在vivado的時鐘約束中有乙個衍生時鐘的概念,不需要像ise中的ucf約束寫的這麼亂。

在xdc或者sdc約束中,sta工具會對每條時序路徑進行分析,無論非同步路徑還是同步路徑,但是這裡很多的時序路徑我們已經在內部做了同步或者使其滿足setup/hold的處理,所以為了加快布局佈線的時間,有些同步路徑也可以忽略掉,當然非同步路徑是一定要去忽略的。語法如下:

這裡我選擇需要忽略時序檢查的路徑:

timespec ts_tig1 = from "top/system/lat_sys_clock" to "board_clk_40m" tig;

timespec ts_tig2 = from "board_clk_40m" to "top/system/lat_sys_clock" tig; # 注意反向路徑也要約束

timespec ts_tig3 = from "top/system/lat_sys_clock" to "clk_480m" tig;

timespec ts_tig4 = from "clk_480m" to "top/system/lat_sys_clock" tig;

timespec ts_tig5 = from "top/system/lat_sys_clock" to "clk_32m" tig;

timespec ts_tig6 = from "clk_32m" to "top/system/lat_sys_clock" tig;

timespec ts_tig7 = from "top/system/lat_sys_clock" to "clk_64m" tig;

timespec ts_tig8 = from "clk_64m" to "top/system/lat_sys_clock" tig;

timespec ts_tig9 = from "top/system/lat_sys_clock" to "clk_32k" tig;

timespec ts_tig10 = from "clk_32k" to "top/system/lat_sys_clock" tig;

timespec ts_tig11 = from "top/system/lat_sys_clock" to "top/rf_module/reg_clk_16m_rx" tig;

timespec ts_tig12 = from "top/rf_module/reg_clk_16m_rx" to "top/system/lat_sys_clock" tig;

timespec ts_tig13 = from "top/system/lat_sys_clock" to "top/rf_module/reg_clk_16m" tig;

timespec ts_tig14 = from "top/rf_module/reg_clk_16m" to "top/system/lat_sys_clock" tig;

timespec ts_tig13 = from "top/system/lat_sys_clock" to "top/rf_module/clk_32m_sync" tig;

timespec ts_tig14 = from "top/rf_module/clk_32m_sync" to "top/system/lat_sys_clock" tig;

這裡的16m的rf時鐘源是由這個clk_480m來分頻得到的,因此屬於同步電路,需要讓sta對其進行分析,而後面的top/system/lat_sys_clock時鐘和rf_module有著一些資料的互動,但這兩個時鐘源屬於非同步路徑,所以需要對其忽略。

ise的時鐘ip核 ISE pll

建立clk的ip核以及設定pll的時鐘輸出 原理 外部晶振輸入50m的頻率,由ip核輸出想要的頻率 1 新建工程model再在 晶元 名稱上建立clk的ip核 2 設定輸入寫為50m 3 設定想要的頻率可多選 4 之後完成即可 呼叫 例項化pll ip 5 程式 timescale 1ns 1ps ...

ISE中UCF約束檔案的編寫

ise 約束檔案的基本操作 1 約束檔案的概念 fpga設計中的約束檔案有3類 使用者設計檔案 ucf檔案 網表約束檔案 ncf檔案 以及物理約束檔案 pcf檔案 可以完成時序約束 管腳約束以及區域約束。3類約束檔案的關係為 使用者在設計輸入階段編寫ucf檔案,然後ucf檔案和設計綜合後生成ncf檔...

vivado的pll時鐘約束的重新命名

vivado的pll約束 重新命名 主要是下面這三句話 在vivado中pll會自動約束,一般約束的名字即為pll輸出到bufg i線路的名字 即約束語句如下 create generated clock name clk out1 my pll get pins u my pll inst pll...