RegEnable的向量

时间:2018-11-01 05:53:20

标签: chisel

查找有关如何将RegEnable用作向量的示例/建议。 另外,我想控制输入并使信号成为Vector中寄存器索引的函数。

因此,首先,我如何声明RegEnable()的Vector,然后如何在其上进行迭代并连接输入和启用。在RegEnable()情况下,声明和连接在同一条语句中进行。像这样:

for (j <- 0 until len) {
    val pipe(j) = RegEnable(in(j),en(j))    
} 

上面的代码无法编译。在&en中还包括向量或位选择

1 个答案:

答案 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 pipeval pipe2行。您可以使用mapfor / 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)
}