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

Verilog/SystemVerilog测试台中如何查看模块内部reg/wire无需新增端口?

无需修改原模块即可查看Verilog/SystemVerilog内部信号的实用方法

当然有更高效的办法,不用改动原模块的端口就能查看内部reg B和wire Cw的状态,下面是几种常用的方案:

1. 直接用层次化路径访问内部信号

在测试台中,你可以通过实例名.内部信号名的层次化路径直接引用原模块里的信号,不管是reg还是wire都能直接访问,完全不需要修改原模块代码。

修改后的测试台示例:

module SC_TB();
   reg A;
   wire Z;
   
   sample_code SCInst(
      .A(A),
      .Z(Z)
   );
   
   initial begin
      A = 0;
      #10 A = 1;
      #10 A = 0;
      #10 $finish;
   end

   initial begin
      // 直接通过层次路径抓取内部信号
      $monitor("A=%b, Z=%b, B=%b, Cw=%b", A, Z, SCInst.B, SCInst.Cw);
   end
endmodule

这种方法的优势是零侵入原设计,调试起来快,适合临时查看内部信号。

2. 用SystemVerilog的bind特性(推荐)

如果用SystemVerilog,bind语句可以把调试逻辑(比如监控、断言)直接绑定到原模块内部,既不用改原设计,还能保持代码干净。

示例代码:

// 先定义一个用于监控的模块
module sample_code_monitor;
   // 绑定到sample_code的内部信号
   reg B;
   wire Cw;
   
   initial begin
      $monitor("内部信号:B=%b, Cw=%b", B, Cw);
   end
endmodule

// 在测试台中把监控模块绑定到SCInst实例上
bind SCInst sample_code_monitor monitor_inst;

module SC_TB();
   reg A;
   wire Z;
   
   sample_code SCInst(
      .A(A),
      .Z(Z)
   );
   
   initial begin
      A = 0;
      #10 A = 1;
      #10 A = 0;
      #10 $finish;
   end
endmodule

bind的好处是调试代码和设计代码完全分离,不会污染原设计,还能灵活加各种调试逻辑,适合复杂项目的长期调试。

3. 用仿真工具的波形调试功能

主流仿真工具(比如VCS、Modelsim/QuestaSim)都支持直接在波形窗口里添加模块内部信号,不用写任何代码。仿真时加载设计后,展开SCInst实例,找到B和Cw直接加到波形里就能实时看状态。

这种方法最适合看信号的时序关系,可视化调试更直观。

对比你之前的做法

你之前通过加端口的方式虽然能实现,但缺点很明显:

  • 必须修改原设计模块,容易引入错误,还会留下调试用的冗余端口,给后续维护埋坑
  • 每次要查看新信号都得改原模块,效率太低

上面的几种方法都不用碰原设计,调试效率更高,也符合验证的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:43:26