【发布时间】:2021-09-07 12:31:41
【问题描述】:
我有一个如下模块:
class ComputationIO[T <: Data](val OperandType: T) extends Bundle {
val data = OperandType.cloneType
}
class Computation [T <: Data] (OperandType: T) extends Module {
val io = IO( new Bundle {
val in = Input(new ComputationIO(OperandType))
})
// REST OF THE CODE HERE...
}
而且,我正在实例化Computation,如下所示:
val compUnit = for (i <- 0 until nParal) yield {
val Comp = Module(new Computation(UInt(32.W)))
Comp
}
然而,虽然我将UInt(32.W) 传递给构造函数,但它给了我以下错误:
firrtl.passes.CheckInitialization$RefNotInitializedException:Reference compUnit is not fully initialized.
[error] : compUnit.io.in.OperandType <= VOID
我可以通过删除 IO 类中的val 并覆盖cloneType 来解决问题,如下所示:
class ComputationIO[T <: Data](OperandType: T) extends Bundle {
val data = OperandType.cloneType
override def cloneType = new ComputationIO(OperandType).asInstanceOf[this.type ]
}
但是,我想知道第一种方法的问题是什么?构造函数已初始化。所以,not fully initialized 错误没有意义。
谢谢
【问题讨论】: