es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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++?

Tags:  ,

Answer

  1. Avatar for 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 como Any debido al hecho de que Module devuelve el tipo Module[T], donde T es el tipo del módulo que se está instanciando. Para solucionar este problema, es necesario establecer explícitamente el tipo de myModule como el tipo común entre MyModule1 y MyModule2, que es el tipo de la interfaz io. Aquí tienes un ejemplo:

    class MyTopModule extends Module {
      val io = IO(new Bundle {
        val pdm = Input(Bool())
      })
    
      val useLib = true
    
      val myModule: MyModuleIO = if(useLib) Module(new MyModule1()) else Module(new MyModule2())
    
      myModule.io.pdm := io.pdm
    }
    

    En este ejemplo, MyModuleIO es el tipo común entre MyModule1IO y MyModule2IO, que son los tipos de las interfaces io de MyModule1 y MyModule2, respectivamente. Al establecer el tipo de myModule como MyModuleIO, Chisel puede inferir correctamente el tipo correcto y permitirte acceder a la interfaz io.

Comments are closed.