Как получить размер UInt () в долоте?

Может быть, это просто, но я просто не могу найти, как получить битовый размер значения UInt () в Chisel?

Я знаю, как задать размер по объявлению:

val a = UInt(INPUT, 16)

Но есть ли такое свойство, чтобы получить размер «а»:

val size = a.?

Or :

val size = width(a)

person FabienM    schedule 10.10.2017    source источник


Ответы (1)


Пару вещей. Во-первых, похоже, что вы используете семантику Chisel 2. Вероятно, вам следует использовать семантику Chisel 3, что означает, что вы должны писать

val a = Input(UInt(16.W))

Быстрый ответ: ширину можно получить примерно так:

val theWidth = if(io.in0.widthKnown) io.in0.getWidth else -1

или используя матч

val theWidth = io.in0.widthOption match {
  case Some(w) => w
  case None => -1 // you decide what you want the unknown case to be.
}

Теперь у вас есть значение ширины в Scala переменной theWidth, которое является Int, необходимо использовать if или соответствие, потому что ширина, в принципе, может быть неопределенной. .

Более длинный ответ заключается в том, что вы должны быть осторожны с желанием сделать это. theWidth оценивается во время генерации схемы, если используется вывод ширины (что обычно имеет место, если вы запрашиваете тип долота на предмет его ширины), вы не сможете его увидеть, потому что вывод ширины выполняется после разработки схемы и обработки компилятором Firrtl.

Возможно, вам следует сделать ширину, которую вы хотите знать параметром схемы, и использовать ее вместо widthOption. Что-то вроде.

class X(ioWidth: Int) extends Module {
  val io = IO( new Bundle {
    val in0 = Input(UInt(ioWidth.W))
    ...
  })

  val reg = Reg(UInt((ioWidth * 2).W)) // using width parameter here.
  ...
}
person Chick Markley    schedule 10.10.2017
comment
Спасибо. Я использую chisel2, потому что это старый проект. Но в моем новом проекте я теперь использую chisel3. - person FabienM; 10.10.2017