天天看點

Chisel Tutorial(五)——Bundles與Vecs

以下内容依據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
}
           

繼續閱讀