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

Verilog Testbench中port_match_tb信号为X未同步更新问题求助

问题定位与修复方案

核心错误根源

你遇到的X态问题是Testbench中存在多驱动冲突,错误出在port_match_tb的声明代码:

// 错误写法
wire [31:0]  port_match_tb = 0;

Verilog中给wire类型变量直接赋值等价于添加了一个连续赋值语句,将该信号永久绑定到固定值0;同时这个wire信号又连接到了待测模块test_module_i的port_match输出端口,相当于同一个信号有两个互不关联的驱动源:

  • 驱动源1:待测模块内部逻辑输出的port_match动态值
  • 驱动源2:固定电平0
    两个驱动源输出值不一致时,仿真器就会判定该信号为不定态X,这就是你看到的不同步现象。

修复方法

直接删除wire声明后的初始赋值即可,修改后的代码为:

// 正确写法
wire [31:0]  port_match_tb;

wire类型信号本身不需要手动赋初始值,它的取值完全由所连接的驱动源决定,修改后待测模块的输出会直接驱动port_match_tb,仿真时就能和模块内部的port_match信号同步更新。

可选优化建议

你待测模块的always块存在逻辑重叠隐患:如果某一拍同时满足rx_vld_net && rx_sof_net和rx_vld_net && rx_eof_net(也就是单拍报文的场景,SOF和EOF同时拉高),两个对port_match的非阻塞赋值会同时触发,虽然Verilog语法规定同一过程块中后写的赋值会覆盖前写的,但为了逻辑可读性更好,建议修改为互斥的条件分支:

always @(posedge clk_net) begin
    if(rx_vld_net) begin
        if(rx_sof_net || rx_eof_net) begin
            port_match <= 0;
        end else begin
            port_match <= port_match + 1;
        end
    end
    // 其余场景保持原值,无需额外处理
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:36:04