在了解sync fifo後,可以開始來研究一下何謂async fifo?
小弟在這邊盡量利用了sync fifo的架構圖來呈現async fifo的運作,
以方便各位更容易的理解其中的奧妙
以Top view來看,基本上和sync fifo沒太大的不同,
最大的差異則是clk和rst長出了兩組,
一個給予write端做使用一個則給予read端

接著讓我們來看看內部的細節

從上面的架構圖看下來,
和sync fifo不同之處就只有原先的cnt出現了變化,
改成了2組名為B2G的function block和用來消除metastable的2dff.
看到這邊就會開始不經懷疑真這麼簡單?
就架構上來說是的,
不過其中卻充滿了許多的內涵,
大家有興趣也可以研讀看看下面這篇paper, 堪稱async fifo的權威
Simulation and Synthesis Techniques for Asynchronous FIFO Design, Clifford E. Cummings, Sunburst Design, Inc.
如果懶得看英文也可以看看小弟接下來的文章
對於async fifo架構來說mem的上半部和sync基本上是沒有差異的
差別在cnt會換成了B2G和2dff,
因此接下來會會各位解釋一下這邊的核心價值,
相信大家在看到小弟的文章前也瀏覽過許多不同人對於這塊地闡述,
或許有些不懂的地方就由我來換個方式說明看看.
我們在sync fifo中提到說cnt的function是用來計算fifo的使用情況的,
當cnt數到fifo depth數時代表fifo wirte寫滿了,
當cnt數到0時代表fifo是空的,
既簡單又清楚,
那為甚麼在async fifo上就無法使用這個手法了呢?





















