我想实例化一个一维元素数组,并且元素扩展模块。我该怎么做?如果我说我最好的猜测,那就是:
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] ^
预先感谢您可以提供的任何帮助。
Edit:我添加了我认为生成模块向量的更好方法:
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
}
请注意,此方法允许您以不同的方式单独定制每个单元,并返回 Chisel 模块的 Seq()。它还会生成外观更好的硬件。
但如果您确实需要能够动态索引到模块数组中,您可以像这样提取 IO 的 Vec() :
val exe_units_io = Vec(exe_units.map(_.io))
(这是旧的建议,我认为不太好)。
您可以按如下方式创建模块 Vec:
val vec_of_elements = Vec.fill(n) {Module(new MyElement(my_args)).io }
但请注意,Vec 实际上只能是电线或寄存器,因此我们实际上只是创建了 IO 电线的 Vec,它恰好创建了我们在此过程中关心的模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)