易靈思提供了相關時序約束的PPT,內容非常全面,但是我們還是發(fā)現(xiàn)很多客戶在使用Efinity時,時序約束存在很多問題。
添加約束
添加約束的目的是為了告訴FPGA你的設計指標及運行情況。在上面的生成約束之后,在Resultàxx.sdc中提供約束參考(請注意該文件不能直接添加到工程中,需要熱復制到別的指定目錄或者新建自己的SDC文件添加到工程)。
編譯完成之后可以查看時序報告,也可以通過routingàxx.timing.rpt來查看路徑詳細延時信息,如果想查看更可以通過指令來打印或者通過print_critical_path來控制打印的路徑數(shù)量 。
時鐘約束
(1)通過IO輸入的gclk。
如下圖,因為時鐘是通過外部IO輸入的,所以FPGA并不知道這個時鐘頻率是多少。打開.pt.sdc可以看到提供相關約束參考。
我們只需要補充相關的時鐘周期即可以使用。
比如,我們要約束adc_clk_in為100M:
create_clock-period10.000[get_ports{adc_clk_in}]
(2)PLL的輸出的時鐘約束。
因為PLL的輸入輸出頻率都是設置好的,所以軟件可以檢測到。如下圖,輸入輸出時鐘頻率都是30MHz.
在pt.sdc文件中會提供相應的約束 。
create_clock -period 33.3333 pll_inst1_CLKOUT0
在時鐘約束完成之后,可以查看Routing -->.timing.rpt文件中所有的時鐘是否都進行了完整的約束 。
IO約束
首先我們要了解易靈思的架構是core和interface分開的,相對于core,interface內部的GPIO,LVDS,JTAG及其它都是外設。所以所有針對于input_delay和outpu_delay的約束都是針對于interface的。至于FPGA對于我們平時理解的外設,比如FPGA外部連接一片AD/DA,這種是沒有辦法約束的。
在pt.sdc文件中可以看到關于set_input_delay和set_output_delay的約束??梢钥吹接行┘s束是已經屏蔽,那是因為添加的IO沒有打開寄存器。
如下圖,易靈思建議把所有IO都添加上IO寄存器。
有的客戶會有疑問,clock的PIN Name是什么?其實就是與core內連接的寄存器用什么時鐘,interface中就用什么時鐘。
(3)跨時鐘域約束
在保證程序上對跨時鐘域做了處理之后,約束上要對跨時鐘進行約束 。跨時鐘約束的語法是set_clock_groups或者set_false_path,關于用于網上很多,可以自行查找。
set_clock_groups -asynchronous -group {jtag_inst1_TCK jtag_inst1_DRCK}
在所有時鐘約束完成之后要保證時序報告的slack都為正值。
編譯完成之后可以查看時序報告,也可以通過routingàxx.timing.rpt來查看路徑詳細延時信息
如果時序上還有違例,在result--> Routing-->timing.rpt文件中查看具體的路徑。根據(jù)路徑來解決具體的時序問題。
如果想查看更可以通過指令來打印或者通過print_critical_path來控制打印的路徑數(shù)量 。
也可以通過report_timing來報告具體的時序路徑及數(shù)量。
先打開Tcl CommandConsole,如果Show/Hide Tcl commandConsole是灰色的,要先點擊Load Place and Route Data加載布局和布線的數(shù)據(jù)。
打開Tcl commandconsolel,使用report_timing命令來查看需要的路徑。
具體report_timing的用法,請參考EfinityTiming Closure UserGuide.pdf。
-
FPGA
+關注
關注
1625文章
21620瀏覽量
601238 -
pll
+關注
關注
6文章
774瀏覽量
135007 -
時鐘
+關注
關注
10文章
1714瀏覽量
131274 -
時序約束
+關注
關注
1文章
115瀏覽量
13403
發(fā)布評論請先 登錄
相關推薦
評論