以下内容依據2015-7-10版的Chisel 2.2 Tutorial整理
此處的Bundles、Vecs就不翻譯了,免得因為翻譯不準引起一些誤解,童鞋們有沒有好的建議?
Bundle與Vec也是Chisel定義的資料類型。Bundle是一些元素的集合,每個元素都有一個變量名,類似于C語言中的結構體。使用者可以通過定義Bundle的子類來定義一個Bundle類型的變量,如下:
class MyFloat extends Bundles{
val sign = Bool()
val exponent = UInt(width=8)
val significant = UInt(width=23)
}
val x = new MyFloat()
val xs = x.sign
Chisel建議使用者按照Scala的習慣對類名的首字母大寫。上述定義中的還有一點需要注意,UInt的構造函數中指定了一個參數width的值,這個參數表示了此處定義的UInt資料類型的寬度。
Vec是一些元素組成的向量,每個元素都有一個索引序号,類似于C語言中的數組。下面是一個Vec類型的變量的定義:
val myVec = Vec.fill(5){SInt(width = 23)} // 定義了一個由5個23bit寬度的SInt組成的Vec
val reg3 = myVec(3) // 取出其中的一個元素
使用者可以使用Bundles、Vec組成更加複雜的資料結構,如下:
class BigBundle extends Bundle {
val myVec = Vec.fill(5) { SInt(width = 23)}
val flag = Bool()
val f = new MyFloat() // 此處的MyFloat是前文定義的bundle
}