Rocket - interrupts - Xbar

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

 

简单介绍Xbar的实现。

 

 

1. 简单介绍

 

IntXbar主要用于把上游多个中断源的中断组合在一起,然后与下游相连接。

 

2. diplomacy node

 

diplomacy node用于与上下游节点连接,并与上下游节点协商参数。

IntXbar中的节点是一个IntNexusNode:

 

1) sinkFn

 

sinkFn就是uFn,就是把参数向上游传递的函数。这里用于把IntXbar看到的下游节点的参数向上游节点传递,转换为上游节点看到的IntXbar的参数。

 

这里不管下游节点的参数如何,都向上游传递一个默认的下游参数。

 

2) sourceFn

 

sourceFn就是dFn,就是把参数向下游传递的函数。这里用于把IntXbar看到的上游节点的参数向下游节点传递,转换为下游节点看到的IntXbar的参数。

a. seq是与intnode节点相连的输入边的IntSourcePortParameters;

b. seq.map(_.num).scanLeft(0)(_ + _).init汇总和offset平移用于把中断号重新编排:

c. 把seq中的所有IntSourcePortParameters摊平成为一个IntSourcePortParameters。一个IntSourcePortParameters中的所有中断源的中断区间是不重叠的,多个IntSourcePortParameters之间不重叠则需要重新编排来保证;

d. 根据NexusNode的特点,sourceFn把所有输入边的IntSourcePortParameters转换为一个IntSourcePortParameters;然后再把这个IntSourcePortParameters复制成n份(输出边的条数),供每个输出边使用。

e. 也就是说,每个输出边都包含所有输入边传入的中断信号;

 

3. lazy module

 

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

 

这里是把输入边输入的全部信号归并到一起,同输出边相连:

 

1) 所有输入边一起使用,而不是成对的输入边和输出边逐个使用

 

把所有输入边的中断信号组合在一起,成为cat:

 

2) 把组合后的中断向量,灌入每一个输出边

 

 

4. 伴生对象

 

用于简化IntXbar的创建,输出xbar.intnode用于与其他节点连接:

 

5. 附录

 

 

 

 

 

posted @ 2019-10-03 07:55  wjcdx  阅读(373)  评论(0编辑  收藏  举报