我想测试我的代码,所以我正在做一个测试平台。我想知道是否可以检查内部信号——比如本例中 state
寄存器的值——或者查看是否仅适用于 I/O
class MatrixMultiplier(matrixSize : UInt, cellSize : Int) extends Module {
val io = IO(new Bundle {
val writeEnable = Input(Bool())
val bufferSel = Input(Bool())
val writeAddress = Input(UInt(14.W)) //(matrixSize * matrixSize)
val writeData = Input(SInt(cellSize.W))
val readEnable = Input(Bool())
val readAddress = Input(UInt(14.W)) //(matrixSize * matrixSize)
val readReady = Output(Bool())
val readData = Output(SInt((2 * cellSize).W))
})
val s_idle :: s_writeMemA :: s_writeMemB :: s_multiplier :: s_ready :: s_readResult :: Nil = Enum(6)
val state = RegInit(s_idle)
...
对于测试台:
class MatrixUnitTester(matrixMultiplier: MatrixMultiplier) extends PeekPokeTester(matrixMultiplier) { //(5.asUInt(), 32.asSInt())
println("State is: " + peek(matrixMultiplier.state).toString) // is it possible to have access to state ?
poke(matrixMultiplier.io.writeEnable, true.B)
poke(matrixMultiplier.io.bufferSel, false.B)
step(1)
...
编辑:好的,使用 VCD + GTKWave 可以以图形方式查看这些变量;)
最佳答案
好问题。这个答案有几个部分
Chisel 提供的单元测试框架较旧 chisel-testers和更新的chiseltest .不要提供直接查看电线的机制。 目前,凿子团队正在研究这样做的方法。
两者都提供了间接的方法。写入 VCD 输出并使用 printf 查看内部值
Treadle firrtl 模拟器,它可以直接模拟 firrtl(Chisel 编译器的直接输出),允许直接查看和戳任何信号。在 Treadle 的单元测试中有很多关于它如何使用的例子。 Treadle 还提供了一个 REPL shell,可用于通过手动查看和戳记来探索电路
关于凿子测试 - 内部信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288073/