首页 > 代码库 > Chisel Tutorial(七)——模块

Chisel Tutorial(七)——模块

下面内容根据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(七)——模块