RegEnable 向量
Vector of RegEnable
正在寻找有关如何将 RegEnable 用作向量的 example/advice。
我还想控制输入和使能信号成为 Vector 中寄存器索引的函数。
所以首先,我如何声明 RegEnable() 的 Vector,其次如何迭代它并连接输入和启用。在 RegEnable() 情况下,声明和连接是在同一语句中进行的。类似于:
for (j <- 0 until len) {
val pipe(j) = RegEnable(in(j),en(j))
}
以上代码无法编译。 & en 中还有向量或位选择
对于这种类型的东西,使用 RegEnable
构造一个 Seq[T <: Data]
然后从中构造一个 Vec
可能要容易得多。 Vec
对象有两个主要的应用方法:可变参数和序列。 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)
}
正在寻找有关如何将 RegEnable 用作向量的 example/advice。 我还想控制输入和使能信号成为 Vector 中寄存器索引的函数。
所以首先,我如何声明 RegEnable() 的 Vector,其次如何迭代它并连接输入和启用。在 RegEnable() 情况下,声明和连接是在同一语句中进行的。类似于:
for (j <- 0 until len) {
val pipe(j) = RegEnable(in(j),en(j))
}
以上代码无法编译。 & en 中还有向量或位选择
对于这种类型的东西,使用 RegEnable
构造一个 Seq[T <: Data]
然后从中构造一个 Vec
可能要容易得多。 Vec
对象有两个主要的应用方法:可变参数和序列。 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)
}