偽路徑約束
在本章節的“2 約束主時鐘”一節中,我們看到在不加時序約束時,Timing Report會提示很多的error,其中就有跨時鐘域的error,我們可以直接在上面右鍵,然后設置兩個時鐘的偽路徑。
這樣會在xdc中自動生成如下約束:
set_false_path -from [get_clocks -of_objects [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0]] -to [get_clocks -of_objects [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1]]
其實這兩個時鐘我們已經在前面通過generated指令創建過了,因此get_pins那一長串就沒必要重復寫了,所以我們可以手動添加這兩個時鐘的偽路徑如下:
set_false_path -from [get_clocks clk_rx] -to [get_clocks clk_tx]
偽路徑的設置是單向的,如果兩個時鐘直接存在相互的數據的傳輸,則還需要添加從clk_tx到clk_rx的路徑,這個工程中只有從rx到tx的數據傳輸,因此這一條就可以了。
在偽路徑一節中,我們講到過異步復位也需要添加偽路徑,rst_pin的復位輸入在本工程中就是當做異步復位使用,因此還需要添加一句:
set_false_path -from [get_ports rst_pin]
對于clk_samp和clk2,它們之間存在數據交換,但我們在前面已經約束過asynchronous了,這里就可以不用重復約束了。
這里需要提示一點,添加了上面這些約束后,綜合時會提示xdc文件的的warning。
但這可能是Vivado的綜合過程中,讀取到該約束文件時,內部電路并未全都建好,就出現了沒有發現clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1等端口的情況,有如下幾點證明:
若把該xdc文件,設置為僅在Implementation中使用,則不會提示該warning
在Implementation完成后,無論是Timing Report還是通過tcl的report_clocks指令,都可以看到這幾個時鐘已經被正確約束。
編輯:hfy
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603427 -
時序約束
+關注
關注
1文章
115瀏覽量
13425
發布評論請先 登錄
相關推薦
評論