1. 程式人生 > >Chisel Tutorial(七)——模組

Chisel Tutorial(七)——模組

以下內容依據2015-7-10版的Chisel 2.2 Tutorial整理

Chisel中的模組與Verilog HDL中模組的概念十分相似,都是用層次結構描述電路。Chisel中的module是一個類,其定義遵循以下幾點:

  •  繼承自Module
  •  有一個命名為io的埠
  •  在其建構函式中連線子電路

如下是一個21選擇器的模組定義:

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輸入選擇器。