使用形参声明可变大小的Vec

  • 本文关键字:Vec 形参 声明 chisel
  • 更新时间 :
  • 英文 :


我试图有一个可变大小的数组基于一个模块参数(下面的例子)。当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
}     
}

并在代码的另一部分使用此变量。