码迷,mamicode.com
首页 > 其他好文 > 详细

Chisel Tutorial(七)——模块

时间:2017-08-13 18:37:09      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:mil   输入   ril   content   pre   art   span   一个   rom   

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

标签:mil   输入   ril   content   pre   art   span   一个   rom   

原文地址:http://www.cnblogs.com/slgkaifa/p/7354217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!