https://mp.weixin.qq.com/s/2vjM-gcauvHnn6KJzlOm4g

 
Chisel的模块和Verilog的模块很相似,都用来定义模块结构(hierarchical structure)。
 
Chisel的模块定义,包含三部分内容:
a. 继承自Module类;
b. 定义模块输入输出接口(继承自Bundle);
c. 把内部各部分与输入输出接口连接起来;
 
参考链接:
 
示例:
class Mux2 extends Module {
val io = IO(new Bundle{
val sel = Input(UInt(1.W))
val in0 = Input(UInt(1.W))
val in1 = Input(UInt(1.W))
val out = Output(UInt(1.W))
})
io.out := (io.sel & io.in1) | (~io.sel & io.in0)
}
 
1. 继承Module类
 
如示例中:
class Mux2 extends Module
 
在Mux2类的定义中,val io是Mux2类的成员。代码:io.out := (io.sel & io.in1) | (~io.sel & io.in0) 定义了模块内部电路结构。
 
2. 定义输入输出接口
 
val io = IO(new Bundle{
val sel = Input(UInt(1.W))
val in0 = Input(UInt(1.W))
val in1 = Input(UInt(1.W))
val out = Output(UInt(1.W))
})
 
Module中定义了io,作为抽象成员存在,任何子类都要实现这个成员。
 
使用IO方法包裹,IO方法记录入参的信息:
 
实现一个匿名的Bundle子类,并定义数据成员。这个子类作为IO方法的参数,被绑定为模块的输入输出端口。
 
3. 连接内部子电路
 
代码行:io.out := (io.sel & io.in1) | (~io.sel & io.in0) 描述Mux2模块内部结构,并把输入输出连接起来。
 
需要注意的是io.out := (io.sel & io.in1) | (~io.sel & io.in0)直接是一行代码,写在类的定义中。这与Java中类的定义不同。形式上相当于Java中用static包裹住的静态代码,但效果上相当于构造方法中的代码。即在每一次new一个Mux2对象的时候,都会执行这一段代码。(Java类中的static代码块只在类加载时执行)
 
 
4. Chisel3中Module相关类的类图
 
 

Chisel3 - 模块的更多相关文章

  1. Chisel3 - model - 子模块,顶层模块

    https://mp.weixin.qq.com/s/3uUIHW8DmisYARYmNzUZeg   介绍如何构建由模块组成的硬件模型.   1. 子模块   一个模块可以有一个或多个子模块,创建子 ...

  2. Chisel3 - model - Builder

    https://mp.weixin.qq.com/s/THqyhoLbbuXXAtdQXRQDdA   介绍构建硬件模型的Builder.   1. DynamicContext   ​​ 动态上下文 ...

  3. Chisel3 - model - IO ports

    https://mp.weixin.qq.com/s/fgCvIFt0RdEajhJVSy125w   介绍模块的输入输出端口的定义与管理.     1. _ports   1) 模块的输入输出端口, ...

  4. Chisel3 - model - when

    https://mp.weixin.qq.com/s/YGTXky4wff7LXUphUxISQg   介绍创建模块判断逻辑的when命令.   1. when/elsewhen/otherwise ...

  5. Chisel3 - bind - Wire, Reg, MemPort

    https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A   模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出 ...

  6. Chisel3 - Tutorial - ShiftRegister

    https://mp.weixin.qq.com/s/LKiXUgSnt3DzgFLa9zLCmQ   简单的寄存器在时钟的驱动下,逐个往下传值.   参考链接: https://github.com ...

  7. Chisel3 - 接口方向(Direction)

    https://mp.weixin.qq.com/s/36jreQGpDLCCNfmUwI34lA   模块接口有三种方向:Input/Output/Inout.Chisel在声明模块接口的时候,也需 ...

  8. Chisel3 - 使用chisel-iotesters进行验证

    https://mp.weixin.qq.com/s/KqyklKrPLtPm38sftMYlHA   1. 使用Maven获取库   Chisel相关的库基本上都可以使用Maven获取到(https ...

  9. Chisel3 - util - Queue

    https://mp.weixin.qq.com/s/vlyOIsQxR6bCqDDMtRQLLg   实现队列模块,先入先出(FIFO).   参考链接: https://github.com/fr ...

随机推荐

  1. 使用 if elseif else 指定条件

    nrows = 4; ncols = 6; A = ones(nrows,ncols); 遍历矩阵并为每个元素指定一个新值.对主对角线赋值 2,对相邻对角线赋值 -1,对其他位置赋值 0. for c ...

  2. MySQL数据类型笔记

    引言 作为一个做Java后端的开发者,无论是在自己平时项目学习实战还是工作中的真实项目,都离不开和数据库打交道.而MySQL作为当今最流行的关系型数据库之一,也成为了我们必须掌握的一门技术.最近在工作 ...

  3. MySQL 入门(3):事务隔离

    摘要 在这一篇内容中,我将从事务是什么开始,聊一聊事务的必要性. 然后,介绍一下在InnoDB中,四种不同级别的事务隔离,能解决什么问题,以及会带来什么问题. 最后,我会介绍一下InnoDB解决高并发 ...

  4. web概念简述,HTML学习笔记

    今日内容 1. web概念概述 2. HTML web概念概述 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务 ...

  5. LabVIEW动态添加控件

    综述: 事例1: 未执行: 执行后:

  6. 关于redis,你需要了解的几点!

    一.关于 redis key: 1.是二进制安全的,也就是说,你可以使用任何形式的二进制序列来作为key,比如一个string,或者一个jpg图片的数据,需要说明的是,空字符串也是一个有效的key. ...

  7. 今天玩一下python得邮件解析吧,查看邮件内容小儿科,我们下载邮件的附件

    直男,直接上代码. 自己看打印的内容 主要功能如下: #如果邮件内容存在链接则返回链接,若不存在则直接下载邮件附件 import imapclient,re import pyzmail #提取邮件里 ...

  8. javaWeb删除一条及多条数据

    一.编写dao //删除根据ID@Delete("delete from product where id=#{id}")public void delete(Integer id ...

  9. JavaWeb学习之JSP(二) JSP标签

    JSP常用标签 什么是JSP标签 JSP标签,有的地方也叫做JSP动作,在JSP中编写大量的java代码会使JSP页面显得杂乱无章,看起来非常不舒服,因此JSP提供了一些类似html的标签,通过这些标 ...

  10. 将mat文件中的数据按要求保存到txt文档中(批处理)

    之前有个老朋友,让帮忙将一个mat中的数据重新保存到txt中,由于数据比较多需要用到批处理,之前弄过很多次,但每次一到要用的时候总是忘记怎么写了,现在记录一下,免得后面老是需要上网搜.这里先说一个比较 ...