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

Chisel Tutorial(七)——模塊

結構 ron 根據 inpu 輸出 extends div art rac

下面內容根據2015-7-10版的Chisel 2.2 Tutorial整理


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

  • 繼承自Module
  • 有一個命名為io的port
  • 在其構造函數中連接子電路

例如以下是一個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輸入選擇器。



Chisel Tutorial(七)——模塊