首页 > 解决方案 > 在凿子中动态创建模块,同时将动态参数传递给这些模块

问题描述

考虑这个例子

for(x <- 0 until numberOfHWBlocks){
    val hw_block = Module(new HW_BLOCK(x)(p :Parameters)).io
}

每次这都会根据 x 是什么创建一个新模块。我想要的是我不想每次都将 val hw_block 声明为 for 循环内的单独实体,因为该值会覆盖先前的值。我想要将这些模块的序列存储在单个 val 中。像这样的东西

for( x <- 0 until numberOfHWBlocks){
    hw_block(x) = Module(new HW_BLOCK(x)(p :Parameters)).io
}

其中 hw_block 被定义为 for 循环外的 Seq

val hw_block = Seq.fill(numberOfHWBlocks){//What do I have to instantiate here??//}

标签: scalachisel

解决方案


你考虑过制表吗

val hw_block = Seq.tablulate(numberOfHardHWBlocks) { x =>
  Module(new HW_BLOCK(x)(p :Parameters)).io
}

tabulate类似于文件,但使您能够区分正在实例化的元素

注意:我认为您创建模块的语法略有错误。我认为应该是Module(new HW_BLOCK(...)).io,这会创建模块然后返回 io 包以在 HW_Block 中参考


推荐阅读