Chisel 中的条件模块实例化
Conditional Module instantiation in Chisel
我正在尝试根据布尔参数实例化两个凿子模块之一。
val useLib = true
val myModule = if(useLib) Module(new MyModule1()) else Module (new MyModule2())
但这不起作用。 Chisel 无法识别 io
接口:
[error] /path/to/source/mysource.scala:59:13: value io is not a member of Any
[error] myModule.io.pdm <> io.pdm
[error] ^
当然,MyModule1()
和 MyModule2()
具有相同的 io 接口。
是否可以像在 C 或 C++ 中使用预处理器那样有条件地实例化 Module()?
我写了一篇关于从 Chisel 3.4 升级到 3.5 的新文档来解决这个问题。它尚未在网站上上线,但一旦 Chisel 3.5.0-RC2 发布就会上线。这是文档的 link:https://gist.github.com/jackkoenig/4949f6a455ae74923bbcce10dbf846b5#value-io-is-not-a-member-of-chisel3module
在某种程度上,从Scala的角度来看,MyModule1
和MyModule2
实际上不是具有相同的接口,尽管它们在结构上是相同的。诀窍是将该接口分解为一个命名的 Bundle
class ,然后在每个模块中使用它。然后让每个 Module
扩展一个具有该接口的 trait
,然后 Scala 就会知道接口是相同的。
有关更多信息和示例,请参阅上面的 linked 文档。
我正在尝试根据布尔参数实例化两个凿子模块之一。
val useLib = true
val myModule = if(useLib) Module(new MyModule1()) else Module (new MyModule2())
但这不起作用。 Chisel 无法识别 io
接口:
[error] /path/to/source/mysource.scala:59:13: value io is not a member of Any
[error] myModule.io.pdm <> io.pdm
[error] ^
当然,MyModule1()
和 MyModule2()
具有相同的 io 接口。
是否可以像在 C 或 C++ 中使用预处理器那样有条件地实例化 Module()?
我写了一篇关于从 Chisel 3.4 升级到 3.5 的新文档来解决这个问题。它尚未在网站上上线,但一旦 Chisel 3.5.0-RC2 发布就会上线。这是文档的 link:https://gist.github.com/jackkoenig/4949f6a455ae74923bbcce10dbf846b5#value-io-is-not-a-member-of-chisel3module
在某种程度上,从Scala的角度来看,MyModule1
和MyModule2
实际上不是具有相同的接口,尽管它们在结构上是相同的。诀窍是将该接口分解为一个命名的 Bundle
class ,然后在每个模块中使用它。然后让每个 Module
扩展一个具有该接口的 trait
,然后 Scala 就会知道接口是相同的。
有关更多信息和示例,请参阅上面的 linked 文档。