之前有一篇文章講述了跨時鐘域信號的處理第1篇,IC面試中常被問到——跨時鐘域信號如何處理?這是第2篇。
前面提到,用敲兩級DFF的辦法(兩級DFF同步器)可以實現(xiàn)單比特信號跨時鐘域處理。但你或許會有疑問,是所有的單比特信號跨時鐘域都可以這么處理嗎?
NO!兩級DFF同步器,是對信號有一定的要求的。
想象一下,如果頻率較高的時鐘域A中的信號D1 要傳到頻率較低的時鐘域B,但是D1只有一個時鐘脈沖寬度(1T),clkb 就有幾率采不到D1了,如圖1。
圖1 快時鐘域信號傳遞到慢時鐘域
因此只有當(dāng)D1 在很長一段時間內(nèi)為1或0,確保一定可以被clkb采樣到,才能用兩級DFF同步器處理。
如果信號D1 只有1T或幾個T的脈寬,又需要傳到時鐘頻率較低甚至或快或慢不確定的時鐘域B,這種情況該怎么如何處理呢?
1
握手協(xié)議(handshake)異步信號處理是一種常見的異步信號處理方法。常見的握手協(xié)議異步信號處理行為波形圖大致如下圖2:
圖2 一種handshake電路波形
信號d_in 所處時鐘域是clk_in,且d_in只有1T 的寬度,想要傳送到clk_out 時鐘域(clk_out 跟clk_in不相關(guān))。
因為clk_out 和 clk_in相位關(guān)系不確定,時鐘周期大小關(guān)系不確定,無法保證一定能采樣到d_in。
因此需要把d_in展寬,產(chǎn)生d_req 信號;
d_req 信號一直拉高,經(jīng)過clk_out時鐘域兩級DFF 同步器后,得到d_reg_sync;
取d_req_sync 上升沿1T,即可得到傳送到clk_out 時鐘域的d_out。
此時,d_in 從clk_in 傳送到clk_out 的任務(wù)就算是結(jié)束了。
但對于handshake 電路來說,任務(wù)還沒結(jié)束,因為d_req 還一直是高電平。
因此,需要把d_req_sync 信號再用兩級DFF同步器,傳回clk_in 時鐘域,得到d_ack信號;
當(dāng)clk_in 看到d_ack拉高后,就可以把d_req 信號拉低,到這里一個handshake電路行為才算是結(jié)束了。
2
根據(jù)上面的波形圖,可以看到握手協(xié)議異步信號處理并不復(fù)雜,但是細(xì)心的朋友應(yīng)該會注意到,這個處理方法信號傳遞的速度相對較慢。
從圖2 的波形來看,至少需要3個clk_in 和2個clk_out時鐘周期。根據(jù)不同的應(yīng)用需求,人們會對圖2的波形做不同的改造。但萬變不離其宗,原理都是一樣的,電路也大同小異。
最后留4個問題供大家思考,以增進對handshake電路的理解:
1. 圖2中的d_req的邏輯怎么實現(xiàn)?
2. 圖2中的d_out的邏輯怎么實現(xiàn)?
3. 假設(shè)時鐘域clka比clkb 頻率高,如果輸入信號的兩個相鄰脈沖D0和D1非常較近,如下圖所示,如果使用握手協(xié)議處理,會發(fā)生怎樣的事情?
4.問題3里面,如果要確保D1數(shù)據(jù)一定要被能傳送到clkb,電路該如何實現(xiàn)?
-
信號
+關(guān)注
關(guān)注
11文章
2842瀏覽量
77901 -
時鐘脈沖
+關(guān)注
關(guān)注
0文章
19瀏覽量
12902
原文標(biāo)題:IC面試中常被問到:跨時鐘域信號處理——握手協(xié)議(handshake)
文章出處:【微信號:icstudy,微信公眾號:跟IC君一起學(xué)習(xí)集成電路】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何處理跨時鐘域信號?
跨時鐘域信號如何處理 跨時鐘域電路設(shè)計

如何解決異步FIFO跨時鐘域亞穩(wěn)態(tài)問題?
基于FPGA的跨時鐘域信號處理——MCU

跨時鐘域信號該如何處理呢?

如何處理跨時鐘域這些基礎(chǔ)問題

評論