如何做模块向量?
How to do a vector of modules?
我想实例化一个元素的一维数组,元素扩展模块。我该怎么做?如果我说我最好的猜测,那就是:
val elements = Vec( 64, new element )
我收到以下错误消息:
[error] /Users/mykland/work/chisel/array.scala:20: overloaded method value apply with alternatives:
[error] [T <: Chisel.Data](n: Int, gen: => T)Chisel.Vec[T] <and>
[error] [T <: Chisel.Data](elt0: T, elts: T*)Chisel.Vec[T] <and>
[error] [T <: Chisel.Data](gen: => T, n: Int)Chisel.Vec[T]
[error] cannot be applied to (Int, ascenium.element)
[error] val elements = Vec( 64, new element )
[error] ^
在此先感谢您提供的任何帮助。
编辑: 我正在添加我认为生成模块向量的更好方法:
val my_args = Seq(1,2,3,4)
val exe_units = for (i <- 0 until num_units) yield
{
val exe_unit = Module(new AluExeUnit(args = my_args(i)))
// any wiring or other logic can go here
exe_unit
}
请注意,此方法允许您以不同方式单独定制每个单元,并且 returnsChisel 模块的 Seq()。它也会生成更好看的硬件。
但是如果你真的需要能够动态地索引到你的模块数组中,你可以像这样提取 IOs 的 Vec() :
val exe_units_io = Vec(exe_units.map(_.io))
(这是老建议,我觉得不太好)
您可以创建一个 Modules 的 Vec,如下所示:
val vec_of_elements = Vec.fill(n) {Module(new MyElement(my_args)).io }
但是请注意,Vec 实际上只能是 Wires 或 Registers,所以我们实际上只是创建了一个 IO Wire 的 Vec,它恰好创建了我们在此过程中关心的模块。
我想实例化一个元素的一维数组,元素扩展模块。我该怎么做?如果我说我最好的猜测,那就是:
val elements = Vec( 64, new element )
我收到以下错误消息:
[error] /Users/mykland/work/chisel/array.scala:20: overloaded method value apply with alternatives:
[error] [T <: Chisel.Data](n: Int, gen: => T)Chisel.Vec[T] <and>
[error] [T <: Chisel.Data](elt0: T, elts: T*)Chisel.Vec[T] <and>
[error] [T <: Chisel.Data](gen: => T, n: Int)Chisel.Vec[T]
[error] cannot be applied to (Int, ascenium.element)
[error] val elements = Vec( 64, new element )
[error] ^
在此先感谢您提供的任何帮助。
编辑: 我正在添加我认为生成模块向量的更好方法:
val my_args = Seq(1,2,3,4)
val exe_units = for (i <- 0 until num_units) yield
{
val exe_unit = Module(new AluExeUnit(args = my_args(i)))
// any wiring or other logic can go here
exe_unit
}
请注意,此方法允许您以不同方式单独定制每个单元,并且 returnsChisel 模块的 Seq()。它也会生成更好看的硬件。
但是如果你真的需要能够动态地索引到你的模块数组中,你可以像这样提取 IOs 的 Vec() :
val exe_units_io = Vec(exe_units.map(_.io))
(这是老建议,我觉得不太好)
您可以创建一个 Modules 的 Vec,如下所示:
val vec_of_elements = Vec.fill(n) {Module(new MyElement(my_args)).io }
但是请注意,Vec 实际上只能是 Wires 或 Registers,所以我们实际上只是创建了一个 IO Wire 的 Vec,它恰好创建了我们在此过程中关心的模块。