Как расширить пакет chisel3 до заданной c ширины значения this.getWidth? - PullRequest
1 голос
/ 23 апреля 2020

Я переосмысливаю некоторую структуру пакета chisel3 в другой пакет. скажем,

val a = Wire(new BundleA)
val b = Wire(new BundleB)
b := a.asTypeOf(b)

Ширина двух пакетов отличается, мне нужно расширить BundleB до ширины BundleA, чтобы BundleB совпал с BundleA, начиная с MSB.

Я пытался

class BundleB extends Bundle{
 val sub    = UInt(subfield.W)
 val dummy  = UInt((fullwidth - this.getWidth).W)
}

Но ширина B по-прежнему составляет всего subfield, а не fullwidth

Так как построить связку заданной c ширины с фиктивные данные и текущая ширина?

1 Ответ

1 голос
/ 23 апреля 2020

На самом деле это ошибка, что Зубило здесь не ошибается, но this.getWidth заставляет Зубило решить BundleB слишком рано, захватывая sub как поле, но игнорируя dummy.

Там Это не встроенный способ получить "текущую ширину хода" Bundle, который вы строите, вам нужно сделать это самостоятельно, что-то вроде:

class BundleB(val subfieldWidth: Int, val fullWidth: Int) extends Bundle {
  val sub   = UInt(subfieldWidth.W)
  private val currentWidth = subfieldWidth // + ... if you have other fields
  val dummy = UInt((fullWidth - subfieldWidth).W)
}
...