設(shè)計(jì)者為了提升FIFO的速度使用了將二進(jìn)制計(jì)數(shù)器和格雷碼計(jì)數(shù)器結(jié)合在一起的方法,從最開(kāi)始用一組寄存器來(lái)進(jìn)行格雷碼到二進(jìn)制碼的轉(zhuǎn)換,二進(jìn)制碼的遞增和二進(jìn)制碼到格雷碼的轉(zhuǎn)換,到后來(lái)的style#2(如圖)。
在本篇當(dāng)中,作者進(jìn)一步對(duì)此設(shè)計(jì)進(jìn)行了說(shuō)明,使用這種格雷碼計(jì)數(shù)器的目的是利用了二進(jìn)制數(shù)進(jìn)位的機(jī)制簡(jiǎn)化了格雷碼到二進(jìn)制碼的轉(zhuǎn)換電路來(lái)減少組合邏輯電路,這樣整個(gè)計(jì)數(shù)器的工作頻率上限就會(huì)有所提升。
Dual n-bit Gray Code counter style#2
但是,可以看到這里的設(shè)計(jì)需要使用兩組寄存器,這里可能會(huì)體現(xiàn)到PPA trade-off的思想了(因?yàn)槲乙矝](méi)有實(shí)驗(yàn)過(guò)這種替換方式會(huì)不會(huì)帶來(lái)更大的面積損耗)。不過(guò),對(duì)FPGA來(lái)講,FPGA包含著許多寄存器資源,所以使用FPGA來(lái)實(shí)現(xiàn)這種設(shè)計(jì)方法就不需要考慮面積上的損耗,更能凸顯出速度提升上的優(yōu)勢(shì)!
上文說(shuō)到,設(shè)計(jì)FIFO中最重要的部分也是最難的部分之一就是如何產(chǎn)生空滿(mǎn)標(biāo)志信號(hào)。一種方法就是上一篇提到的使用發(fā)送到對(duì)面時(shí)鐘域的同步后的格雷碼指針來(lái)進(jìn)行比較,從而判斷空滿(mǎn)信號(hào)的產(chǎn)生。而另外一種方法就是本篇文章所提到的,指針的比較不再是同步的了,而是通過(guò)“異步”比較,并判斷空滿(mǎn)信號(hào)。
上篇文章提到的判斷空滿(mǎn)信號(hào)的方法是比較指針是否一樣,并通過(guò)多增加一個(gè)bit位來(lái)討論指針被套圈的問(wèn)題。不同于上個(gè)設(shè)計(jì),本篇文章提出了一個(gè)更有創(chuàng)意的思路來(lái)判斷空滿(mǎn)信號(hào)的產(chǎn)生。
作者將FIFO的地址分成了四個(gè)區(qū)間并通過(guò)編碼兩個(gè)指針計(jì)數(shù)器最高的兩位來(lái)比較判斷FIFO將要空滿(mǎn)的 趨勢(shì) 。舉個(gè)栗子,如果寫(xiě)指針落在讀指針后面一個(gè)區(qū)間則表示FIFO將要滿(mǎn),然后當(dāng)指針重合時(shí)則將direction寄存器置位,如下圖。
FIFO is going full because the wptr trails the rptr by one quadrant
而如果寫(xiě)指針落在讀指針前面一個(gè)區(qū)間則代表FIFO將要空,然后當(dāng)指針重合的時(shí)候則將direction寄存器復(fù)位。
FIFO is going empty because the rptr trails the wptr by one quadrant
結(jié)語(yǔ):
這篇文章理解起來(lái)可能要比前一篇更難理解一點(diǎn),給我的感覺(jué)就是看起來(lái)很暈。沒(méi)有把握給大家闡明清楚,所以就不再做更深入的探討了。還是推薦大家如果對(duì)這個(gè)設(shè)計(jì)方法感興趣的話可以讀一下原文。
-
編碼器
+關(guān)注
關(guān)注
45文章
3638瀏覽量
134423 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120228 -
二進(jìn)制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41643 -
FIFO存儲(chǔ)
+關(guān)注
關(guān)注
0文章
103瀏覽量
5968 -
組合邏輯電路
+關(guān)注
關(guān)注
6文章
70瀏覽量
14648
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論