下面内容根据2015-7-10版的Chisel 2.2 Tutorial整理
Chisel中的模块与Verilog HDL中模块的概念十分相似,都是用层次结构描写叙述电路。Chisel中的module是一个类,其定义遵循下面几点:
- 继承自Module类
- 有一个命名为io的port
- 在其构造函数中连接子电路
例如以下是一个2选1选择器的模块定义:
class Mux2 extends Module{ val io = new Bundle{ val sel = UInt(INPUT, 1) val in0 = UInt(INPUT, 1) val in1 = UInt(INPUT, 1) val out = UInt(OUTPUT, 1) } io.out := (io.sel & io.in1) | (~io.sel & io.in1) }
在模块的内部使用到了Chisel中的一个操作符“:=”用来将右边的输出与左边的输入连接起来。
模块的层次
如今能够使用子模块构建模块,从而实现电路的层次结构。以下是一个4输入选择器的样例,是通过三个2输入选择器构建的。
class Mux4 extends Module{ val io = new Bundle{ val in0 = UInt(INPUT, 1) val in1 = UInt(INPUT, 1) val in2 = UInt(INPUT, 1) val in3 = UInt(INPUT, 1) val sel = UInt(INPUT, 2) val out = UInt(OUTPUT, 1) } val m0 = Module(new Mux2()) m0.io.sel := io.sel(0) m0.io.in0 := io.in0 m0.io.in1 := io.in1 val m1 = Module(new Mux2()) m1.io.sel := io.sel(0) m1.io.in0 := io.in2 m1.io.in1 := io.in3 val m2 = Module(new Mux2()) m2.io.sel := io.sel(1) m2.io.in0 := m0.io.out m2.io.in1 := m1.io.out io.out := m2.io.out }
上例中创建了三个Mux2子模块,然后将这个三个模块连接起来,构成了一个4输入选择器。