介绍UserModule类中,如何管理构建硬件模型所需的命令。
 
 
1. _commands
 
private val _commands = ArrayBuffer[Command]()
 
_commands中存放了构建模块所需的全部命令。
 
 
1) 添加命令:addCommand
 
a. 需要没有close:_closed意为模块构建所需已经齐备,不能再向其中添加内部数据和逻辑定义;
b. 把c添加到_commands中;
 
2) 获取所有命令:getCommands
 
 
a. 需要已经close,意为模块构建所需已经齐备;
b. 返回全部命令:_commands.toSeq
 
2. Builder.pushCommand()
 
 
addCommand()通过pushCommand()调用,将命令c添加到正在构建的模块(forcedUserModule)之中。
 
3. _closed
 
 
_closed定义与BaseModule类中,为该类数据成员,protected表明子类可以直接读写访问。
 
_closed是一个标志:标志着模块定义是否已经完成,即所需的各个内部数据变量、内部逻辑是否已经全部添加到模块中。亦即构建模块的硬件模型所需的所有命令已经齐备,可以开始构建了。
 
总结并简而言之,即过程分为两个阶段:定义、构建。而_closed标志着模块定义阶段的结束。也可以用来表明可以开始构建阶段了。
 
 
4. forcedUserModule
 
pushCommand()调用forcedUserModule.addCommand(c)把命令c加入到forcedUserModule中。
 
forcedUserModule定义如下:
可知,其为Option包裹着的UserModule,即currentModule拆包而来;
 
currentModule定义如下:
currentModule基于动态上下文(dynamicContext)中定义的变量currentModule。其赋值可以直接使用“currentModule = xxx”的形式。
 
currentModule定义与Builder类中,其赋值的地方为:
 
直接定义在BaseModule的类体中,每一个BaseModule类的子类实例化时,都要执行这个代码。所以Builder.currentModule的值即为当前实例化的模块。
 
如下代码中FullAdder即为Module的子类,亦即BaseModule的子类:
 
所以new FullAdder()时,会执行到Builder.currentModule = Some(this)这行代码,而把currentModule设置为正在创建(new)的这个FullAdder模块。
 
所以后续pushCommand()时,都是添加到这个FullAdder模块中。
 
 
 

Chisel3 - model - UserModule commands的更多相关文章

  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 - model - DefWire, Reg, Memory, Prim

    https://mp.weixin.qq.com/s/KkkqvekWHG6yrqwHUECRIw   介绍如何定义Wire/Reg/Memory/Prim.   1. DefWire   Wire( ...

  6. Chisel3 - model - connect

    https://mp.weixin.qq.com/s/w8NqM3GVlF0NydpsB65KPg   介绍创建模块顺序逻辑的connect命令.     0. 这里先简单对 "=" ...

  7. Chisel3 - model - Hardware Model

    https://mp.weixin.qq.com/s/x6j7LZg7i7i_KcNEA8YCQw   Chisel作为领域专用语言(DSL),用于构建硬件模型.待硬件模型建立后,再基于模型进行仿真. ...

  8. 领域驱动设计常见问题FAQ

    本文出处:http://www.cqrs.nu/Faq What is a domain? The field for which a system is built. Airport managem ...

  9. CQRS FAQ (翻译)

    我从接触ddd到学习cqrs有6年多了, 其中也遇到了不少疑问, 也向很多的前辈牛人请教得到了很多宝贵的意见和建议. 偶尔的机会看到国外有个站点专门罗列了ddd, cqrs和事件溯源的常见问题. 其中 ...

随机推荐

  1. matlab数值数据和变量名

    1.2MATLAB数值数据 l  数值数据类型的分类 l  数值数据的输出格式 l  常用数学函数内部函数 1.数值数据类型的分类 l  整型 l  浮点型 l  复数型 (1)整型 1.数值数据类型 ...

  2. kafka学习 之 简介

    文章目录 [Topics and Logs](http://kafka.apache.org/intro#intro_topics): Distribution: Producers: Consume ...

  3. react中redux的理解

    定义 redux可以看作是flux的进阶版,主要用于react中公共状态(数据)的管理 redux底层原理 redux有一个createStore方法,这个方法用户创建公共存储空间,createSto ...

  4. 简单服务发现协议(SSDP)编程指导

    本文主要讲解如何使用ssdp进行编程,不涉及过多关于ssdp的理论知识 1. 前言   网上对ssdp理论介绍的一大把,缺乏从编程角度的一个指导,这里不会长篇大论ssdp理论,只是根据实际编码经验对用 ...

  5. WriteUp_easy_sql_堆叠注入_强网杯2019

    题目描述 随便注 解题过程 查看源码,发现应该不适合sqlmap自动化注入,该题应该是让你手工注入: <!-- sqlmap是没有灵魂的 --> <form method=" ...

  6. js对页面中的内容进行拼音搜索,只对后台已经传过来的页面数据进行索引

    实现输入拼音(可以使用拼音首字母来查),来查询出已经存在于页面的数据 注意:这种写法只能适用于页面中已经存在的数据进行检索,大体意思是将本页内的数据拼接成一个字符串,然后通过该字符串去检索匹配的字符串 ...

  7. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  8. 【python爬虫】scrapy实战1--百万微博任性采集

    原文: https://blog.csdn.net/qq_36936730/article/details/105132550

  9. Pyqt5_QmainWindow

    QmainWindow Toolbar() QMenuBar() StatusBar() ******************************************************* ...

  10. css实现手机端导航栏左右滑动

    <html> <head> <meta charset="utf-8"> <meta name="viewport" ...