Chisel Tutorial(五)——Bundles与Vecs

来源:互联网 发布:淘宝山寨手机店铺 编辑:程序博客网 时间:2024/05/22 18:16

以下内容依据2015-7-10版的Chisel 2.2 Tutorial整理


此处的BundlesVecs就不翻译了,免得因为翻译不准引起一些误解,童鞋们有没有好的建议?

BundleVec也是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组成的Vecval reg3 = myVec(3)  // 取出其中的一个元素

用户可以使用BundlesVec组成更加复杂的数据结构,如下:


class BigBundle extends Bundle {  val myVec = Vec.fill(5) { SInt(width = 23)}  val flag = Bool()  val f = new MyFloat()   // 此处的MyFloat是前文定义的bundle}


0 0
原创粉丝点击