天天看点

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
}
           

继续阅读