2016-11-26 82 views
3

我正在學習鑿子3。關於鑿子的語法:Vec&Wire

我對代碼有一些疑問。

val myVec = Wire(Vec(5,SInt(width = 23)))// 5個23位有符號整數的向量。

我想如果我聲明一個向量並且我需要寫「Wire」,但是當我看到這些代碼時我錯了。

類BigBundle延伸捆綁{

VAL myvec會VEC =(5,SINT(寬度= 23)) // 5 23位帶符號整數的向量。

val flag = Bool() //先前定義的包。

VAL F =新MyFloat

}

其普斯在我的臉上突然,所以我想知道我什麼時候用 「線」?

在此先感謝。

回答

2

您可以使用Wire作爲您可能重新指定值的任何鑿形節點。

val a = Wire(Bool()) 
a := Bool(false) 
... 
3

這裏的關鍵是在「類型」和「值」之間區分鑿子3。

VecBundleUIntSInt,和Bool是實例 「類型」。

WireRegInputOutput,和Mem是實例 「值」。

隨着BigBundle從以上:

class BigBundle extends Bundle { 
    val myVec = Vec(5, SInt(width = 23)) // Vector of 5 23-bit signed integers. 
    val flag = Bool() 
    val f = new MyFloat // Previously defined bundle. 
} 

BigBundle是 「類型」 一樣Vec(5, SInt(width = 23))是 「類型」。

如果您希望使用這些類型,您可以創建其中一種類型的Wire,例如。

val myVecWire = Wire(Vec(5, SInt(width = 23))) 
val myBundleWire = Wire(new BigBundle) 
+0

你可以舉一個如何操作myBundleWire的例子嗎?它可以讓我更加明白。 – jjlin

+0

您可以使用點符號訪問BigBundle類型的Wire(或其他值)的字段,並使用連接運算符':='連接到它們。因此,如果你想將myBundleWire的標誌字段連接到false,你可以寫下:'myBundleWire.flag:= false.B' – jkoenig

+0

謝謝我完全理解。 – jjlin