我拿了chisel-template
,并尝试使用它的基础设施来运行BlackBox的基本示例,包括Chisel虚拟部分和Verilog模块部分,都取自这里和这里。
我已经复制了现有的文件夹/文件结构并进入这些文件,并通过TryBlackBox
和tryblackbox
替换了GCD
和gcd
。我还添加了行: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
我将不胜感激任何可能的故障排除帮助...
谢谢。
你走在正确的轨道上,但现在有几件事在咬你。
-
黑匣子不能是顶部电路,它必须作为常规凿子模块中的实例引用。您得到的错误是因为 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并避免类型不匹配错误的详细说明。