首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Chisel中调试模块内部

在Chisel中调试模块内部
EN

Stack Overflow用户
提问于 2021-09-29 19:24:17
回答 1查看 44关注 0票数 1

我有一个用Chisel编写的复杂模块。我正在使用chiseltest来验证它的操作。测试失败。我希望能够检查模块的内部连接值,以调试哪里出了问题。由于PeekPokeTester只允许我检查io信号的值,我如何检查内部导线?

下面是一个示例:

代码语言:javascript
复制
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
}
代码语言:javascript
复制
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"?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-29 22:26:02

有几种方法可以做到这一点。

1)通过在测试中添加注释来打开VCD输出,如下所示

代码语言:javascript
复制
import chiseltest.experimental.TestOptionBuilder._
import treadle._
...
test(new MyModule).withAnnotations(Seq(WriteVcdAnnotation)) { dut =>

.vcd文件将放在相应的test_run_dir中/您可以使用GtkWave或类似工具查看它

2)在您的模块中添加printf语句。

3)在Treadle Repo中有一个模拟外壳,它允许您基于firrtl文件( firrtl文件应该位于与上面相同的test_run_dir/目录中)查看poke和step。有一个A bit of documentation here

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69382326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档