Chisel Tutorial(七)——模塊
阿新 • • 發佈:2017-08-13
結構 ron 根據 inpu 輸出 extends div art rac
下面內容根據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輸入選擇器。
Chisel Tutorial(七)——模塊