基于CORDIC算法的SIN和COS函数的设计

1.系统设计要求

1)设计一个应用CORDIC算法求解正弦函数sinθ和余弦函数cosθ的VHDL程序。

2)CORDIC算法简介

在现代信号处理中,经常会遇到三角函数、超越函数和坐标转化等问题。传统的实现方法有查找表、多项式展开等方法。这些方法在精度、速度、简单性和效率方面往往不能兼顾,而CORDIC算法则可以很好地兼顾这几方面的要求。    

CORDIC是坐标旋转数字计算机(Coordinate Rotations Digital Computer)的英文字头缩写,它于1959年由J.Volder提出,首先应用于导航系统,使得矢量的旋转和定向运算不需要做复杂运算。

CORDIC算法的基本思想是通过一系列固定的、与运算基数相关的角度偏摆来逼近所需的旋转角度。可通过该算法的圆周模式、双曲线模式、线性模式等不同的实现模式,来计算乘除、平方根、正弦、余弦、反正切向量旋转以及指数运算等。由于基本运算单元只有移位与加减法,这就为CORDIC算法的FPGA实现打下了良好的基础。

       2.CORDIC算法实现结构 

CORDIC算法的实现有两种结构方案:迭代结构和流水线结构。

基于迭代结构的CORDIC算法实现方案只需要一组移位及加减运算的单元,硬件开销很小,但控制比较复杂,而且完成一次CORDIC运算需要多个时钟周期,当对速度要求较高时很难满足要求。

基于流水线结构的实现方案,每级CORDIC迭代运算都使用单独的一套运算单元,与基于迭代结构的实现方案相比,流水线结构的处理速度非常快,当流水线填满之后每个时钟周期就会计算出一组结果。

本设计采用流水线结构进行设计:

外部输入XI、YI、ZI作为第一级流水线单元的输入X(0)、Y(0)、Z(0);

中间各个单元首尾相接,也就是第N个单元的输入与N-1个单元的输出X(N-1), Y(N-1), Z(N-1)相连,第N个单元的输出X(N), Y(N), Z(N)又与N+1个单元的输入相连;

最后一级处理单元的输出X(N)、Y(N)、Z(N)就是整个系统的输出XO、YO、ZO。

   先设计一个根据已知的( Xn-1,Yn-1,Zn-)求解( Xn,Yn ,Zn )的通用流水单元电路程序CORDICPIPE.VHD,再利用N个单元电路构成流水线,实现由(X0,Y0 ,Z0 )求解( Xn,Yn ,Zn )的CORDIC算法实现电路程序CORDIC.VHD,最后给CORDIC算法实现电路赋予确定的初值(0.60725,0,角度 ),构建一个求解正弦和余弦函数的顶层电路程序

        3 . 主要模块的设计思想与源程序设计

--CORDIC.VHDL
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
 ENTITY CORDIC IS
	GENERIC(PIPELINE:INTEGER:=15;
					WIDTH:INTEGER:=16);
	PORT(CLK:IN STD_LOGIC;
			ENA:IN STD_LOGIC;
			XI:IN SIGNED(WIDTH-1 DOWNTO 0);
			YI:IN SIGNED(WIDTH-1 DOWNTO 0):=(OTHERS=>'0');
			ZI:IN SIGNED(WIDTH-1 DOWNTO 0);
			XO:OUT SIGNED(WIDTH-1 DOWNTO 0);
			YO: OUT SIGNED(WIDTH-1 DOWNTO 0));
	END ENTITY CORDIC;
ARCHITECTURE ART OF CORDIC IS
	TYPE XYVECTOR IS ARRAY(PIPELINE DOWNTO 0)OF
	SIGNED(WIDTH-1 DOWNTO 0);
	TYPE ZVECTOR IS ARRAY(PIPELINE DOWNTO 0)OF
	SIGNED(19 DOWNTO 0);
	COMPONENT CORDICPIPE
	GENER
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值