cordic ip核 vivado_Chisel实践——利用CORDIC算法计算平方根

本文通过Chisel实践CORDIC算法,用于计算平方根,与Vivado CORDIC IP核进行精度和资源对比。在30位小数的32位定点数实现下,Chisel模块达到千万分之一的精确度,但资源消耗高于IP核。平方根模块简化后,资源占用显著减少。
摘要由CSDN通过智能技术生成

Chisel实践——利用CORDIC算法计算平方根

一、介绍

在本专栏之前的文章中:
用Chisel快速搭建FFT流水线电路
Chisel实践——短时傅里叶变换模块的实现与测试
Chisel实践——利用CORDIC算法计算对数函数
已经介绍了如何使用Chisel开发FFT运算模块和STFT模块,以及对于Chisel实现CORDIC算法的初步探索:计算对数函数。这篇文章将进一步拓展CORDIC算法在Chisel上的实现,使用其实现平方根计算,并与Vivado内的CORDIC IP核进行综合对比。

二、算法说明

本文为算法的拓展应用,详细的算法说明请参考专栏之前的文章:Chisel实践——利用CORDIC算法计算对数函数
CORDIC算法是基于移位加法和矢量旋转技术进行计算的。它主要有旋转模式(Rotation Mode)和向量模式(Vectoring Mode),两种模式又可以应用在圆坐标系、线性坐标系以及双曲坐标系。两种模式分别应用在三个坐标系,进行迭代运算,可以分别演算出8种运算。主要如下表总结:

15157938a0d2560c95dcff3481c48991.png

可以看到,其实CORDIC算法可以实现的8种函数中并没有平方根函数,那应该如何实现计算平方根呢?见下图:

727b7746258ce9dd3900360c37722d97.png

此过程具体的数学推导可以参考这篇文章。当取双曲坐标系进行向量模式的迭代运算时,我们可以将x的初始值设1,z的初始值设0,y设为你想进行运算的数。在迭代过程中y逐渐趋近于0,此时可以很容易地由z值得y的反双曲正切值,进而计算对数函数。
容易注意到,在这个迭代过程中,不仅仅出现了反双曲正切函数,也出现了平方根函数,因此我们可以稍作变换:设a为待求的平方根值,设x的初始值为a+1,y的初始值为a-1,z任意值皆可,经过迭代后的x值为:

即可实现求取平方根。

三、算法过程

3.1 逻辑说明

设x0 = a + 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值