最近是IC相關專業學生找工作的高峰期,大家可以在文章末尾或者知識星球留言討論筆試或者面試題哦???a href="http://www.1cnz.cn/tags/時鐘/" target="_blank">時鐘域的處理在面試中常常被問到,今天IC君就來聊一聊這個話題。
1
跨時鐘域是如何產生的呢?現在的芯片(比如SOC,片上系統)集成度和復雜度越來越高,通常一顆芯片上會有許多不同的信號工作在不同的時鐘頻率下。比如SOC芯片中的CPU通常會工作在一個頻率上,總線信號(比如DRAM BUS)會工作在另一個時鐘頻率下,而普通的信號又會工作在另外的時鐘頻率下。這3個不同時鐘頻率下工作的信號往往需要相互溝通和傳遞信號。
不同時鐘域下的信號傳遞就涉及到跨時鐘域信號處理,因為相互之間的頻率、相位不一樣,如果不做處理或者處理不當,如下圖所示的時鐘域CLK_A的數據信號A可能無法滿足時鐘域CLK_B的setup/hold時間,可能導致:
1.數據丟失,無法采到預期中的信號;
2.亞穩態的產生。
從而導致某個電路模塊或者整顆IC無法工作。
2
那么,常見的跨時鐘域信號處理方法都有哪些呢?有如下的三種:
兩級DFF同步器
握手協議
異步FIFO
最簡單的單比特信號處理通常采用兩級DFF串聯進行同步,如下圖所示:
從時鐘域A(CLKA)傳過來的信號a_in, 直接用時鐘域B CLKB采用很容易產生亞穩態,用兩級DFF 敲過后再使用就可以把亞穩態概率降到一個合理的值。
很多人可能會問,為什么是兩級DFF呢?一級或者三級DFF行不行呢?這里有一個平均失效間隔時間MTBF(Mean Time Between Failure)的考慮。MTBF時間越長,出現亞穩態的概率就越小,但是也不能完全避免亞穩態。注意采樣時鐘頻率越高,MTBF可能會迅速減小。
有文獻給出的數據:對于一個采樣頻率為200Mhz的系統,如果不做同步MTBF是2.5us,一級DFF同步的MTBF大概是23年,兩級DFF同步的大約MTBF大概是640年,MTBF越長出錯的概率越小。所以一級看上去不太穩,二級差不多夠用了,至于三級可能會影響到系統的性能,而且增加面積,所以看上去沒什么必要。
兩級DFF同步器聽起來夠簡單的吧?這個方法雖然很簡單,但是很多人用起來還是常常會犯錯。
3
錯誤1 :時鐘域A的組合邏輯信號直接敲兩級DFF同步到時鐘域B
如下圖(1)所示雖然時鐘域A的邏輯信號c0 傳輸到時鐘域B的時候,也用了兩級DFF 同步器,但我們知道組合邏輯電路各個輸入信號的不一致性以及組合邏輯內部路徑的延時時間不一樣,運算后的信號存在毛刺如圖(2),而我們又無法預先知道CLKB 的上升沿何時會到來,CLKB 采樣到的信號就無法預知,這顯然不是我們想要的結果。
因此,要想CLKB 能采到穩定的信號,時鐘域A的信號必須是經過CLKA 敲過,在一個時鐘周期內是穩定的信號,如圖(3)所示:
4
錯誤2 :Clock-gating enable 信號沒有經過異步處理
在下圖中a_in 信號經過CLKA的DFF敲過,再送到兩級DFF 同步器處理,完全沒毛病。但是F2的使能信號EN是從時鐘域A來的,當EN信號變化的時候,由于時鐘域不一樣,無法保證使能之后的CLKB信號采樣數據時滿足setup/hold time 要求,這時F2輸出信號也就變得無法預測了。
兩級同步器處理單比特信號雖然比較簡單,但還是要注意它的使用方法,不要犯上面的錯誤哦。
-
IC
+關注
關注
36文章
5957瀏覽量
175712 -
時鐘域
+關注
關注
0文章
52瀏覽量
9536
原文標題:IC面試中常被問到——跨時鐘域信號如何處理?
文章出處:【微信號:icstudy,微信公眾號:跟IC君一起學習集成電路】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論