作者:没落骑士
一、前言
FPGA以擅长高速并行数据处理而闻名,从有线/无线通信到图像处理中各种DSP算法,再到现今火爆的AI应用,都离不开卷积、滤波、变换等基本的数学运算。但由于FPGA的硬件结构和开发特性使得其对很多算法不友好,之前本人零散地总结和转载了些基本的数学运算在FPGA中的实现方式,今天做一个系统的总结归纳。
二、FPGA中的加减乘除
1.硬件资源
Xilinx 7系列的FPGA中有DSP Slice ,叫做“DSP48E1”这一专用硬件资源,这是一个功能强大的计算单元,单就用于基本运算的部分有加减单元和乘法器。详见参考文献1.
因此可以直接用HDL语言中的加、减、乘符号实现变量与常量间运算操作以及变量与变量间操作。而四则运算中的除法没有基本的逻辑计算单元可以对应,因此计算除法需要调用除法器IP核。
2.确认数据的表示范围
有符号数:(补码)-2^(N-1) ~ 2^(N-1)-1 如N = 8,则表示范围是:-128 ~ 127.
无符号数:0~2^N-1 如N = 8,则表示范围是:0~255.
定点数:2Q13 范围是:-4~4-2^(-13) 精度是:2^(-13)
3.结果有效位宽
首先讨论结果位宽问题。在FPGA中往往采用定点运算替代浮点运算来降低硬件资源占用率和计算延迟,其中的精髓就是精度与资源的权衡。若按照保留计算结果的全部精度,N bit数与Mbit数相加结果需要N+1bit(N>M)。N bit数与M bit数相乘之积需要N+M bit。而减法可以转化为加法,除法则转换为乘法和加减法的组合。如果操作数是定点小数,则在满足以上准则的前提下,A与B相加(A小数点位数>B小数点位数),结果小数点位数与A相同;A与B相乘(小数点位数分别为p和q),结果小数点位数是p+q。
4.定点运算步骤
然而(话锋一转),在大多数场合下,不需要以上这么多位来保留计算结果,因为我们在进行数学运算时,已经知道输入数据的大致范围,一个数除以1000和除以1结果数据所需最小位