使用Xilinx的DDS IPcore的时候发现一个问题,使用ModelSim仿真发现DDS的输出始终为未知态,很是奇怪,因为所使用的工程ML505的开发板上是完全可以正常工作的,这让我很是奇怪。
DDS模块的接口如下所示:
module DDS(
DATA, //控制字 该端口为复用端口 可输如频率和相位控制字
WE, //写使能
A, //低4位通道选择,最高位的1表示写相位控制字,0则是频率控制字
CLK, //时钟
RFD,
RDY,
SINE, //正弦输出
COSINE
); // synthesis black_box
input [27 : 0] DATA;
input WE;
input [4 : 0] A;
input CLK;
output RFD;
output RDY;
output [9 : 0] SINE;
output [9 : 0] COSINE;
为何会出现这种情况呢?单独对DDS模块进行仿真,没有任何问题,但是一旦加上了前级的一个module输出就成为未知态了,于是将DDS的DATA和WE写了一个固定的值,这样一来。实际上DDS是不受前级控制的,这时候仿真就好了。说明问题出在前级,但是通过观察前级的输出信号,发现是完全满足要求的。前级使用了同步清零的方式,问题就出在这了,同步清理导致在第一个时钟到来的时候,DDS写使能没有被清零,这就导致了仿真的错位。
也就是说在ModelSim中仿真DDS的IPcore的时候,DDS的写使能必须先清零,仿真才能进行。
文章评论(0条评论)
登录后参与讨论