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

Verilog曼彻斯特编码器仿真:clk与data_out呈红色无响应问题排查

解决Verilog曼彻斯特编码器仿真中clk与data_out信号红色异常的问题

问题根源分析

你遇到的clk和data_out显示红色(未知态x)的核心原因有两个:

  1. 测试平台中clk未初始化:Verilog里reg类型变量默认初始值为未知态x,你的时钟生成逻辑always #10 clk = ~clk一开始是对x取反,结果还是x,导致clk始终处于未知状态,无法触发设计里的时钟沿逻辑。
  2. 设计中prev_data类型选择不当:用integer(32位)存储单比特的前序数据虽然语法合法,但不符合Verilog设计习惯,可能引发仿真工具的潜在识别问题,换成单比特reg更严谨。

具体修复步骤

1. 初始化测试平台的clk信号

在测试平台的initial块开头添加clk的初始赋值,让时钟从确定的电平开始翻转:

initial begin
  clk = 0;  // 新增:初始化clk为0
  reset = 1;
  data_in = 0;
  #20 reset = 0;
  #10 data_in = 1;
  #10 data_in = 0;
  #10 data_in = 1;
  #10 data_in = 0;
  #10 $finish;
end

2. 优化设计中的prev_data类型

将设计里的integer prev_data;替换为单比特reg类型,避免不必要的位宽冗余:

reg prev_data;  // 替换原integer类型

修改后的完整代码

修复后的设计代码

module manchester_encoder(clk,reset,data_in,data_out);
input clk;
input reset;
input data_in;
output data_out;
reg prev_data;  // 改为reg类型
  assign data_out = data_in ^ prev_data;
  always @(posedge clk) begin
    if (reset) begin
      prev_data <= 0;
    end else begin
      prev_data <= data_in;
    end
  end
  
endmodule

修复后的测试平台代码

module testbench_manchester_encoder();
// Declare the signals
  reg clk;
  reg reset;
  reg data_in;
  wire data_out;
  
  // Instantiate the DUT
  manchester_encoder encoder(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out));
  
  // Generate the clock signal
  always #10 clk = ~clk;
  
  // Stimulus process
  initial begin
    clk = 0;  // 初始化clk
    reset = 1;
    data_in = 0;
    #20 reset = 0;
    #10 data_in = 1;
    #10 data_in = 0;
    #10 data_in = 1;
    #10 data_in = 0;
    #10 $finish;
  end
  
  // Monitor process
  always @(posedge clk) begin
    $display("Time=%t, data_out=%b", $time, data_out);
  end
endmodule

修复后的效果

重新仿真后,clk会从0开始正常翻转(每20ns一个周期),prev_data会在时钟沿正确更新,data_out也会基于data_in ^ prev_data生成合法的曼彻斯特编码信号,不再显示红色未知态。

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:40:27