3
也许这很容易,但我不能简单地找到如何获得凿子中的UInt()值的比特大小?如何在凿子中获取UInt()的大小?
我知道如何通过声明来设置大小:
val a = UInt(INPUT, 16)
但要获得 'A' 的大小,有没有像一个属性:
val size = a.?
或者:
val size = width(a)
也许这很容易,但我不能简单地找到如何获得凿子中的UInt()值的比特大小?如何在凿子中获取UInt()的大小?
我知道如何通过声明来设置大小:
val a = UInt(INPUT, 16)
但要获得 'A' 的大小,有没有像一个属性:
val size = a.?
或者:
val size = width(a)
一些事情。首先,看起来你正在使用凿子2语义。你或许应该使用凿子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 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.
...
}
谢谢。我使用凿子2是因为它是一个旧项目。但在我的新项目中,我现在使用的是凿子3。 – FabienM