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