Пару вещей. Во-первых, похоже, что вы используете семантику 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