我试图有一个可变大小的数组基于一个模块参数(下面的例子)。当PARAM的大小不为零时,代码按预期工作。
class HWModule (PARAM : Int) extends Module{
val my_Vec = RegInit(Vec(Seq.fill(PARAM)(0.U(32.W))))
if (PARAM > 0){
for (i <- 0 until PARAM -1){
my_Vec(i) := i.U //Example Code
}
}
}
然而,当我尝试让PARAM = 0时,它停止工作。我尝试使用模式匹配(我如何写入条件输出)来解决问题,但我得到以下错误消息(以及类似的消息):
Equals不带参数
表达式不能转换为赋值,因为接收器不可赋值。
我的目标是能够在PARAM = 0时删除代码的某些部分,同时还允许可变大小的Vecs, Regs, Wires等实例化。如果有人能给我一个好的解决方案或信息,我将不胜感激。
谢谢你,米格尔席尔瓦
也许你可以这样使用Option
:
val my_Vec_or_none = if(PARAM > 0) Some(RegInit(Vec(Seq.fill(PARAM))(0.U(32.W)))) else None
然后用get
方法注册:
if (PARAM > 0){
val my_Vec = my_Vec_or_none.get
for (i <- 0 until PARAM -1){
my_Vec(i) := i.U //Example Code
}
}
也可以直接使用索引值(不需要中间的val
):
val my_Vec = if(PARAM > 0) Some(RegInit(Vec(Seq.fill(PARAM))(0.U(32.W)))) else None
if (PARAM > 0){
for (i <- 0 until PARAM -1){
my_Vec.get(i) := i.U //Example Code
}
}
并在代码的另一部分使用此变量。