本文主要是介绍Vivado DDS IP核使用和仿真(二、多通道信号发生器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
按照博文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、仿真结果
这篇关于Vivado DDS IP核使用和仿真(二、多通道信号发生器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!