FPGA实现数学函数
1、硬件除法硬件除法运算与乘法和加法不同,没有简单的逻辑操作,所以需要用其它的办法来解决。
1.1 乘法和移位
利用乘法和移位操作。除法可以等效为乘以一个数,再除以一个数,这两个数都是2的幂,所以可以采用移位来代替。
1.2 迭代除法
对于定点数的除法可以用一个比较器和一个减法单元来构造。
1.3 Goldschmidt方法
Goldschmidt方法比拆开迭代环路方法更加有效的方式提供流水线处理除法的方法。
Goldschmidt算法背后的概念时用近似1/D的数值与N相乘来计算Q=N/D,再通过逐步的逼近来获得真正的商。具体的步骤如下:
(1)对N和D移动定点到使得N≥1和D≤2的位置。在浮点操作的意义上,这个称为归一化分子和分母。
(2)从查找表找一个初始的1/D近似值开始,并命名它为L1,取决于应用,8到16位的精度常常是足够的。
(3)计算第一个近似值q1=L1*N和误差项e1=L1D(当迭代接近无限时它将接近1)
(4)假设L2=-e1(2的补码)开始迭代。
(5)e2=e1*L2和q2=q1*L2
(6)类似步骤4,L2=-e1,继续逐步的迭代。
2、泰勒和Mactaurin级数展开
泰勒和Mactaurin级数可以利用分解诸如指数、三角函数和对数称为简单的乘和加的操作,更好的适合硬件。
泰勒展开式:
Mactaurin展开式:
3、CORDIC算法
CORDIC算法是使用一个逐步逼近的算法,它对于计算三角函数正弦和余弦十分有效,且在计算正弦函数和余弦函数时要优于泰勒展开和Mactaurin展开。
4、小结
乘法和移位的方法式执行除法的方便形式,但是,只可以在除数按照规定的形式表示时利用。
对于能够承受迭代除法过程相对法时滞的定点除法这个紧缩结构是有用的
Goldschmidt方法比迭代方法中的展开环路能够更有效地将整个除法过程流水线化。
Taylor和Mactaurin级数展开可以利用分解复杂函数称为简单的乘和加的操作,更方便硬件实现。
CORDIC算法对于计算正弦和余弦运算优于Taylor展开。
页:
[1]