| |
module cdcd_tb;
//
Inputs
reg
clk;
reg
[15:0] phi;
//
Outputs
wire
[16:0] cos;
wire
[16:0] sin;
//
Instantiate the Unit Under Test (UUT)
cdcd
uut (
.clk(clk),
.phi(phi),
.cos(cos),
.sin(sin)
);
always
#5 clk = ~clk;
initial
begin
//
Initialize Inputs
clk
= 0;
phi
= 0;
while(1)
begin
@(negedge
clk)
phi = (phi + (5<<8));
if( 90 <= (phi>>8))
phi = 0;
end
endmodule
用ISE自带的ISIM仿真,如下图所示:
选取一个值来检查:
选取,输入的角度为7680。。这是二进制显示,实际的角度为7680/256= 30°。
运算得出的结果
X =
cos(30°) = 56858/65536 = 0.867484
Y =
sin(30°) = 32585/65536 = 0.497208
与实际值相比较:
cos(30°) = 0.866025403784439
sin(30°) = 0.5
可看出,相比较,运算出来的结果还是有一定误差的。不过在允许的误差内,还是可以用的。当然可以增加迭代次数,这样可以减小误差。
以上实现,可看出,在一个时钟周期内,就可以算出结果了。但是因为这是功能仿真,没有考虑到计算的延时。如果是用时序仿真的话,就可以看出,输出结果和输入结果有一定的延时。由于中间的运算是采用组合逻辑实现的,因此运算的延时还是挺大的,这样的话,就会影响系统运行的最大频率了。
因此,在实际中,这样是不实用的。因此,后面可以采用流水线的结构,来进行运算,这样可以使系统的运行最大频率提高,还能在一个周期内算出结果。
以上,就是我对cordic算法的硬件实现的分析了。下次,分析采用流水线结构来实现三角函数。

/1
手机版|
小黑屋|
关于我们|
联系我们|
用户协议&隐私声明|
版权投诉通道|
EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 ) |网站地图
GMT+8, 2025-12-31 01:03 , Processed in 0.025441 second(s), 14 queries , Gzip On, Redis On.
eetop公众号
创芯大讲堂
创芯人才网