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

Chisel调试:如何在chiseltest中查看模块内部wire信号值

Chisel测试中查看模块内部信号的解决方法

方法1:临时导出内部信号到IO端口(兼容性最好,无版本依赖)

直接修改模块代码,新增调试用输出端口挂载需要查看的内部信号,调试完成后删除对应端口即可:

import chisel3._

class MyModule extends Module {
  val io = IO(new Bundle {
    val a = Input(Bool())
    val b = Input(Bool())
    val c = Input(Bool())
    val d = Output(Bool())
    val debug_i = Output(Bool()) // 新增调试端口
  })

  val i = Wire(Bool())
  i := io.a ^ io.b
  io.debug_i := i // 把内部信号接到调试端口
  io.d := i | io.c
}

测试代码中直接访问调试端口即可:

dut.io.debug_i.expect(true.B)

方法2:给内部信号加@public注解(无需修改IO结构)

Chisel 3.4及以上版本支持@public注解,标记后的内部信号会直接暴露给测试框架,不需要修改IO定义:

import chisel3._
import chisel3.experimental.public // 导入注解

class MyModule extends Module {
  val io = IO(new Bundle {
    val a = Input(Bool())
    val b = Input(Bool())
    val c = Input(Bool())
    val d = Output(Bool())
  })

  @public val i = Wire(Bool()) // 给需要查看的信号加注解
  i := io.a ^ io.b
  io.d := i | io.c
}

添加注解后,你原测试代码中dut.i.expect(true.B)的写法就可以正常运行。

方法3:导出VCD波形查看所有内部信号(无需修改模块源码)

如果不想修改任何模块代码,可以在测试时添加VCD导出注解,运行测试后生成的波形文件包含所有内部信号的取值变化,可用GTKWave等工具打开查看:

import chisel3._
import chisel3.tester._
import org.scalatest.FreeSpec

class MyModuleTest extends FreeSpec with ChiselScalatestTester {
  "MyModule should work properly" in {
    // 添加WriteVcdAnnotation注解开启波形导出
    test(new MyModule).withAnnotations(Seq(WriteVcdAnnotation)) { dut =>
      dut.io.a.poke(true.B)
      dut.io.b.poke(false.B)
      dut.io.c.poke(false.B)
      dut.io.d.expect(true.B)
    }
  }
}

生成的VCD波形文件默认保存在test_run_dir/[对应测试用例目录]路径下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:48:02