使用 ChiselTest 框架生成波形

Generating waveforms with ChiselTest framework

我有一个 ChiselTest 测试器,编写如下:

class EccTester extends FlatSpec with ChiselScalatestTester with Matchers {
    behavior of "Testers2"
  it should "send data without errors" in {
    test(new EccPair(width=8)) {
      c => {
        val rnd = new Random()
        for (i <- 0 to 20) {
          val testVal = rnd.nextInt(1 << c.getWidthParam)

          c.io.dataIn.poke(testVal.U)
          c.io.errorLocation.poke(0.U)
          c.io.injectError.poke(false.B)
          c.io.injectSecondError.poke(false.B)
          c.clock.step(1)
          c.io.dataOut.expect(testVal.U)
          c.io.outputNotEqual.expect(false.B)
        }
      }
    }
  }
}

我能够 运行 shell 中的测试

仅测试chisel.lib.ecc.EccTester

但是当我尝试根据 ChiselTest 文档生成波形时,

testOnly chisel.lib.ecc.EccTester -- -DvwriteVcd=1

测试执行正常但没有转储波形。

我参考的文档是 https://github.com/ucb-bar/chisel-testers2, and the full source code is at https://github.com/hutch31/ip-contributions/blob/ecc/src/test/scala/chisel/lib/ecc/EccTester.scala

我认为目前还没有正式的答案,但这就是我所做的。首先我添加以下两个导入。

import chiseltest.experimental.TestOptionBuilder._
import chiseltest.internal.WriteVcdAnnotation

然后像这样将注释添加到测试中

  it should "send data without errors" in {
    test(new EccPair(width=8)).withAnnotations(Seq(WriteVcdAnnotation)) {
      c => {

注意:WriteVcdAnnotation有两种定义,一种在treadle包中 另一个在包 chiseltest.internal 中。使用后者,因为它会起作用 对于踏板和验证器后端。