3

我正在使用 Chisel 和 blackbox 对 verilog 寄存器文件运行我的 chisel 逻辑。寄存器文件没有复位信号,所以我希望寄存器被随机初始化。

我通过了--x-initial unique验证器,基本上这就是我启动测试的方式:

  private val backendName = "verilator"

  "NOCDMA" should s" do blkwrite and blkread correctly (with $backendName)" in {
    Driver.execute(Array("--fint-write-vcd","--backend-name",s"$backendName",
      "--more-vcs-flags","--trace-depth 1 --x-initial unique"),
      ()=>new DMANetworkWithMem(memAddrWidth,memDataWidth)(nocDataWidth)(nNodesX,nNodesY)){
      c => new DMANetworkRWTest(c)
    }
  }

但是在我写任何东西之前,我从寄存器文件中读取的数据都是零。

我写入后读取的数据是正确的。

那么,凿子里面有什么需要我调整的还是我没有正确地做所有事情?

有什么建议么?

4

1 回答 1

2

我不确定,但我在 Verilator 上发现了以下类似问题:https ://github.com/verilator/verilator/issues/1399 。

通过略读上述问题,我认为您还需要在运行时通过+verilator+seed+<value>+verilator+rand+reset+<value>。我不是 iotesters 方面的专家,但我相信您可以通过 iotesters 参数添加这些运行时值:--more-vcs-c-flags.

--x-assign unique旁注,如果 Verilog 中存在运行时会注入 X 的情况(例如,越界索引),我也会在 Verilator 中设置。

我希望这有帮助!

于 2019-12-27T14:58:00.827 回答