FPGA實現多個數的加法運算

問題:

y = x0 + X1 + ...+ x1024

其中每個x的位寬都不大,3~5比特,請教最優化等等實現方法

 

回答:

  1. 直接一個assign的話。這種方法佔用資源太多了,assign out = x0+...+x3071;其中xi爲3bit,一共使用了13000多個lut,有沒有什麼辦法能使用最少的資源?吞吐率個延遲都不打緊
  2. 不在乎吞吐率和延遲的話,一個DSP slice加一組reg就搞定了
  3. 那就時間換資源唄,一個加法器用多個時鐘實現所有數的累加。時分複用
  4. 同時用多級流水+多週期算一個結果,主頻可以提高些,資源也能省一些

    如果吞吐率有要求的話,1kLUT應該可以搞定。時鐘應該可以到100M

    把你的輸入數據根據吞吐率要求分組吧,每個組並行計算,吞吐率要求越高,分組越多,每個分組計算的時間也就越小,資源也就越多。分組越少,每個組計算時間就越長,資源就省,吞吐率就低。

  5. 提高時鐘,提高時分複用的倍數肯定是可以換取一定的資源開銷的節省。想除此之外,利用運算過程是多個數的加減法這一特點,有沒有好的實現形式能夠節省LUT

  6. 我實現的時候基本也是這樣的,你想省資源就從位寬上想想,比如你只是找到相關峯的位置,那中間有些數據可以砍數據位

  7. 吞吐率最大、延時最小的是樹形累加,但是需要把數據預先展開,而且會浪費不少寄存器;

    本地累計數據最好組織,用DSP SLICE也可,但是比較浪費硬核資源;

    還有一種叫傳遞累加,或也叫脈動陣列, systolic array,除延時外,其它都挺好,而且比較適合FPGA的資源特點;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章