我有一个用Chisel编写的复杂模块。我正在使用chiseltest来验证它的操作。测试失败。我希望能够检查模块的内部连接值,以调试哪里出了问题。由于PeekPokeTester只允许我检查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 i = Wire(Bool())
i := io.a ^ io.b
io.d := i | io.c
}import chisel3._
import chisel3.tester._
import org.scalatest.FreeSpec
class MyModuleTest extends FreeSpec with ChiselScalatestTester {
"MyModule should work properly" in {
test(new MyModule) { dut =>
dut.io.a.poke(true.B)
dut.io.b.poke(false.B)
dut.io.c.poke(false.B)
dut.i.expect(true.B) // This line throws a java.util.NoSuchElementException
// : key not found: Bool(Wire in MyModule)
}
}
}如何检查中间值"i"?
发布于 2021-09-29 22:26:02
有几种方法可以做到这一点。
1)通过在测试中添加注释来打开VCD输出,如下所示
import chiseltest.experimental.TestOptionBuilder._
import treadle._
...
test(new MyModule).withAnnotations(Seq(WriteVcdAnnotation)) { dut =>.vcd文件将放在相应的test_run_dir中/您可以使用GtkWave或类似工具查看它
2)在您的模块中添加printf语句。
3)在Treadle Repo中有一个模拟外壳,它允许您基于firrtl文件( firrtl文件应该位于与上面相同的test_run_dir/目录中)查看poke和step。有一个A bit of documentation here
祝好运!
https://stackoverflow.com/questions/69382326
复制相似问题