也许这很简单,但我不能简单地找到如何在Chisel中获取UInt()值的比特值?
我知道如何通过声明设置大小:
val a = UInt(INPUT, 16)
但要获得' a'大小,有这样的属性:
val size = a.?
或者:
val size = width(a)
答案 0 :(得分:4)
有几件事。首先,看起来你正在使用Chisel 2语义。你可能应该使用Chisel 3语义,这意味着你应该写
Laravel
快速回答是你可以获得宽度:
val a = Input(UInt(16.W))
或使用匹配
val theWidth = if(io.in0.widthKnown) io.in0.getWidth else -1
您现在拥有 Scala 变量 theWidth 中的宽度值,这是一个Int,必须使用if或匹配,因为原则上可以使用宽度,未定义。
答案越长,你应该小心这样做。在电路生成时评估 theWidth ,如果正在使用宽度推断(如果您正在询问其宽度的凿子类型,通常就是这种情况),您将无法看到它,因为宽度推断是在电路制定完成后完成的,并由 Firrtl 编译器处理。
你可能应该想要知道电路参数的宽度,而不是使用widthOption。像。的东西。
val theWidth = io.in0.widthOption match {
case Some(w) => w
case None => -1 // you decide what you want the unknown case to be.
}