• Techo

[IC設計] Asynchronous FIFO,使用非同步FIFO解決bus CDC(Crossing clock domain)問題

更新日期:2019年8月2日

在cdc問題中

最萬用的就是非同步FIFO了

其中的雙向 handshaking 雖然占用較多的傳遞時間

但卻是相當好用的架構

Asynchronous FIFO architecture
Asynchronous FIFO architecture

如上圖

interface 可切分為左半邊 write 端

interface 包含了

1. wdata : write data,寫入資料的bus

2. wfull : write full, FIFO已經滿的訊號

3. winc : write data valid,寫入資料的有效訊號

4. wclk : write clk,寫入端的 clk domain

5. wrst_n : write rst_n,寫入端clk的rst_n

和右半邊的 read 端

1. rdata : read data,讀取資料的bus

2. rempty : read empty, FIFO已經空的訊號

3. rinc : read data enable,讀取一筆資料的有效訊號

4. rclk : read clk,讀取端的 clk domain

5. rrst_n : read rst_n,讀取端clk的rst_n


最主要儲存資料的 FIFO memory 可以使用 register 或是 dual port(two clk) sram

wptr 和 rptr 分別是 write pointer 和 read pointer

為了避免 crossing clock domain 造成同時超過一筆訊號 metastable 的情況

wptr 和 rptr 必須要以 gray code 來做轉變

而 wptr 需要經過兩級 read clk domain 的 DFF 傳遞到 read 端

rptr 需要經過兩級 write clk domain 的 DFF 傳遞到 write端

再透過 rq2_wptr 和 rptr 的比較來做出 read empty 訊號

同時也透過 wq2_eptr 和 wptr 的比較來做出 write full 訊號

這樣外部就可以根據這兩個訊號來判斷是否可讀和可寫


在寫入端可以使用一個 and gate 將 winc 和 ~wfull and 起來

以避免外部 overwrite 的狀況


8065 次瀏覽0 則留言

最新文章

查看全部

[科技產業] IC設計股價起飛中,我該換工作嗎?

一兩個月前接到高通 Qualcomm 的電話 說是要發offer給我 由於距離面試結束後已經過了四五個月 時機已不同所以一些因素我婉拒了這個 offer 但後來不斷有 recruiter 或是 headhunter 一直寄信給我 例如 Arm china, Nvidia, Google, SiFive 在這個時機點都瘋狂地找人 讓我不禁懷疑真正的IC設計時代難道現在才開始嗎? 我留下這篇文章來記錄

Logo2020.JPG