(一)單bit信號同步器
最經典的2DFF 1-bit同步器如下,下圖結構通常用于單bit控制信號的異步處理:
絕大數情況下,當第一個寄存器R1進入亞穩態后,在第二級寄存器R2采樣R1的輸出前,R1的輸出已經能穩定在0或1。
注意:
cdc_s信號必須做到glitch free,也就是我們通常說的寄存輸出;
int_s信號鏈路禁止組合邏輯,其本質也是杜絕glitch的出現。
偏執狂的IC designer肯定會問,第一級寄存器R1的行為到底是啥樣子的?由于cdc_s信號是Tx clock Domain,而R1寄存器的采用時鐘是Rx clock Domain,當Rx clock采樣時,若cdc_s正好跳變(不滿足setup/hold),那么就會出現如下兩種情況,而前仿真是無法仿真出下圖2種行為的(具體見芯片設計之CDC異步電路(一)一文)。
(二)DMUX同步器 兩級寄存器(先進工藝要求三級)的同步器通常用于控制信號的異步處理,但是data bus的異步處理呢?我們可以采用DMUX結構。
注意:
tx_sel、rx_sel有效時,cdc_d數據總線必須保持穩定;
(三)握手處理
源時鐘域先將數據發送到總線上,并給出一個valid信號,而目標時鐘域同步valid信號后,若valid信號為高電平則采樣總線數據,并返回一個ready信號給源時鐘域。源時鐘域再次同步該ready信號,若ready信號為高,則代表一次握手成功,數據傳輸完畢,開始進行下一次數據傳輸。
采用握手機制可以保證異步multi-bit數據傳輸不出現錯誤,但由于需要等待握手的完成再傳輸數據,因此傳輸效率較低。
(四)異步FIFO
老生常談的異步FIFO,其本質是采用格雷碼,在地址連續的情況下,其對應格雷碼每個周期只變化1bit,因此可以直接異步采樣。
注意:
FIFO的overflow、underflow問題;
tx_addr是連續的,即地址hamming distance是1;
FIFO深度須2^n;
經典的FIFO結構如下:
核心電路:是將FIFO讀寫地址指針的二進制碼轉成格雷碼,方便同步器打兩拍傳遞到對向時鐘域去做空滿判斷。
空滿判斷:為了區別空滿,我們增加1bit的地址(MSB),我習慣直接用Gray碼比較讀寫指針判定空滿:
當Gray碼讀寫指針完全相等時,FIFO空;
當Gray碼讀寫指針最高2bit相反,其余bit相同時,FIFO滿; 通常二進制碼比較空滿是:最高bit不同,其余bit相同,則FIFO滿,而格雷碼則不同哈。
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5317瀏覽量
120002 -
CDC
+關注
關注
0文章
57瀏覽量
17770 -
同步器
+關注
關注
1文章
94瀏覽量
14612 -
FIFO存儲
+關注
關注
0文章
103瀏覽量
5963 -
異步處理
+關注
關注
0文章
7瀏覽量
6546
原文標題:芯片跨時鐘域設計(一)
文章出處:【微信號:全棧芯片工程師,微信公眾號:全棧芯片工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論