Chisel3 - model - Builder

 
介绍构建硬件模型的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()
}
 
posted @ 2019-01-06 09:50  wjcdx  阅读(480)  评论(0编辑  收藏  举报