如果我正在定制 chisel3 的 Queue Util,我应该如何处理 genType?

If I'm customizing chisel3's Queue Util, what should I do with genType?

我正在尝试自定义 Queue 一点,而不是分叉 chisel3 并从源代码构建。我对取出 interal 包使用的正确方法有点困惑。我应该如何处理 ReadyValidIO genType

private val genType = (DataMirror.internal.isSynthesizable(gen), chisel3.internal.Builder.currentModule) match {
  case (true, Some(module: Module))
      if !module.compileOptions.declaredTypeMustBeUnbound => chiselTypeOf(gen)
  case _ => gen
}

和队列 genType?

  val genType = if (compileOptions.declaredTypeMustBeUnbound) {
    requireIsChiselType(gen)
    gen
  } else {
    if (DataMirror.internal.isSynthesizable(gen)) {
      chiselTypeOf(gen)
    } else {
      gen
    }
  }

如果我知道我只将它用于可合成的 gen 类型,我可以将 chiselTypeOf(gen) 传递给 genType 吗?

您应该只使用 gen,即。 val genType = gen(或者只使用 gen 而没有 genType)。

所有内部的东西都在处理这样一个事实,即在 Chisel 2 中(通过 import Chisel._ 在 chisel3 代码库中仍然支持它)没有区分 硬件类型 硬件值 。因此,为了帮助 import Chisel._ 工作,需要检查我们是否应该克隆类型(通过 chiselTypeOf),但这不是让你自己的 API 工作的推荐方法.

创建 Queue 时,应始终使用类型来完成,以便您可以放入 requireIsChiselType,但您不需要这样做,因为 Input(_)IO(_) 在内部调用该方法。