https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w

简单介绍TLDebugModuleInnerAsync的实现。

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

1. dmInner

dmInner是TLDebugModuleInnerAsync内部的一个子模块。其中又包含多个子节点。

1) dmiNode

dmiNode是一个寄存器节点:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

2) tlNode

tlNode也是一个寄存器节点:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

3) sb2tlOpt

sb2tlOpt是一个把系统总线转换为tilelink总线的转换模块:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

4) customNode

customNode是一个自定义节点:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

5) io

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

6) 结构图

总体结构图如下:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

2. dmiXing

dmiXing是一个TLAsyncCrossingSink节点,用于实现跨域逻辑:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

3. dmiNode

dmiNode是dmiXing.node的别名:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

4. tlNode

tlNode是dmInner.tlNode的别名。

5. 连接跨域逻辑

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

6. lazy val module

lazy val module用于实现TLDebugModuleInnerAsync的内部逻辑。

1) io

模块定义了单独的IO:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

结构示意图如下:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

2) dmactive_synced

使用io.dmactive和io.psd生成的同步之后的dmactive信号:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

PS.这里有机会再细究。

3) gated_clock

根据dmactive_synced生成的一个门控时钟:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

如果配置参数中clockGate为假,则不使用门控。

PS.这里有机会再细究。

4) 指定时钟

使用withClock指定使用gated_clock为时钟,生成一段连接逻辑:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

PS.这里有机会再细究。

7. 总体结构

TLDebugModuleInnerAsync的总体结构示意图(可以单独打开图片查看)如下:

Rocket - debug - TLDebugModuleInnerAsync-LMLPHP

05-26 23:24