一种基于流水线cordic的三角函数发生器设计.docxVIP

  • 1
  • 0
  • 约2.29千字
  • 约 3页
  • 2023-11-03 发布于湖北
  • 举报

一种基于流水线cordic的三角函数发生器设计.docx

一种基于流水线cordic的三角函数发生器设计 1 y型模校正因子 在数字数据处理中,高速高精度的三角函数发生器广泛应用于数字数据处理中。传统的方法是采用查表、多项式展开或近似的方法。这些方法在速度、精度、简单性和高效实现方面不能兼顾。对比而言,用CORDIC实现的三角函数发生器能很好地兼顾这些方面,并且极适合于VLSI实现。提出了一种基于流水线CORDIC的离散三角函数发生器。 CORDIC(Coordinate Rotation Digital Computer)由J.Volder提出,主要运用于计算三角函数、双曲函数及其它一些基本函数的运算。J.Walther于1971年提出了统一的CORDIC形式,该算法的基本原理如图1所示,初始向量V1旋转角度θ后得到向量V2。 x2=x1?cosθ-y1?sinθ(1)y2=y1?cosθ+x1?sinθ(2)x2=x1?cosθ?y1?sinθ(1)y2=y1?cosθ+x1?sinθ(2) 重写式(1)、式(2),得 x2=(x1-y1?tanθ)?cosθ(3)y2=(y1+x1?tanθ)?cosθ(4)x2=(x1?y1?tanθ)?cosθ(3)y2=(y1+x1?tanθ)?cosθ(4) 为了在硬件上实现方便,作如下约定:每一次旋转的角度θ正切值为2的倍数,即 θi=atan(2-i)θi=atan(2?i) 则cosθi=√11+2-2icosθi=11+2?2i?????√ 并且约定以δi代表向量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i步的旋转可用下式表示 xi+1=(xi-δi?yi?2-i)?√11+2-2iyi+1=(yi+δi?xi?2-i)?√11+2-2ixi+1=(xi?δi?yi?2?i)?11+2?2i?????√yi+1=(yi+δi?xi?2?i)?11+2?2i?????√ 其中√11+2-2i11+2?2i?????√——模校正因子,对于字长一定的运算,它是一个常数,我们用K+1表示。以16bit字长为例, Κ+1=15∏i=0√11+2-2i≈0.607252935K+1=∏i=01511+2?2i???????√≈0.607252935 这样可将输入数据X,Y校正后再参与运算,避免在运算中增加校正运算。运算迭代式可以简化成 xi+1=xi-δi?yi?2-i(5)yi+1=yi+δi?xi?2-i(6)xi+1=xi?δi?yi?2?i(5)yi+1=yi+δi?xi?2?i(6) 上式运算就只有加或减法和移位了。根据J.Walther的推导,(5)式、(6)式的n次迭代可以得到如下结果 {xn=x0?cosz0-y0?sinz0yn=y0?cosz0+x0?sinz0zn→0(7)?????xn=x0?cosz0?y0?sinz0yn=y0?cosz0+x0?sinz0zn→0(7) 本文介绍的三角函数发生器是在(7)式的基础上,给定x0=K+1,y0=0,迭代结果为 xn=cosz0?yn=sinz0?zn→0 所以,将所需产生的角度值作为z0输入,迭代结果输出xn和yn就是需要的三角函数值。采用的迭代方程组为 {xi+1=xi-δi?yi?2-iyi+1=yi+δi?xi?2-izi+1=zi-δi?atan(2-i)(8) 2 设计流程和结果 (1) 扩大角度适用范围 根据角度范围要覆盖-π~π,确定数据格式为:***.****,****,****,*计16bits,最高位是符号位,而后是两个整数位,低13位为小数位。 按J.Walther提出的迭代序列:0,1,2,…,n-1,所覆盖的角度只有-99.9°~+99.9°,而一般都要求覆盖-π~π,所以我们采用增加迭代的方法来扩大角度覆盖范围,即增加两个i=0的迭代,则移位序列为:0,0,0,1,2,…,n-1。 系统采用流水线结构,总计有18级流水单元,示意图如图2所示。图2中的加法单元实际可以完成加减运算,加或减由(8)式中的δi决定,移位器所执行的移位操作则与移位序列对应,角度序列θi选用如下序列。 需存储的角度值为 atan(20)≈0atan(2-1)≈0tan(2-2)≈0atan(2-15)≈0θi采用的即是上述的i从0~15的存储的反正切值。 按照图2的结构,用VHDL描述流水线结构,各流水单元功能简单描述如表1所示。 (2) fpga仿真实验 先用VHDL描述上述结构,在每个流水单元的内部则描述其行为;采用Synopsys的VSS对VHDL程序进行功能仿真,结果正确后,采用FPGA Express综合出网表;用Xilinx的FPGA实现,布局布线的结果是在一片

文档评论(0)

1亿VIP精品文档

相关文档