5

我有一些类似的寄存器定义,我想写在 regmap 构造下。我的代码目前如下所示:

val regs = RegInit(Vec(Seq.fill(5)(0.U(32.W))))

regmap (
...
0x30 -> Seq(RegField(32,regs(0),RegFieldDesc("reg0",""),
0x34 -> Seq(RegField(32,regs(1),RegFieldDesc("reg1",""),
0x38 -> Seq(RegField(32,regs(2),RegFieldDesc("reg2",""),
0x3C -> Seq(RegField(32,regs(3),RegFieldDesc("reg3",""),
0x40 -> Seq(RegField(32,regs(4),RegFieldDesc("reg4",""),
...

) 

我的问题是,有没有办法使用 Scala 迭代器以更简洁的方式编写上述内容?我的另一个要求是我仍然需要能够在此迭代器之前和之后添加寄存器(3 点线)。

我相信,使用迭代器可以很好地防止复制/粘贴错误并且看起来更好。
提前感谢您的帮助。

4

1 回答 1

3

我认为这个模式可能是这样的

val regs = RegInit(Vec(Seq.fill(5)(0.U(32.W))))

val tuples = regs.zipWithIndex.map { case (reg, i) =>
  (0x30 + (i * 4)) -> Seq(RegField(32,regs,RegFieldDesc(s"reg$i","")))
}
regmap(tuples :_*)

唯一的魔力是 :_* ,它将序列转换为参数列表。您也不需要我使用的多个步骤,我只是想轻松查看正在发生的事情。

于 2018-12-13T17:55:34.783 回答