https://mp.weixin.qq.com/s/THqyhoLbbuXXAtdQXRQDdA
介绍构建硬件模型的Builder。
1. DynamicContext
动态上下文,供构建硬件模型时,存放上下文状态信息。
2. Builder
Builder使用DynamicContext存储数据。供其他类获取和存储信息使用。
3. ClockAndReset
这里以clock和reset为例。
:
: 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. 附录
DynamicContext() {
IdGen
empty
= ArrayBuffer[Component]()
= ArrayBuffer[ChiselAnnotation]()
: Option[BaseModule] = None
// Set by object Module.apply before calling class Module constructor
// Used to distinguish between no Module() wrapping, multiple wrappings, and rewrapping
false
// Depth of when nesting
: Option[ClockAndReset] = None
ErrorLog
internal.naming.NamingStack
// Record the Bundle instance, class name, method name, and reverse stack trace position of open Bundles
, Int)] = ArrayBuffer()
}