凿子测试 - 内部信号

标签 chisel test-bench

我想测试我的代码,所以我正在做一个测试平台。我想知道是否可以检查内部信号——比如本例中 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 可以以图形方式查看这些变量;)

最佳答案

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

  1. Chisel 提供的单元测试框架较旧 chisel-testers和更新的chiseltest .不要提供直接查看电线的机制。 目前,凿子团队正在研究这样做的方法。

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

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

关于凿子测试 - 内部信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288073/

相关文章:

scala - 有什么方法可以使用凿子从 verilog 文本内容生成黑盒吗? (在scala中根据文本内容定义val)

VHDL-2008 不断强制外部名称

vhdl - 如何实现 4x1 多路复用器的测试台

使用 SystemVerilog 接口(interface)/结构的 Chisel 输出

c++ - 从 RISC-V 裸机程序调用 printf 系统调用时使用 C++ 模拟器失败

hdl - 如何用iotesters计算凿子的时间?

Chisel:将单独的输入和输出端口映射到 inout 引脚

vhdl - 在 VHDL Testbench 中延迟信号

testing - 在 VHDL 中将未知大小的文件行读取为字符串

verilog - EDAplayground错误: Execution interrupted or reached maximum runtime