設(shè)計者為了提升FIFO的速度使用了將二進制計數(shù)器和格雷碼計數(shù)器結(jié)合在一起的方法,從最開始用一組寄存器來進行格雷碼到二進制碼的轉(zhuǎn)換,二進制碼的遞增和二進制碼到格雷碼的轉(zhuǎn)換,到后來的style#2(如圖)。
在本篇當中,作者進一步對此設(shè)計進行了說明,使用這種格雷碼計數(shù)器的目的是利用了二進制數(shù)進位的機制簡化了格雷碼到二進制碼的轉(zhuǎn)換電路來減少組合邏輯電路,這樣整個計數(shù)器的工作頻率上限就會有所提升。

Dual n-bit Gray Code counter style#2
但是,可以看到這里的設(shè)計需要使用兩組寄存器,這里可能會體現(xiàn)到PPA trade-off的思想了(因為我也沒有實驗過這種替換方式會不會帶來更大的面積損耗)。不過,對FPGA來講,FPGA包含著許多寄存器資源,所以使用FPGA來實現(xiàn)這種設(shè)計方法就不需要考慮面積上的損耗,更能凸顯出速度提升上的優(yōu)勢!
上文說到,設(shè)計FIFO中最重要的部分也是最難的部分之一就是如何產(chǎn)生空滿標志信號。一種方法就是上一篇提到的使用發(fā)送到對面時鐘域的同步后的格雷碼指針來進行比較,從而判斷空滿信號的產(chǎn)生。而另外一種方法就是本篇文章所提到的,指針的比較不再是同步的了,而是通過“異步”比較,并判斷空滿信號。
上篇文章提到的判斷空滿信號的方法是比較指針是否一樣,并通過多增加一個bit位來討論指針被套圈的問題。不同于上個設(shè)計,本篇文章提出了一個更有創(chuàng)意的思路來判斷空滿信號的產(chǎn)生。
作者將FIFO的地址分成了四個區(qū)間并通過編碼兩個指針計數(shù)器最高的兩位來比較判斷FIFO將要空滿的 趨勢 。舉個栗子,如果寫指針落在讀指針后面一個區(qū)間則表示FIFO將要滿,然后當指針重合時則將direction寄存器置位,如下圖。

FIFO is going full because the wptr trails the rptr by one quadrant
而如果寫指針落在讀指針前面一個區(qū)間則代表FIFO將要空,然后當指針重合的時候則將direction寄存器復(fù)位。

FIFO is going empty because the rptr trails the wptr by one quadrant
結(jié)語:
這篇文章理解起來可能要比前一篇更難理解一點,給我的感覺就是看起來很暈。沒有把握給大家闡明清楚,所以就不再做更深入的探討了。還是推薦大家如果對這個設(shè)計方法感興趣的話可以讀一下原文。
-
編碼器
+關(guān)注
關(guān)注
45文章
4007瀏覽量
143276 -
寄存器
+關(guān)注
關(guān)注
31文章
5617瀏覽量
130374 -
二進制
+關(guān)注
關(guān)注
2文章
809瀏覽量
43169 -
FIFO存儲
+關(guān)注
關(guān)注
0文章
103瀏覽量
6341 -
組合邏輯電路
+關(guān)注
關(guān)注
6文章
71瀏覽量
15162
發(fā)布評論請先 登錄
用FPGA芯片實現(xiàn)高速異步FIFO的一種方法
異步FIFO結(jié)構(gòu)及FPGA設(shè)計
一種異步FIFO的設(shè)計方法
異步FIFO結(jié)構(gòu)及FPGA設(shè)計
基于FPGA的異步FIFO設(shè)計方法詳解
基于異步FIFO結(jié)構(gòu)原理
關(guān)于一種面向異步FIFO的低開銷容錯機制研究
一種基于FPGA內(nèi)部存儲器的適合音頻解嵌的高效異步FIFO設(shè)計
同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用
請問異步FIFO的溢出操作時怎么樣判斷的?
同步FIFO和異步FIFO區(qū)別介紹
關(guān)于另外一種設(shè)計異步FIFO的簡介
評論