https://mp.weixin.qq.com/s/nSX4prXFb4K5GSUhPtOUCg
简单介绍Crossing的实现。
1. IntXing
这是一个LazyModule:
1) 参数
a. sync:表示同步所需要的时钟周期数。
b. p:隐式参数,表示外部配置;
2) diplomacy node
用于与其他diplomacy node连接以及协商参数的节点,在这里是一个适配器节点:
3) lazy module
lazy module用于实现IntXing的内部逻辑:
A. 成对的输入边和输出边
B. 实现Crossing逻辑
这里直接使用SynchronizerShiftReg接收in的输入,并输出到out:
2. IntSyncCrossingSource
1) class
class IntSyncCrossingSource是一个LazyModule:
A. 参数alreadyRegistered表示输入in是否已经过一个异步复位寄存器;
B. node为diplomacy节点;
C. lazy module实现IntSyncCrossingSource节点的逻辑;这里使用异步复位寄存器把输入in的数据输出到out;
2) object
伴生对象用于创建一个IntSyncCrossingSource,并返回其中的diplomacy node,以与其他节点连接:
3. IntSyncCrossingSink
用于创建一个下游LazyModule:
1) 参数sync:上游到下游的Crossing所需要的时钟周期数;
2) diplomacy node:IntSyncSinkNode类型的下游节点;
3) lazy module:使用同步移位寄存器(SynchronizerShiftReg)实现Crossing逻辑;
4. CrossingHelper
1) IntInwardCrossingHelper
为参数node,根据ClockCrossingType生成相应的Crossing连接。其中,参数node作为下游节点:
2) IntOutwardCrossingHelper
为参数node,根据ClockCrossingType生成相应的Crossing连接。其中,参数node作为上游节点:
5. 附录
略