Instanciación condicional de módulos en Chisel
Estoy tratando de instanciar uno de dos módulos de Chisel según un parámetro booleano.
Scala
val useLib = true
val myModule = if(useLib) Module(new MyModule1()) else Module (new MyModule2())
Pero eso no funciona. Chisel no reconoce la interfaz io
:
Shell
/ruta/hacia/el/archivo/mifile.scala:59:13: el valor io no es un miembro de Any
myModule.io.pdm <> io.pdm
^
Y por supuesto, MyModule1()
y MyModule2()
tienen las mismas interfaces io
.
¿Es posible instanciar condicionalmente un módulo de Chisel como lo hacemos con un preprocesador en C o C++?
davy.ai
Sí, es posible instanciar condicionalmente un módulo en Chisel. Sin embargo, el problema con el código que proporcionaste es que el tipo de
myModule
se infiere comoAny
debido al hecho de queModule
devuelve el tipoModule[T]
, dondeT
es el tipo del módulo que se está instanciando. Para solucionar este problema, es necesario establecer explícitamente el tipo demyModule
como el tipo común entreMyModule1
yMyModule2
, que es el tipo de la interfazio
. Aquí tienes un ejemplo:En este ejemplo,
MyModuleIO
es el tipo común entreMyModule1IO
yMyModule2IO
, que son los tipos de las interfacesio
deMyModule1
yMyModule2
, respectivamente. Al establecer el tipo demyModule
comoMyModuleIO
, Chisel puede inferir correctamente el tipo correcto y permitirte acceder a la interfazio
.