You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog二进制转格雷码转换器仿真输出全为x问题求助

格雷码转换器仿真输出全为x的问题排查与解决

嘿,我来帮你搞定这个问题!你写的二进制转格雷码的组合逻辑模块本身是没问题的,但测试代码里的一个时序细节导致了仿真输出全是xxxx。

问题出在哪?

在Verilog的仿真规则里,用assign实现的组合逻辑,输出更新会发生在当前仿真时间步的末尾。你的测试代码中,刚给bin_num赋值就立刻调用$display打印结果——这时候Gray_num还没来得及根据新的bin_num完成计算,所以输出还是未知态x。

怎么解决?

只需要在给bin_num赋值后,加一个极短的时间延迟(比如#1),让仿真时间往前推一小步,等组合逻辑完成计算并更新Gray_num的取值后,再执行打印操作就行。

修改后的测试代码如下:

module gray_code_tb;
  reg [3:0] bin_num;
  wire [3:0] Gray_num;
  integer i;

  gray_code DUT(.bin_num(bin_num),.Gray_num(Gray_num));

  initial begin
    for(i=0;i<16;i=i+1)begin
      bin_num=i;
      #1; // 加个延迟,等组合逻辑更新输出
      $display("BIN = %b GRAY =%b", bin_num, Gray_num);
    end
  end
endmodule

额外小建议

虽然不是当前问题的原因,但你可以在initial块开头显式初始化bin_num为4'b0,这样仿真一开始的变量状态会更清晰,避免不必要的未知态干扰。

内容的提问来源于stack exchange,提问作者Aleksandra Dimanić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:42:27