Rocket - debug - TLDebugModuleInnerAsync
https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w
简单介绍TLDebugModuleInnerAsync的实现。
1. dmInner
dmInner是TLDebugModuleInnerAsync内部的一个子模块。其中又包含多个子节点。
1) dmiNode
dmiNode是一个寄存器节点:
2) tlNode
tlNode也是一个寄存器节点:
3) sb2tlOpt
sb2tlOpt是一个把系统总线转换为tilelink总线的转换模块:
4) customNode
customNode是一个自定义节点:
5) io
6) 结构图
总体结构图如下:
2. dmiXing
dmiXing是一个TLAsyncCrossingSink节点,用于实现跨域逻辑:
3. dmiNode
dmiNode是dmiXing.node的别名:
4. tlNode
tlNode是dmInner.tlNode的别名。
5. 连接跨域逻辑
6. lazy val module
lazy val module用于实现TLDebugModuleInnerAsync的内部逻辑。
1) io
模块定义了单独的IO:
结构示意图如下:
2) dmactive_synced
使用io.dmactive和io.psd生成的同步之后的dmactive信号:
PS.这里有机会再细究。
3) gated_clock
根据dmactive_synced生成的一个门控时钟:
如果配置参数中clockGate为假,则不使用门控。
PS.这里有机会再细究。
4) 指定时钟
使用withClock指定使用gated_clock为时钟,生成一段连接逻辑:
PS.这里有机会再细究。
7. 总体结构
TLDebugModuleInnerAsync的总体结构示意图(可以单独打开图片查看)如下: