在 Xilinx CDC 設計中, 我們一般用到以下幾種時序約束:
set_clock_groups -asynchronous
set_false_path
set_max_delay -datapath_only
set_bus_skew
set_clock_groups -asynchronous
這個命令指定clock之間是異步關系,時序分析時會完全ignore這些clock之間的path。
值得注意的是,set_clock_groups 相比于其他的 timing exceptions 有更高的優先級。如果你還是需要約束或者報告某些CDC path,是不能用 set_clock_groups 的。
set_false_path
這個命令指定相應的path在時序分析時可以被ignore。經過同步器同步的CDC path一般可以施加set_false_path約束。更general一些,我們認為不需要時序約束的path都可以用這個命令。
set_max_delay -datapath_only
set_max_delay可以約束一條path的最大delay。-datapath_only可以指定在分析該path的timing slack時不考慮clock skew。因為異步時鐘是無法知道準確的clock skew的,所以我們用 set_max_delay 來約束cdc path時一般要加 -datapath_only。Setup time仍然是會被考慮的,所以 required time = max_delay + setup_time。
值得注意的是,當我們加了 -datapath_only,該path的hold time檢查會被ignore。另外set_min_delay 是不支持 -datapath_only的。
set_bus_skew
這個命令用來約束多條cdc path之間最大的time difference,這里的bus指的是多條cdc path而不是我們常說的總線。
set_bus_skew應用的一個典型例子是異步FIFO中的格雷碼。在異步FIFO的設計中用到格雷碼,是為了使得跨時鐘域時只有一個bit發生跳變。但是如果多位格雷碼信號的cdc path之間的skew很大,則可能出現在跨時鐘域時多位bit跳變的情況。比如我們使用格雷碼00->01->11->10,假入bit 0的delay比bit 1的delay大過一個dest clock 時鐘周期,那么在dest clock 端,可能會看到00直接跳變到11。因此我們希望通過set_bus_skew來約束多位格雷碼信號,使其skew小于一個 dest clock period。
審核編輯:湯梓紅
-
Xilinx
+關注
關注
71文章
2167瀏覽量
121430 -
CDC
+關注
關注
0文章
57瀏覽量
17811 -
時序約束
+關注
關注
1文章
115瀏覽量
13425
原文標題:Xilinx 跨時鐘域時序約束
文章出處:【微信號:FPGA開發之路,微信公眾號:FPGA開發之路】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論