1
跨時(shí)鐘域是如何產(chǎn)生的呢?現(xiàn)在的芯片(比如SOC,片上系統(tǒng))集成度和復(fù)雜度越來越高,通常一顆芯片上會(huì)有許多不同的信號(hào)工作在不同的時(shí)鐘頻率下。比如SOC芯片中的CPU通常會(huì)工作在一個(gè)頻率上,總線信號(hào)(比如DRAM BUS)會(huì)工作在另一個(gè)時(shí)鐘頻率下,而普通的信號(hào)又會(huì)工作在另外的時(shí)鐘頻率下。這3個(gè)不同時(shí)鐘頻率下工作的信號(hào)往往需要相互溝通和傳遞信號(hào)。

不同時(shí)鐘域下的信號(hào)傳遞就涉及到跨時(shí)鐘域信號(hào)處理,因?yàn)橄嗷ブg的頻率、相位不一樣,如果不做處理或者處理不當(dāng),如下圖所示的時(shí)鐘域CLK_A的數(shù)據(jù)信號(hào)A可能無法滿足時(shí)鐘域CLK_B的setup/hold時(shí)間,可能導(dǎo)致:
1.數(shù)據(jù)丟失,無法采到預(yù)期中的信號(hào);
**2.**亞穩(wěn)態(tài)的產(chǎn)生。
從而導(dǎo)致某個(gè)電路模塊或者整顆IC無法工作。

2
那么,常見的跨時(shí)鐘域信號(hào)處理方法都有哪些呢?有如下的三種:
- 兩級(jí)DFF同步器
- 握手協(xié)議
- 異步FIFO
最簡單的單比特信號(hào)處理通常采用兩級(jí)DFF串聯(lián)進(jìn)行同步,如下圖所示:

從時(shí)鐘域A(CLKA)傳過來的信號(hào)a_in, 直接用時(shí)鐘域B CLKB采用很容易產(chǎn)生亞穩(wěn)態(tài),用兩級(jí)DFF 敲過后再使用就可以把亞穩(wěn)態(tài)概率降到一個(gè)合理的值。
很多人可能會(huì)問,為什么是兩級(jí)DFF呢?一級(jí)或者三級(jí)DFF行不行呢?這里有一個(gè)平均失效間隔時(shí)間MTBF(Mean Time Between Failure)的考慮。MTBF時(shí)間越長,出現(xiàn)亞穩(wěn)態(tài)的概率就越小,但是也不能完全避免亞穩(wěn)態(tài)。注意采樣時(shí)鐘頻率越高,MTBF可能會(huì)迅速減小。
有文獻(xiàn)給出的數(shù)據(jù):對(duì)于一個(gè)采樣頻率為200Mhz的系統(tǒng),如果不做同步MTBF是2.5us,一級(jí)DFF同步的MTBF大概是23年,兩級(jí)DFF同步的大約MTBF大概是640年,MTBF越長出錯(cuò)的概率越小。所以一級(jí)看上去不太穩(wěn),二級(jí)差不多夠用了,至于三級(jí)可能會(huì)影響到系統(tǒng)的性能,而且增加面積,所以看上去沒什么必要。
兩級(jí)DFF同步器聽起來夠簡單的吧?這個(gè)方法雖然很簡單,但是很多人用起來還是常常會(huì)犯錯(cuò)。
3
錯(cuò)誤1 :時(shí)鐘域A的組合邏輯信號(hào)直接敲兩級(jí)DFF同步到時(shí)鐘域B
如下圖(1)所示雖然時(shí)鐘域A的邏輯信號(hào)c0 傳輸?shù)綍r(shí)鐘域B的時(shí)候,也用了兩級(jí)DFF 同步器,但我們知道組合邏輯電路各個(gè)輸入信號(hào)的不一致性以及組合邏輯內(nèi)部路徑的延時(shí)時(shí)間不一樣,運(yùn)算后的信號(hào)存在毛刺如圖(2),而我們又無法預(yù)先知道CLKB 的上升沿何時(shí)會(huì)到來,CLKB 采樣到的信號(hào)就無法預(yù)知,這顯然不是我們想要的結(jié)果。

因此,要想CLKB 能采到穩(wěn)定的信號(hào),時(shí)鐘域A的信號(hào)必須是經(jīng)過CLKA 敲過,在一個(gè)時(shí)鐘周期內(nèi)是穩(wěn)定的信號(hào),如圖(3)所示:

4
錯(cuò)誤2 : Clock-gating enable 信號(hào)沒有經(jīng)過異步處理
在下圖中a_in 信號(hào)經(jīng)過CLKA的DFF敲過,再送到兩級(jí)DFF 同步器處理,完全沒毛病。但是F2的使能信號(hào)EN是從時(shí)鐘域A來的,當(dāng)EN信號(hào)變化的時(shí)候,由于時(shí)鐘域不一樣,無法保證使能之后的CLKB信號(hào)采樣數(shù)據(jù)時(shí)滿足setup/hold time 要求,這時(shí)F2輸出信號(hào)也就變得無法預(yù)測了。

兩級(jí)同步器處理單比特信號(hào)雖然比較簡單,但還是要注意它的使用方法,不要犯上面的錯(cuò)誤哦。
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1373瀏覽量
108327 -
SoC系統(tǒng)
+關(guān)注
關(guān)注
0文章
52瀏覽量
11194 -
同步器
+關(guān)注
關(guān)注
1文章
117瀏覽量
15659 -
FIFO存儲(chǔ)
+關(guān)注
關(guān)注
0文章
103瀏覽量
6320 -
DRAM控制器
+關(guān)注
關(guān)注
0文章
11瀏覽量
8003
發(fā)布評(píng)論請(qǐng)先 登錄
如何處理跨時(shí)鐘域信號(hào)?
關(guān)于跨時(shí)鐘域信號(hào)的處理方法
FPGA設(shè)計(jì)中有多個(gè)時(shí)鐘域時(shí)如何處理?
如何處理好FPGA設(shè)計(jì)中跨時(shí)鐘域問題?
如何處理好FPGA設(shè)計(jì)中跨時(shí)鐘域間的數(shù)據(jù)
跨時(shí)鐘域信號(hào)的幾種同步方法研究
揭秘FPGA跨時(shí)鐘域處理的三大方法
基于FPGA的跨時(shí)鐘域信號(hào)處理——MCU
三種跨時(shí)鐘域處理的方法
如何處理跨時(shí)鐘域這些基礎(chǔ)問題
跨時(shí)鐘域信號(hào)該如何處理呢?
評(píng)論