1
跨時鐘域是如何產(chǎn)生的呢?現(xiàn)在的芯片(比如SOC,片上系統(tǒng))集成度和復雜度越來越高,通常一顆芯片上會有許多不同的信號工作在不同的時鐘頻率下。比如SOC芯片中的CPU通常會工作在一個頻率上,總線信號(比如DRAM BUS)會工作在另一個時鐘頻率下,而普通的信號又會工作在另外的時鐘頻率下。這3個不同時鐘頻率下工作的信號往往需要相互溝通和傳遞信號。
不同時鐘域下的信號傳遞就涉及到跨時鐘域信號處理,因為相互之間的頻率、相位不一樣,如果不做處理或者處理不當,如下圖所示的時鐘域CLK_A的數(shù)據(jù)信號A可能無法滿足時鐘域CLK_B的setup/hold時間,可能導致:
1.數(shù)據(jù)丟失,無法采到預期中的信號;
**2.**亞穩(wěn)態(tài)的產(chǎn)生。
從而導致某個電路模塊或者整顆IC無法工作。
2
那么,常見的跨時鐘域信號處理方法都有哪些呢?有如下的三種:
- 兩級DFF同步器
- 握手協(xié)議
- 異步FIFO
最簡單的單比特信號處理通常采用兩級DFF串聯(lián)進行同步,如下圖所示:
從時鐘域A(CLKA)傳過來的信號a_in, 直接用時鐘域B CLKB采用很容易產(chǎn)生亞穩(wěn)態(tài),用兩級DFF 敲過后再使用就可以把亞穩(wěn)態(tài)概率降到一個合理的值。
很多人可能會問,為什么是兩級DFF呢?一級或者三級DFF行不行呢?這里有一個平均失效間隔時間MTBF(Mean Time Between Failure)的考慮。MTBF時間越長,出現(xiàn)亞穩(wěn)態(tài)的概率就越小,但是也不能完全避免亞穩(wěn)態(tài)。注意采樣時鐘頻率越高,MTBF可能會迅速減小。
有文獻給出的數(shù)據(jù):對于一個采樣頻率為200Mhz的系統(tǒng),如果不做同步MTBF是2.5us,一級DFF同步的MTBF大概是23年,兩級DFF同步的大約MTBF大概是640年,MTBF越長出錯的概率越小。所以一級看上去不太穩(wěn),二級差不多夠用了,至于三級可能會影響到系統(tǒng)的性能,而且增加面積,所以看上去沒什么必要。
兩級DFF同步器聽起來夠簡單的吧?這個方法雖然很簡單,但是很多人用起來還是常常會犯錯。
3
錯誤1 :時鐘域A的組合邏輯信號直接敲兩級DFF同步到時鐘域B
如下圖(1)所示雖然時鐘域A的邏輯信號c0 傳輸?shù)綍r鐘域B的時候,也用了兩級DFF 同步器,但我們知道組合邏輯電路各個輸入信號的不一致性以及組合邏輯內部路徑的延時時間不一樣,運算后的信號存在毛刺如圖(2),而我們又無法預先知道CLKB 的上升沿何時會到來,CLKB 采樣到的信號就無法預知,這顯然不是我們想要的結果。
因此,要想CLKB 能采到穩(wěn)定的信號,時鐘域A的信號必須是經(jīng)過CLKA 敲過,在一個時鐘周期內是穩(wěn)定的信號,如圖(3)所示:
4
錯誤2 : Clock-gating enable 信號沒有經(jīng)過異步處理
在下圖中a_in 信號經(jīng)過CLKA的DFF敲過,再送到兩級DFF 同步器處理,完全沒毛病。但是F2的使能信號EN是從時鐘域A來的,當EN信號變化的時候,由于時鐘域不一樣,無法保證使能之后的CLKB信號采樣數(shù)據(jù)時滿足setup/hold time 要求,這時F2輸出信號也就變得無法預測了。
兩級同步器處理單比特信號雖然比較簡單,但還是要注意它的使用方法,不要犯上面的錯誤哦。
-
IC設計
+關注
關注
38文章
1297瀏覽量
104083 -
SoC系統(tǒng)
+關注
關注
0文章
52瀏覽量
10699 -
同步器
+關注
關注
1文章
98瀏覽量
14654 -
FIFO存儲
+關注
關注
0文章
103瀏覽量
6018 -
DRAM控制器
+關注
關注
0文章
11瀏覽量
7803
發(fā)布評論請先 登錄
相關推薦
評論