【问题标题】:Chisel test - internal signals凿子测试 - 内部信号
【发布时间】:2019-12-11 14:32:25
【问题描述】:

我想测试我的代码,所以我正在做一个测试台。我想知道是否可以检查内部信号(例如本示例中的 state 寄存器的值),或者 peek 是否仅适用于 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 test-bench


【解决方案1】:

好问题。这个答案有几个部分

  1. Chisel 提供了较旧的chisel-testers 和较新的chiseltest 的单元测试框架。不要提供直接查看电线的机制。 目前,chisel 团队正在研究如何做到这一点。

  2. 两者都提供了间接的方法。写入 VCD 输出并使用 printf 查看内部值

  3. Treadle firrtl 模拟器可以直接模拟 firrtl(Chisel 编译器的直接输出),它允许窥视和直接戳任何信号。在 Treadle 的单元测试中如何使用它有很多例子。 Treadle 还提供了一个 REPL 外壳,可用于通过手动窥视和戳来探索电路

【讨论】:

  • 所以根据你的第二点,我应该可以看到我的state寄存器的内容。我不知道如何写 VCD 输出,你知道我在哪里可以获得一些额外的信息吗?因为我当前的println(测试文件的第二行)正在生成错误:/
  • 查看github.com/freechipsproject/chisel-testers/wiki/… 了解有关 VCD 的信息。我不确定println,但可能是您打算使用printfprintfs 在模拟期间显示其信息。 println仅在测试的细化或编译阶段显示
  • 是的,即使使用printf 我也得到了java.util.NoSuchElementException: key not found: UInt<3>,当我尝试显示任何非 I/O 信号时也是如此。所以如果我理解的话,如果我编辑我的测试以生成链接中所示的 VCD 文件,我应该会看到我的printf 的结果,对吧?
  • printf 和 vcd 应该完全独立。您能否发布发生此错误的行,这听起来像是其他问题
  • 没关系,感谢 VCD + GTKWave,我可以直观地访问我所有的寄存器,我现在用它来调试;)谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2019-06-11
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
相关资源
最近更新 更多