介绍构建硬件模型的Builder。
 
1. DynamicContext
 
动态上下文,供构建硬件模型时,存放上下文状态信息。
 
 
2. Builder
 
 
Builder使用DynamicContext存储数据。供其他类获取和存储信息使用。
 
3. ClockAndReset
 
这里以clock和reset为例。
 
1) DynamicContext中,定义了currentClockAndReset:
var currentClockAndReset: Option[ClockAndReset] = None
 
Builder中为:
可以用这些进行获取和设置。
 
2) 在模块实例化的时候赋值
 
 
3) 临时更换clock或reset
 
在MultiClock.scala中,定义了如下方法:
a. 临时更换clock, withClock:
b. 临时更换reset, withReset:
c. 临时更换clock和reset, withClockAndReset:
 
更换clock和reset之后,再执行block所代表的代码块。
 
4) 使用Builder中的clock和reset
 
a. 创建寄存器Reg():
构建硬件模型时,DefReg中包含了从Builder中获取的clock。
 
b. 创建带初始值的RegInit():
这里构建这个寄存器的命令DefRegInit里,包含了从Builder中获取的clock和reset。
 
所以3)中,临时更换Builder.clockAndReset然后在执行block时,如果有创建寄存器,则其使用的clock/reset即为临时更改后的。
 
 
4. 附录
 
private[chisel3] class DynamicContext() {
val idGen = new IdGen
val globalNamespace = Namespace.empty
val components = ArrayBuffer[Component]()
val annotations = ArrayBuffer[ChiselAnnotation]()
var currentModule: Option[BaseModule] = None
// Set by object Module.apply before calling class Module constructor
// Used to distinguish between no Module() wrapping, multiple wrappings, and rewrapping
var readyForModuleConstr: Boolean = false
var whenDepth: Int = 0 // Depth of when nesting
var currentClockAndReset: Option[ClockAndReset] = None
val errors = new ErrorLog
val namingStack = new internal.naming.NamingStack
// Record the Bundle instance, class name, method name, and reverse stack trace position of open Bundles
val bundleStack: ArrayBuffer[(Bundle, String, String, Int)] = ArrayBuffer()
}
 

最新文章

  1. Sublime 3 如何配置SVN插件
  2. 【读书笔记】iOS-开发技巧-三种收起键盘的方法
  3. Linux-NTP-Server+Client
  4. OpenStack:安装Neutron与provider network
  5. jackson基于注解的简单使用
  6. 根据id设置、获取元素的文本和value
  7. 【C语言】单片机上的按键检测框架
  8. Egret index.html设置
  9. 7. leetcode 104. Maximum Depth of Binary Tree
  10. Vue相关(过渡动画)
  11. 在外围获取APP的机密信息
  12. printf 函数原型
  13. 记录ok6410 jlink 命令行调试uboot
  14. Auth模块使用方法大全
  15. windows安装 centos
  16. 【leetcode】7-ReverseInteger
  17. spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比 (附:遇到的坑)
  18. mysql 回顾
  19. 【转】修复关于apache-xampp的问题:Port 443 in use by “vmware-hostd.exe”!
  20. (转载)Ubuntu下安装Qt

热门文章

  1. CSS躬行记(10)——CSS方法论
  2. JAVA知识总结(三):继承和访问修饰符
  3. RabbitMQ的发布订阅模式(Publish/Subscribe)
  4. HMM-维特比算法理解与实现(python)
  5. threading模块—Python多线程编程
  6. Linux常用命令~新手必知
  7. 黑马程序员_毕向东_Java基础视频教程——位运算符(随笔)
  8. 科技感满满,华为云DevCloud推出网页暗黑模式
  9. Python 常用编码规范
  10. 整理今天js留下的作业(点击换图片换首页背景图)