【问题标题】:How to create a array/vec of Chisel modules如何创建 Chisel 模块的数组/vec
【发布时间】:2020-07-09 07:46:27
【问题描述】:

我创建了一个名为 SaturatingCounter 的 CHISEL 类(扩展)模块(下面的代码以防相关)。

我想要另一个模块中这些计数器的数组/序列。

编辑:我找到了this answer。但是当我尝试

 val vec_of_elements = Vec.fill(10) {Module(SaturatingCounter(4)).io}

我收到一个错误

Error:(72, 29) value fill is not a member of object chisel3.Vec
  val vec_of_elements = Vec.fill(10) {Module(SaturatingCounter(4)).io}

原始问题的其余部分

所以我尝试创建一个 Vec,如下所示。这不起作用,因为我的类不是数据类型。我可以让它继承 Data 但因为我仍然是一个初学者,这看起来像是一个很大的飞跃。

var foo = Vec(10,SaturatingCounter(4))

错误信息:

Error:(46, 23) inferred type arguments [something.SaturatingCounter] do not conform to method apply's type parameter bounds [T <: chisel3.Data]
  var foo = Vec(10,SaturatingCounter(4))

Error:(46, 47) type mismatch;
 found   : something.SaturatingCounter
 required: T
  var foo = Vec(10,SaturatingCounter(4))

创建 SaturatingCounter 的数组/序列的正确解决方案吗?

饱和计数器

class SaturatingCounter (bits: Int) extends Module {
  require(bits >= 2)
  val io = IO(new Bundle {
    val valOut: SInt = Output(SInt(bits.W))
    val inc: SInt = Input(SInt(bits.W))
  })

  val count = RegInit(SInt(bits.W), 0.S)

  val minVal: SInt = ((1 << (bits-1)).asUInt())(bits-1,0).asSInt()
  val maxVal: SInt = (((1 << bits) - 1) >> 1).asSInt(bits.W)

  var sum : SInt = count + io.inc

  var operandsSignSame : Bool = io.inc(bits-1) === count(bits-1)
  var sumSignDifferent: Bool = sum(bits-1) =/= count(bits-1)

  when(operandsSignSame && sumSignDifferent) {
    when(count(bits-1)) {
      count := minVal
    }.otherwise {
      count := maxVal
    }
  }.otherwise {
    count := sum
  }
  io.valOut := count
}

object SaturatingCounter {
  def apply(bits: Int): SaturatingCounter = new SaturatingCounter(bits)
}

【问题讨论】:

    标签: chisel


    【解决方案1】:

    尝试使用它来创建模块并访问它们的io

      val vec_of_elements = Vec(10, Module(SaturatingCounter(4)).io)
    

    这对我有用。

    注意.io,添加您将获得一些Data 类型,并且您可以访问您在此处创建的所有模块的ios。

    一般来说,如果你想使用硬件,你只需要一个 Vec 基于元素的索引,或者您的元素是 IO 的一部分。如果你不需要,你可以使用 Seq、Array 或类似的 Scala 集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多