Chisel Tutorial(三)——组合电路

来源:互联网 发布:qq晒密软件 编辑:程序博客网 时间:2024/05/08 09:34

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


组合电路

    在Chisel中每个电路都是一些node的集合,每个node是一个硬件操作单元,具有0个、1个或者多个输入,依据输入驱动一个输出。上一篇博客“Chisel Tutorial(二)——Chisel的数据类型”中介绍的变量就可以认为是一个0输入的node,其输出是一个固定值,也就是变量的值。不同的node可以通过操作符连接在一起,例如可以通过如下表达式表示一个简单的组合逻辑电路:

(a & b) | (~c & d)

    上述表达式的语法应该很好理解,&表示bit与,|表示bit或,~表示bit反,a-d表示一些命名wire

    任何一个简单地表达式都可以被转化为一个电路树,命名wire作为叶子节点,操作符组成中间节点,电路的最终输出是电路树根节点的输出,对于上面的简单表达式而言,根节点就是bit或。

    在Chisel中给一个wire命名就是声明一个变量,使用Scala中的关键词val。如下:

val sel = a | bval out = (sel & in1) | (~sel & in2)

    针对不同数据类型,Chisel定义了不同的硬件操作符,如下表所示。


Chisel有一个很大的特点就是变量宽度推测,wire的宽度是可以推测出来的,按照如下规则推测:


此处的wz就是z的宽度。

除了右移操作外,宽度推测机制得到的输出wire的宽度始终大于或者等于输入wire的宽度。



0 0