本人需要利用Vivado软件中的DDS核生成一个正弦信号。由于后期还要生成线性调频信号,如果直接编写代码生成比特流文件下载到板子上进行验证会使工作的效率大大下降,所有想利用Vivado软件功能仿真,这样可以极大的提高效率。Vivado软件自带仿真功能,不需要对IP核进行特别的处理,所以很方便。
DDS核的基本原理,看以下一个链接:https://www.xilinx.com/support/documentation/ip_documentation/dds_compiler/v6_0/pg141-dds-compiler.pdf
此处对DDS核的配置如下:DDS核命名DDS_Signal
注意:上图中红色标记是更改的配置的参数,其他都默认设置。
生成DDS核后,自己利用Verilog写了一个很简单的测试平台,频率控制字配置好。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2017/10/14 14:43:25
// Design Name:
// Module Name: Signal_DDS_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module Signal_DDS_tb(
);
parameter PERIOD=10;
reg CLK=0;
always begin
#(PERIOD/2) CLK=~CLK;
end
reg s_axis_phase_tvalid = 1'd1;
reg [31:0] s_axis_phase_tdata = 32'd42949673;//此处是频率控制字,生成1M的正余弦信号
wire m_axis_data_tvalid;
wire [31:0] m_axis_data_tdata;
DDS_Signal DDS_Signal_inst (
.aclk (CLK ), // input wire aclk
.s_axis_phase_tvalid (s_axis_phase_tvalid), // input wire s_axis_phase_tvalid
.s_axis_phase_tdata (s_axis_phase_tdata ), // input wire [31 : 0] s_axis_phase_tdata
.m_axis_data_tvalid (m_axis_data_tvalid ), // output wire m_axis_data_tvalid
.m_axis_data_tdata (m_axis_data_tdata ) // output wire [31 : 0] m_axis_data_tdata
);
endmodule
至此,认为任务完成,进行仿真。
仿真结果如下:
输出的结果m_axis_data_tdata[31:0]的没有数据。
开始查找原因,抓取DDS核的输入是否正确即s_axis_phase_tva