使用 Chisel3 BlackBox 时的类型不匹配错误

The type mismatch error while using Chisel3 BlackBox

我使用 chisel-template 并尝试使用它的基础结构来 运行 BlackBox 的基本示例,包括取自 here and here 的 Chisel 虚拟部分和 Verilog 模块部分。

我已经复制了现有的 folder/file 结构并进入这些文件并将 GCDgcd 替换为 TryBlackBoxtryblackbox。我还添加了行:import chisel3.util.HasBlackBoxResource。最后,我将 TryBlackBox.v 文件定位到 src/main/resources/tryblackbox/ 路径中。

当我在 sbt 中尝试 test:runMain tryblackbox.TryBlackBoxMain 时,我得到 16 个错误,所有错误都在抱怨类型不匹配,例如:

[error] /home/apaj/TryBlackBox/src/test/scala/tryblackbox/TryBlackBoxUnitTest.scala:79:60: type mismatch;
[error]  found   : () => tryblackbox.TryBlackBox
[error]  required: () => T
[error]     iotesters.Driver.execute(Array("--fint-write-vcd"), () => new TryBlackBox) {

我已将我的项目上传到此存储库:

https://github.com/apaj/TryBlackBox.git

我将不胜感激任何可能的故障排除帮助...

谢谢。

你走在正确的轨道上,但现在有几件事困扰着你。

  • 黑盒不能是top电路,它必须在常规chisel模块中作为实例引用。您收到的错误是因为 TryBlackBox 是 BlackBox 而不是常规凿子模块的子 class。

  • 消除 object TryBlackBoxRepl repl 是 firrtl 解释器的一部分,虽然它确实具有自己的黑盒功能,但它需要黑盒的 Scala 实现而不是 verilog .我建议稍后再做。 dsptools、firrtl-interpreter 和 treadle 中都有 Scala 黑盒的例子,等你准备好了

  • 您必须使用 verilator 后端(或其他基于 verilog 的后端),而不是解释器。您必须通过设置像

    这样的参数来手动调用 using verilator
    object TryBlackBoxMain extends App {
      iotesters.Driver.execute(
        Array("--backend-name", "verilator"),
        () => new TryBlackBoxTop
      ) {
        c => new TryBlackBoxUnitTester(c)
      }
    }
    

Note, in the code above I created a separate top module TryBlackBoxTop which is where you would instantiate TryBlackBox

  • 由于您使用的是 setResource("/tryblackbox/tryMe.v"),您资源的文件名应该是 resource/tryblackbox/tryMe.v。对其中的一些重命名也可能是个好主意,在太多地方使用 TryBlackBox 可能会给你带来麻烦。

为了有效地结束这个故事,我提供了有关如何获取 BlackBox 运行 和避免类型不匹配错误的详细说明 here