Vivado DDS IP核使用和仿真(二、多通道信号发生器)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u013215852/article/details/91044141

按照博文https://blog.csdn.net/u013215852/article/details/91042672了解完单通道信号发生器之后,我们来看一下如果用一个IP核同时生成多通道信号怎么做,本文以1MHz和10MHz双通道为例:

1、设置参数,注意与单通道不同的地方

通道设置为2,那么我们想要得到与单通道一样16bit的输出数据,那么根据公式

我们就需要把Frequency Resolution重新设置

Frequency Resolution = 120000000/2^16 /2= 1831.0546875/2 = 915.52734375

2、剩余的参数设置与单通道类似

同时输出sin和cos

增加10MHz的通道

最终参数如下:

3、接下来就是仿真了,还是使用vivado自带仿真工具

这个地方需要格外注意,一开始有疑惑,为什么通道变成了2,数据宽度和接口都没有增加,原来是因为这双通道的数据是分时输出的,即交替输出。知道了这一点,写testbench就很容易了,代码如下

assign sin[15:0] = o_data_tvalid ? o_data_tdata[31:16]:16'b0;
assign cos[15:0] = o_data_tvalid ? o_data_tdata[15:0] :16'b0;

reg [15:0] sin_c0;
reg [15:0] sin_c1;
reg [15:0] cos_c0;
reg [15:0] cos_c1;

reg m_axis_data_channel = 1'b0;

always @(posedge aclk)
begin
    m_axis_data_channel <= ~m_axis_data_channel;
    if(m_axis_data_channel == 1'b0)
    begin
        sin_c0 <= sin;
        cos_c0 <= cos;
    end
    else
    begin
        sin_c1 <= sin;
        cos_c1 <= cos;
    end
end

endmodule

4、仿真结果

猜你喜欢

转载自blog.csdn.net/u013215852/article/details/91044141
dds