https://mp.weixin.qq.com/s/HgUpTCh0D94Uymj5qQk-ag
介绍NodeImp相关基础类的实现。
1. 类图
节点实现(NodeImp)的基础类主要有:
a. InwardNodeImp:内向节点实现;
b. OutwardNodeImp: 外向节点实现;
c. NodeImp:节点实现,同时混入了InwardNodeImp和OutwardNodeImp;
d. SimpleNodeImp:简单节点实现;
2. InwardNodeImp
内向节点实现,其定义如下:
a. edgeI: 把DI和UI参数转变为一个EI,即Edge的类型;
b. bundleI:把Edge(EI)转变为一个Bundle类型(BI);
c. monitor:目前没有使用;
d. render:定义如何渲染Edge(EI)的逻辑,比如确定颜色(colour);
e. mixI:从UI到UI,把node的信息加入到UI参数中;
3. OutwardNodeImp
外向节点实现,其定义如下:
a. edgeO:把DO和UO参数转变为一个EO,即Edge类型;
b. bundleO:把Edge(EO)转变为一个与下游节点连接的实际Bundle类型(BO);
c. mixO:从DO到DO,把node的信息加入到DO参数中;
d. getI:目前没有使用;
4. NodeImp
节点实现,其定义如下:
a. 同时混入InwardNodeImp和OutwardNodeImp,意味着既是内向节点实现,也是外向节点实现;
b. 把DI/DO, UI/UO, BI/BO统一为D,U,B类型;
c. EI/EO仍然是分开的;
5. SimpleNodeImp
简单节点实现,其定义如下:
相较于NodeImp,这里把EI/EO也统一为E。
并且提供了初步的实现:
a. 把edgeI/edgeO都通过调用edge()实现,因为EI/EO都是E;
b. 把bundleI/bundleO都通过bundle()实现,因为BI/BO都是B;
6. 实例:AXI4Imp
1) AXI4Imp继承自SimpleNodeImp,所以只有一组D/U/E/B参数,没有再进一步对其做I/O区分;即:
D: AXI4MasterPortParameters
U: AXI4SlavePortParameters
E: AXI4EdgeParameters
B: AXI4Bundle
2) edge()实现:根据D/U和参数p,生成一个Edge:
其中包含一个bundle成员变量;
3) bundle()实现:根据Edge的信息,返回一个AXIBundle:
4) 实现mixI()/mixO():把node加入到nodePath中;