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
相关产品推荐
相关产品推荐

