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