寻找有关如何使用 RegEnable 作为向量的示例/建议。另外,我想控制输入和使能信号成为向量中寄存器索引的函数。
首先,如何声明 RegEnable() 的 Vector,其次如何迭代它并连接输入和启用。在 RegEnable() 情况下,声明和连接是在同一语句中进行的。就像是:
for (j <- 0 until len) {
val pipe(j) = RegEnable(in(j),en(j))
}
Run Code Online (Sandbox Code Playgroud)
上面的代码无法编译。& en 中还有向量或位选择
RegEnable对于这种类型的事情,使用构造 aSeq[T <: Data]然后从中构造 aVec可能要容易得多。该Vec对象有两个主要的 apply 方法:varargs one 和 seq。为了供您自己参考,请查看 ChiselVec对象 API 文档。
下面是完整的示例构建,但相关部分是val pipe和val pipe2行。您可以使用 amap或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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |