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

时间:2018-10-18 18:15:54

标签: riscv chisel

我拿了chisel-template并尝试使用其基础结构来运行BlackBox的基本示例,Chisel虚拟部分和Verilog模块部分均取自herehere

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

当我从test:runMain tryblackbox.TryBlackBoxMain内尝试sbt时,我遇到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

在排除故障方面可能会提供帮助...

谢谢。

2 个答案:

答案 0 :(得分:3)

您处在正确的轨道上,但现在有几件事困扰您。

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

  • 取消object TryBlackBoxRepl表示,REPL是firrtl解释器的一部分,尽管它确实具有黑盒功能,但它需要Scala实现黑盒而不是verilog。我建议稍后再讲。准备好后,dsptools,firrtl-解释器和踏板中会出现Scala黑匣子的示例。

  • 您必须使用验证程序后端(或其他基于verilog的后端),而不是解释程序。您必须通过设置args之类的

    来专门手动调用verilator
    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的地方过多可能会给您带来麻烦。

答案 1 :(得分:0)

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