• Techo

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

更新日期:2019年8月2日

在cdc問題中

最萬用的就是非同步FIFO了

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

但卻是相當好用的架構

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 的狀況


1931 次瀏覽
Screen Shot 2018-11-05 at 12.06.31 PM.pn
  • Instagram - White Circle
  • Google+ - White Circle
  • Facebook - White Circle

Contact Us

Techo私人程式家教

官方LINE ID : @tutortecho

zh-Hant.png

© Copyright 2018 by Sherry Wu and Techo Chao.

Proudly created with Wix.com,

but page loading is too slow,so I don't recommend it.