Chisel Tutorial(七)——模組
阿新 • • 發佈:2019-02-14
以下內容依據2015-7-10版的Chisel 2.2 Tutorial整理
Chisel中的模組與Verilog HDL中模組的概念十分相似,都是用層次結構描述電路。Chisel中的module是一個類,其定義遵循以下幾點:
- 繼承自Module類
- 有一個命名為io的埠
- 在其建構函式中連線子電路
如下是一個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輸入選擇器。