资源描述:
《FPGA_ASIC-浮点正余弦函数的FPGA及自定义指令实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、浮点正余弦函数的FPGA及自定义指令实现桂林电子科技大学信息与通信学院541004李全陈石平李晓欢黄守麟摘要:介绍了CORDIC算法的基本原理,并且对CORDIC内核、前处理和后处理单元进行了讨论。通过增加迭代次数,对参数进行了优化筛选,提高了运算精度,使设计出的超越函数能够在精度要求较高的场合中运行。输出数据经过IEEE-754标准化处理,能够直接兼容大多数处理器,扩展了其应用范围。最后通过增加自定义指令的方式完成了部分超越函数的软硬件测试及其对比。关键字:CORDIC算法;自定义指令;IEEE-754;FPGA;NiosⅡ中图分类号:TP394文献标识码:A文章编号:Th
2、eimplementationofCustominstructionoffloatingsin&cosfunctionbasedontheFPGALIQuan,CHENShi-ping,LiXiao-huan,HuangShou-lin(SchoolofInformation&CommunicationoftheGuilinUniversityofElectronicTechnology,Guilin,541004,China)Abstract:ThispaperintroducesthebasicprinciplesoftheCORDICalgorithm,itmakess
3、omeresearchaboutCORDICkernel,pre-processorunitandpost-processorunit.Itimprovesthecalculationprecisionthroughincreasingtheiterationtimes,optimizingandselectingtheargumentsbasedonthetraditionalCORDICalgorithm,makingthedesignedsoft-coreadaptedtohigherprecisionrequiredoccasion.Theoutputdatacanb
4、edirectlycompatiblewithmostoftheprocessorsbytheIEEE-754standardprocessing,soitsapplicationareaiswidelyextended.FinallyitaccomplishthesoftandhardwaretestsandcomparesofsometrigonometricfunctionsbyaddingcustominstructionontheNiosⅡ.Keywords:CORDICAlgorithm,CustomInstruction,IEEE-754,FPGA,NiosⅡ引
5、言NiosⅡ处理器是Altera公司推出的32位RISC软核处理器。设计时在选择处理器数量和性能指标上软核处理器具有很大的灵活性,也便于软件和设计升级,意味着处理器不会被淘汰。在NiosⅡ处理器可以添加用户的自定义指令,综合后下载到FPGA中可以实现用户自定义的特定功能,加快处理器的运行速度,缩短产品研发和上市时间。在实时语音信号、图像信号处理、数字滤波技术、FFT变换等领域浮点超越函数的应用领域十分广泛。因此,设计并实现硬件浮点三角函数是非常重要的。CORDIC算法适合于在FPGA实现,本文利用该算法实现单精度的正余弦函数。1CORDIC原理[1]CORDIC(Coordi
6、nateRotationDigitalComputer)算法即坐标旋转数字计算方法,是J.D.Volder于1959年首次提出,主要用于三角函数、双曲线、指数、对数等计算。该算法使用加减法和移位运算代替乘法运算,非常适合于用PFGA实现,使得矢量的旋转和定向的计算不再需要三角函数、乘法、开方、反三角、指数等复杂函数。1.1圆周系统CORDIC算法包含圆周系统,线性系统,双曲系统三种旋转系统。本文采用圆周系统,完成平面坐标旋转,如图1所示,从图1可以看出将向量(Xn,Yn)旋转θ角,得到新向量(Xn+1,Yn+1),那么有:⎧XRnn+1=+cos(θβ)=−XcosθYnsi
7、nθ⎨(1)⎩YRnn+1=+sin(θβ)=+XsinθYncosθ__________________基金项目:广西研究生教育创新项目(2007105950810m15)Y(,)XYnn++11Yn+1Yn(,)XnnYθβXXn+1Xn图1坐标旋转图其中R为圆周的半径,θ为旋转角度。消除cosθn因子,把式(1)转化为矩阵表示形式如下。⎡⎤⎡XXcosθθ−−sin⎤⎡⎤⎡1tanθ⎤⎡⎤Xn+1nnnnn⎢⎥⎢==⎥⎢⎥cosθ⎢⎥⎢⎥(2)nYYsinθθcostanθ1Y⎣⎦⎣nn+1n⎦⎣