[IC設計] 使用 Mux synchronizer (Qualifier)解決 bus 跨 clock domain crossing(CDC)的問題
更新日期:2019年12月16日
在 cdc 的問題中
有的時候我們可能需要將一條上千個 bit 的 bus 單向傳輸到另外一個時域
如果我們將整條bus的訊號都使用 two flip-flop synchronizer
那電路DFF的使用量將會暴增
那如果我們使用 Asynchronous FIFO 呢
由於我們只是需要單向跨clock domain
而不是雙向的來回handshaking
使用非同步FIFO同樣會產生大量沒用到的DFF造成電路面積上升
這個時候就要使用Qualifier也就是Mux synchronizer 來跨時域
如下圖

我們今天想要跨時域的是圖中的Data bus
想要將 data bus 從 clkA 轉到 clkB(不論誰的頻率快慢都一樣)
我們透過 data bus 的 valid 訊號(屬於clkA)
也就是圖中的 data enable A
將 data enable A 使用 two flip-flop synchronizer 跨到 clkB
也就是 data enable B
並且使用 data enable B當作最右邊DFF的 flip-flop enable 訊號(在圖中使用mux來示意)
由於data enable A 的時序等同於 data bus
跨到data enable B 時也就保證了 data bus 穿過 DFF 的訊號已經穩定
即可拿來鎖入最後一級DFF
最後一級的DFF的Q即是data bus存在於clk B domain的穩定訊號