編 者 按
前段時間和幾個人閑談,看看在FPGA里面實現(xiàn)一個Mem加法器怎么玩兒
加法器
看一個很簡單的代碼:
val memContext=Array.fill(16*1024)(0) def addOne(index:Int)={ memContext(index)=memContext(index) }
一個很簡單的功能。一個16K大小的數(shù)組。在軟件人眼里這連最初級的面試題都算不上是吧~
那么我們考慮下在FPGA里面的實現(xiàn)。數(shù)組位寬如此之大,如果誰上來說用寄存器實現(xiàn)那真的要貽笑大方了~這種情況無他,只能使用Block Mem來實現(xiàn)。
相比于軟件,邏輯設(shè)計引入了時序的概念,也就是加上了時鐘這個維度。這里是要首先讀出原始的數(shù)據(jù)加1后再寫回回去。而對于Block Mem,其讀延遲至少有一拍的讀延遲,這里實現(xiàn)需要先讀后寫,如果要實現(xiàn)每拍均能處理一個指令那顯然是需要Mem Write First類型了。
Block Mem
對于Block Mem,下面是Xilinx中Block Ram的結(jié)構(gòu)圖:
對于Block RAM,地址線在進入到Memory Array之前會先經(jīng)過一級寄存器。Memory Array選擇輸出則會經(jīng)過一級Latch,隨后可通過選擇器選擇是直接輸出還是再經(jīng)過一級寄存器輸出。
對于Block RAM的使用,如果選擇讀延遲為1 cycle,那么Dout會通過Latches輸出,如果讀延遲為2 cycle,那么Dout將會通過寄存器輸出。初學FPGA那會兒,一般在使用Block RAM時,往往就無腦的選擇一拍的delay設(shè)計模式。現(xiàn)在再來看,在FPGA設(shè)計里,這種形式往往不利于提升時鐘頻率。在FPGA設(shè)計里,如果想要盡可能提高時鐘頻率,那么對于Block Ram的使用則需要將Block Ram中Dout前的寄存器給使用起來,即讀延遲需要兩拍的延遲。而再考慮Block RAM的拼接,布局布線的位置,那么可能就需要更高的讀延遲了。
對于高頻設(shè)計,Memory的Write First的設(shè)計實現(xiàn)就需要考慮讀延遲的拍數(shù)了~
假定Read Latency為N,那么上面的例子就相當于:
-
FPGA
+關(guān)注
關(guān)注
1643文章
21966瀏覽量
614136 -
Xilinx
+關(guān)注
關(guān)注
73文章
2182瀏覽量
124360 -
加法器
+關(guān)注
關(guān)注
6文章
183瀏覽量
30607 -
代碼
+關(guān)注
關(guān)注
30文章
4887瀏覽量
70259
原文標題:做個Mem加法器——Mem Write First
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
加法器
加法器,加法器是什么意思
十進制加法器,十進制加法器工作原理是什么?
FPU加法器的設(shè)計與實現(xiàn)

同相加法器電路原理與同相加法器計算

加法器是什么?加法器的原理,類型,設(shè)計詳解

超前進位加法器是如何實現(xiàn)記憶的呢

評論