将算法映射到FPGA中如何节省资源


最近学习基于FPGA的图像处理时,在书中看到了算法移植的一些通用的节省硬件资源的方法,在这里和大家分享一下
本章节介绍定常数转换,不等式等效转换,截断,泰勒近似和增量更新。下一章节介绍查找表,浮点运算。(此外还有Cordic技术,由于作者水平有限,对其中涉及到的某些概念理解的不够深入,也许会在以后的博客进行更新)。

算法映射是什么

将各种算法(如图像处理的算法)转换为FPGA系统设计的过程称为算法映射。

计算技术

计算技术是图像处理的核心技术之一。在软件算法设计和调试完成之后,需要将软件的算法映射到FPGA中去,由于软件和硬件的设计差异性,相当一部分算法在映射前需要通过等效转换,近似计算等硬件技术技术来转换成硬件易于实现的方式,从而达到逻辑资源占用量和系统最高工作频率,计算误差的平衡。

算法转换

定常数转换

在乘法和除法运算中,经常会遇到乘数,被乘数或分子与分母是常数的情况。直接调用乘法器或除法器可以解决这个问题,但是这会消耗一定的DSP运算单元,而DSP运算单元往往是FPGA中比较少的资源。对于定常数,可以通过一定的转换将其转换为移位和加法运算,从而减少乘法器和除法器的使用。下面列举几个常用的例子。
 dout  = din ⁡ × 255 \text { dout }=\operatorname{din} \times 255  dout =din×255
转换后
d o u t = din ⁡ × ( 256 − 1 ) = ( din ⁡ ≪ 8 ) − din ⁡ \mathrm{dout}=\operatorname{din} \times(256-1)=(\operatorname{din} \ll 8)-\operatorname{din} dout=din×(2561)=(din8)din
~
 dout  = din ⁡ × 123 \text { dout }=\operatorname{din} \times 123  dout =din×123
转换后
 dout  = din ⁡ × ( 64 + 32 + 16 + 8 + 2 + 1 ) = din ⁡ × ( 2 6 + 2 5 + 2 4 + 2 3 + 2 1 + 2 0 ) = din ⁡ × [ 2 7 − ( 2 2 + 2 0 ) ] \begin{aligned} \text { dout } &=\operatorname{din} ×(64+32+16+8+2+1) \\ &=\operatorname{din} ×\left(2^{6}+2^{5}+2^{4}+2^{3}+2^{1}+2^{0}\right) \\ &=\operatorname{din} ×\left[2^{7}-\left(2^{2}+2^{0}\right)\right] \end{aligned}  dout =din×(64+32+16+8+2+1)=din×(26+25+24+23+21+20)=din×[27(22+20)]
对于小数的处理则需要先将其转换为整型进行处理:
 dout  = din ⁡ / 25 \text { dout }=\operatorname{din} / 25  dout =din/2

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值