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的资源特点;

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