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



我拿了chisel-template,并尝试使用它的基础设施来运行BlackBox的基本示例,包括Chisel虚拟部分和Verilog模块部分,都取自这里和这里。

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

当我尝试从内部sbttest: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

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

谢谢。

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

  • 黑匣子不能是顶部电路,它必须作为常规凿子模块中的实例引用。您得到的错误是因为 TryBlackBox 是一个BlackBox,而不是常规凿子模块的子类。

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

  • 您必须使用验证器后端(或其他基于 verilog 的后端(,而不是解释器。您必须通过设置参数来手动使用验证器进行专门调用,例如

    object TryBlackBoxMain extends App {
    iotesters.Driver.execute(
    Array("--backend-name", "verilator"),
    () => new TryBlackBoxTop
    ) {
    c => new TryBlackBoxUnitTester(c)
    }
    }
    

请注意,在上面的代码中,我创建了一个单独的顶部模块TryBlackBoxTop您可以在其中实例化TryBlackBox

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

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

最新更新