【问题描述】
在使用xilinx的FIFO时,创建了一个工作在FWFT模式下的由块RAM搭建的独立时钟FIFO。在对其仿真时,wr_rst_busy信号出现了未知态的情况。这种情况实际上是因为Vivado仿真器为了能够兼容更多的设计,默认仿真语言是mixed导致的。这里wr_rst_busy信号虽然显示的是未知态,但却不影响它实际应当是什么值,因此放任不管即可。
以wr_en信号为例,在激励中,wr_en需要在等待wr_rst_busy下降沿之后才能拉高
[] 纯文本查看 复制代码 initial begin
Reset = 1'b1;
wr_en = 1'b0;
rd_en = 1'b0;
din = 8'hff;
#(20*3+1);
Reset = 1'b0;
@(negedge wr_rst_busy);
//write data
while(full == 1'b0)
begin
@(posedge wr_clk);
#1;
wr_en = 1'b1;
din = din + 1'b1;
end
........
但从图中波形可以看到,仿真器在wr_rst_busy未知态时检测到其下降沿,随后拉高了wr_en。这也说明了wr_rst_busy信号只是显示未知态,实际被使用时,仍是正确的值。
【解决办法】
如果实在想要让波形能够正确显示,可以将仿真器语言修改为verilog后再重新仿真,但是这种方式会导致仿真器的兼容性变差,尤其在仿真一些包含verilog和VHDL代码的设计或IP核时,很容易导致仿真结果与实际结果相差甚远。因此,不建议修改。
仿真语言修改
重新仿真后的结果
|