首页 > 解决方案 > RegEnable 的向量

问题描述

寻找有关如何使用 RegEnable 作为向量的示例/建议。我还想控制输入和使能信号成为向量中寄存器索引的函数。

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

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

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

标签: chisel

解决方案


RegEnable对于这种类型的东西,使用它来构造 aSeq[T <: Data]并从中构造 a可能要容易得多Vec。该Vec对象有两个主要的应用方法:一个 varargs one 和一个 seq。为了您自己的参考,请查看 ChiselVec对象 API 文档

以下完整示例构建,但相关部分是val pipeandval pipe2行。您可以使用 amapfor/来执行此操作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)
}

推荐阅读