我拿了chisel-template
并尝试使用其基础结构来运行BlackBox的基本示例,Chisel虚拟部分和Verilog模块部分均取自here和here。
我已经复制了现有的文件夹/文件结构,并进入了这些文件,并用GCD
和gcd
替换了TryBlackBox
和tryblackbox
。我还添加了以下行: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
在排除故障方面可能会提供帮助...
谢谢。
答案 0 :(得分:3)
您处在正确的轨道上,但现在有几件事困扰您。
黑匣子不能成为 top 电路,必须在常规凿子模块中将其作为实例引用。您收到的错误是因为TryBlackBox是BlackBox
而不是常规凿子模块的子类。
取消object TryBlackBoxRepl
表示,REPL是firrtl解释器的一部分,尽管它确实具有黑盒功能,但它需要Scala实现黑盒而不是verilog。我建议稍后再讲。准备好后,dsptools,firrtl-解释器和踏板中会出现Scala黑匣子的示例。
您必须使用验证程序后端(或其他基于verilog的后端),而不是解释程序。您必须通过设置args之类的
来专门手动调用verilatorobject 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类型不匹配错误的详细说明。