查找有关如何将RegEnable用作向量的示例/建议。 另外,我想控制输入并使信号成为Vector中寄存器索引的函数。
因此,首先,我如何声明RegEnable()的Vector,然后如何在其上进行迭代并连接输入和启用。在RegEnable()情况下,声明和连接在同一条语句中进行。像这样:
for (j <- 0 until len) {
val pipe(j) = RegEnable(in(j),en(j))
}
上面的代码无法编译。在&en中还包括向量或位选择
答案 0 :(得分:3)
对于这种类型的事情,使用RegEnable
来构造Seq[T <: Data]
然后再构造Vec
可能要容易得多。 Vec
对象有两个主要的apply方法:varargs一个和seq。 For your own reference, take a look at the Chisel Vec
object API documentation。
将构建以下完整示例,但相关的部分是val pipe
和val pipe2
行。您可以使用map
或for
/ yield
来做到这一点。
import chisel3._
import chisel3.util.RegEnable
import chisel3.iotesters
import chisel3.experimental.MultiIOModule
class Example(len: Int) extends MultiIOModule {
val in = Seq.fill(len)(IO(Input(UInt(1.W))))
val en = Seq.fill(len)(IO(Input(Bool())))
val mySeq: Seq[Data] = (0 until len).map( j => RegEnable(in(j), en(j)) )
val pipe = Vec(mySeq)
val mySeq2: Seq[Data] = for (j <- 0 until len) yield ( RegEnable(in(j), en(j)) )
val pipe2 = Vec(mySeq2)
}