如何在凿子中获得UInt()的大小?

时间:2017-10-10 07:18:48

标签: hdl chisel

也许这很简单,但我不能简单地找到如何在Chisel中获取UInt()值的比特值?

我知道如何通过声明设置大小:

val a = UInt(INPUT, 16)

但要获得' a'大小,有这样的属性:

val size = a.?

或者:

val size = width(a)

1 个答案:

答案 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.
}