Как перебрать определение аналогичных регистров в долоте (regmap) - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть похожее определение регистра, и я хочу написать в конструкции 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 точки).

Я считаю, что использование итераторов хорошо против ошибок копирования / вставки и выглядит лучше.
Заранее благодарю за любую помощь.

1 Ответ

0 голосов
/ 13 декабря 2018

Я думаю, что шаблон для этого, вероятно, будет выглядеть примерно так:

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 :_*)

Единственное волшебство - это: _ *, который преобразует последовательность в список параметров. Вам не нужноНесколько шагов, которые я использовал, я просто хотел, чтобы было легко увидеть, что происходит.

...