使用 Chisel3 BlackBox 时的类型不匹配错误
The type mismatch error while using Chisel3 BlackBox
我使用 chisel-template
并尝试使用它的基础结构来 运行 BlackBox 的基本示例,包括取自 here and here 的 Chisel 虚拟部分和 Verilog 模块部分。
我已经复制了现有的 folder/file 结构并进入这些文件并将 GCD
和 gcd
替换为 TryBlackBox
和 tryblackbox
。我还添加了行: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。
我使用 chisel-template
并尝试使用它的基础结构来 运行 BlackBox 的基本示例,包括取自 here and here 的 Chisel 虚拟部分和 Verilog 模块部分。
我已经复制了现有的 folder/file 结构并进入这些文件并将 GCD
和 gcd
替换为 TryBlackBox
和 tryblackbox
。我还添加了行: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 verilatorobject 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 instantiateTryBlackBox
- 由于您使用的是
setResource("/tryblackbox/tryMe.v")
,您资源的文件名应该是resource/tryblackbox/tryMe.v
。对其中的一些重命名也可能是个好主意,在太多地方使用 TryBlackBox 可能会给你带来麻烦。
为了有效地结束这个故事,我提供了有关如何获取 BlackBox 运行 和避免类型不匹配错误的详细说明 here。