#chisel #chiseltest
Вопрос:
У меня есть сложный модуль, написанный на зубиле. Я использую chiseltest, чтобы проверить его работу. Тест провалился. Я хочу иметь возможность проверять внутренние значения проводов модуля, чтобы отладить, что происходит не так. Поскольку PeekPokeTester позволяет мне проверять только значение сигналов ввода-вывода, как я могу проверить внутренние провода?
Вот пример:
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:
Есть несколько способов сделать это.
1 ) Включите вывод VCD, добавив аннотацию к вашему тесту, как в
import chiseltest.experimental.TestOptionBuilder._
import treadle._
...
test(new MyModule).withAnnotations(Seq(WriteVcdAnnotation)) { dut =>
Файл .vcd будет помещен в соответствующий test_run_dir/ вы можете просмотреть его с помощью GtkWave или аналогичного
2 ) добавьте printf
инструкции в свой модуль.
3 ) В репозитории Treadle есть оболочка моделирования, которая позволяет вам заглядывать и выполнять шаги на основе файла firrtl (файл firrtl должен находиться в том же каталоге test_run_dir/, что и выше). Здесь есть немного документации
Удачи!