在 Chisel 中调试模块内部
Debugging module internals in Chisel
我有一个用 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”?
有几种方法可以做到这一点。
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 that allows you to peek poke and step based on a firrtl file (the firrtl file should be in the same test_run_dir/ directory as above). There is A bit of documentation here
中有模拟shell
祝你好运!
我有一个用 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”?
有几种方法可以做到这一点。
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 that allows you to peek poke and step based on a firrtl file (the firrtl file should be in the same test_run_dir/ directory as above). There is A bit of documentation here
中有模拟shell祝你好运!