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