Rocket

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. 附录

 

 

原文地址:https://www.cnblogs.com/wjcdx/p/11618991.html