如何遍历 Chisel 中的相似寄存器定义(regmap)
How to iterate through similar registers definition in Chisel (regmap)
我有一些类似的寄存器定义,想写在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 点线)。
我相信,使用迭代器可以很好地避免 copy/paste 错误并且看起来更好。
在此先感谢您的帮助。
我认为这个模式可能类似于
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 :_*)
唯一的魔法是 :_* 将一个序列转换成一个列表 parameters.You 不需要我使用的多个步骤,我只是想让它更容易看怎么回事。
我有一些类似的寄存器定义,想写在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 点线)。
我相信,使用迭代器可以很好地避免 copy/paste 错误并且看起来更好。
在此先感谢您的帮助。
我认为这个模式可能类似于
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 :_*)
唯一的魔法是 :_* 将一个序列转换成一个列表 parameters.You 不需要我使用的多个步骤,我只是想让它更容易看怎么回事。