**CDC(Clock Domain Conversion)**跨時鐘域分單bit和多bit傳輸,其中:
1. 單bit(慢時鐘域到快時鐘域) :用快時鐘打兩拍,直接采一拍大概率也是沒問題的,兩拍的主要目的是消除亞穩(wěn)態(tài);
其中:
(1)為了更長的平均無故障時間 MTBF( Mean Time Between Failures), 需要配合一個 ASYNC_REG 的約束 ,把用作簡單同步器的多個寄存器放入同一個 SLICE,以降低走線延時的不一致和不確定性。
(* ASYNC_REG = "TRUE" *) reg rst_reg_0;
(* ASYNC_REG = "TRUE" *) reg rst_reg_1;
(2)或者:直接在約束文件里進行約束
set_property ASYNC_REG TRUE [get_cells [list rst_reg_0 rst_reg_1]]
2. 單bit(快時鐘域到慢時鐘域) :握手(脈沖展寬)、異步FIFO、異步雙口RAM;快時鐘域的信號脈寬較窄,慢時鐘域不一定能采到,可以通過握手機制讓窄脈沖展寬,慢時鐘域采集到信號后再“告訴”快時鐘域已經(jīng)采集到信號,確保能采集到;
3. 多bit跨時鐘域 : 異步FIFO 、異步雙口RAM、握手、格雷碼;
(1)使用異步FIFO的IP
實際上是用 FPGA 內(nèi)部的 BRAM 來搭建,所有的控制邏輯都在 BRAM 內(nèi)部,是推薦的 FIFO 實現(xiàn)方式。
時序約束簡單,進行時序例外約束, 只需要 set_clock_groups 將讀寫時鐘約束為異步時鐘組即可 ,簡單高效。
set_property -asynchronous -group [get_clocks write_clock] \\
-group [get_clocks read_clock]
(2)自己寫外部控制邏輯的FIFO
格雷碼做異步 FIFO 的跨時鐘域處理,計數(shù)器和讀寫控制邏輯在 BRAM 或者 RAM 的外部,除了代碼的合理設(shè)計以外,還需要進行額外的時序例外約束,不能簡單使用 set_clock_groups 約束異步時鐘組,還需要考慮外部的讀寫邏輯的約束。
Xilinx建議這里設(shè)置set_max_delay來約束跨時鐘域路徑,約束的原則是:最大路徑延時等于或者略小于目的時鐘的一個周期。
寫邏輯從cell1到cell2的約束中,cell2的驅(qū)動時鐘周期為5,如下所示,讀邏輯約束進行相應(yīng)約束。
set_max_delay 5 –from [get_cells cell1] –to [get_cells cell2] –datapath_only
多bit中,強烈推薦使用異步FIFO的IP來實現(xiàn) ,我在實際工程中使用多次,簡單方便。
-
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
27389 -
RAM
+關(guān)注
關(guān)注
8文章
1392瀏覽量
117622 -
CDC
+關(guān)注
關(guān)注
0文章
57瀏覽量
18232 -
同步器
+關(guān)注
關(guān)注
1文章
109瀏覽量
15196 -
FIFO存儲
+關(guān)注
關(guān)注
0文章
103瀏覽量
6194
發(fā)布評論請先 登錄
處理跨時鐘域(CDC)信號同步的最常見方法

跨時鐘域的時鐘約束介紹
XDC路徑的鑒別、分析和約束方法

關(guān)于FPGA中跨時鐘域的問題分析
XDC約束技巧之CDC篇
如何處理跨時鐘域這些基礎(chǔ)問題

評論