如果我正在定制 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(_)
在内部调用该方法。
我正在尝试自定义 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(_)
在内部调用该方法。