本文主要是介绍Vivado使用Cordic IP计算e^ix(复e指数函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里写自定义目录标题
- 原理
- IP解析
- 设置IP
- HDL Code
- Simulation
- Code
- 仿真
- reference
原理
根据欧拉公式
e^(ix)=(cos x+isin x)
IP解析
1 选择功能为计算正余弦
2 并行(面积和速度的平衡)
3 流水线模式开到最大(不知道有啥用)
4 有符号小数(整数宽度为2(里面应该包含了一位符号位))
这个选项是默认的,而且我们用的是相位而不是坐标对,可以忽略这个选项
5 相位格式(以弧度为单位还是以pi为单位,1位符号位,2位整数位和N-3位小数位的补码)
不同的格式对应着不同的输入范围,
6 输入宽度(按需配置)
7 输出宽度(建议与输入宽度保持一致)
输入时为2qn,输出时为1qn
8 取整模式(这里计算的是小数,私以为取整模式不重要)
9 迭代次数(设置为0,自动确认)
10 精度(设置为0,自动确认)
11 Coarse Rotation 是否将输入范围从第一象限(-Pi/4 to + Pi/4)扩大到整个圈
12 补偿比例 sin函数下不生效
设置IP
高位表示正弦函数,低位表示余弦函数
HDL Code
module correlation(input clk,input rst_n,input [15:0] phase_in ,input [ 0:0] phase_vld);wire [15:0] sinx;wire [15:0] cosx;wire [ 0:0] out_vld;cordic_0 sin_cos (.aclk ( clk), // input wire aclk.s_axis_phase_tvalid ( phase_vld ), // input wire s_axis_phase_tvalid.s_axis_phase_tdata ( phase_in ), // input wire [15 : 0] s_axis_phase_tdata.m_axis_dout_tvalid ( out_vld ), // output wire m_axis_dout_tvalid.m_axis_dout_tdata ( {sinx, cosx} ) // output wire [31 : 0] m_axis_dout_tdata);
endmodule
Simulation
Code
module tb_correlation;// correlation Parameters
parameter PERIOD = 10;// correlation Inputs
reg clk = 0 ;
reg rst_n = 0 ;
reg [15:0] phase_in = 0 ;
reg [ 0:0] phase_vld = 0 ;// correlation Outputsinitial
beginforever #(PERIOD/2) clk=~clk;
endinitial
begin#(PERIOD*2) rst_n = 1;
endcorrelation u_correlation (.clk ( clk ),.rst_n ( rst_n ),.phase_in ( phase_in [15:0] ),.phase_vld ( phase_vld [ 0:0] )
);initial
begin#(PERIOD*3) phase_vld = 1'b1;#(PERIOD*0) phase_in = 16'b1110_0000_0000_0000 ; // -1#PERIOD phase_in = 16'b1110_1000_0000_0000 ; // -0.75#PERIOD phase_in = 16'b1111_0000_0000_0000 ; // -0.5#PERIOD phase_in = 16'b1111_1000_0000_0000 ; // -0.25#PERIOD phase_in = 16'b0000_0000_0000_0000 ; // 0#PERIOD phase_in = 16'b0000_1000_0000_0000 ; // 0.25#PERIOD phase_in = 16'b0001_0000_0000_0000 ; // 0.5#PERIOD phase_in = 16'b0001_1000_0000_0000 ; // 0.75#PERIOD phase_in = 16'b0010_0000_0000_0000 ; // 1#PERIOD phase_vld = 1'b0 ;#(PERIOD*30)$finish;
endendmodule
仿真
设置输入输出格式
输入格式,有符号,13位小数位
输出格式
仿真结果
reference
pg105
都看到这儿了,点个赞呗
||
\/
这篇关于Vivado使用Cordic IP计算e^ix(复e指数函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!