Каков наилучший способ инициализации регистра комплектов для всех единиц в долоте? - PullRequest
3 голосов
/ 13 апреля 2020

Мне интересно, как я могу инициализировать регистр Bundle для всех единиц. Допустим, у меня есть пакет:

class MyBundle(val w: Int) extends Bundle {
  val a = UInt(w.W)
  val b = UInt(w.W)
  val x = Bool()
  val y = Bool()
}

Я пытаюсь что-то вроде:

val myReg = RegInit(-1.S.asTypeOf(new MyBundle(32)))

Однако, это предполагает, что ширина литерала со знаком равна всего 1, и инициализирует только LSB связки с 1. Что приходит в голову:

val myReg = RegInit(-1.S(new MyBundle(32).asSInt().getWidth).asTypeOf(new MyBundle(32)))

Но это, похоже, не работает вообще.

Как я могу выполнить sh это?

1 Ответ

3 голосов
/ 13 апреля 2020

Вы можете установить ширину явно на основе ширины этого Bundle. Вы на правильном пути. Попробуйте:

val myReg = RegInit(-1.S(new MyBundle(32).getWidth.W).asTypeOf(new MyBundle(32)))

Также обратите внимание, что если вы уже построили MyBundle, вы можете ссылаться на это напрямую, а не на создание новых объектов, например:

val foo = Wire(new MyBundle(32))
val myReg = RegInit(-1.S(foo.getWidth.W).asTypeOf(foo))
...