经过N次迭代后
这个K就是一坨cosθn的连乘,定义为增益因子。
取无限次迭代值为
P为K的倒数。Cordic算法有几种模式,这里只取旋转模式。将上述矩阵化为数列得
N次迭代后
然后就是套三角函数了,取X0=K,Y0=0,Z0=α,那么N次迭代之后
正余弦就算出来了。没了。
用在硬件上的优势是,该算法从矩阵去除cos因子之后就在尽力构造简易的二进制运算比如加减和移位。需要预先算好那个K的值精确到指定位数,还要算arctan(1/2^n),这些都要放到储存器里。
其中细节不说了,最后我设计出的玩意儿就下面这货。
硬件框图如下
注:1.由于我懒得去用数学软件打公式,以上数学公式的图片均截取自一篇来自桂林电子科技大学李全,陈石平和付佃华的论文《基于CORDIC 算法的32 位浮点三角超越函数之正余弦函数的FPGA 实现》
2.我不打算让三角函数运算单元加入FPU结构了,所以没做成IEEE754标准,只给浮点计算器用。
开方算法
特殊函数计算器除了三角函数外另一种运算是7位操作数开方运算,输出4位开方结果和4位余数。
算法为笔算开方算法(快速平方根算法),流程如下:
图片来自《基于FPGA快速平方根算法的实现》- 戢小亮,嵌入式技术,2007年14期
该算法在硬件上实现很简单,只需要用到加法器和移位器即可,所以在本工程中实现出来的体积不大。最终实现了一个23位开方根器,如下图直角梯形部分。
更多相关资讯请关注:我的世界专区