NP路由器——OE要点整理
NP路由器—OE要点整理
实习期间开始学习的NP路由器的部分要点,准备把做的笔记一点点整理出来~可能有很多地方整理得不够清晰,毕竟本人也只是刚开始学习,还望海涵。
OE的保序功能
- 当NP有空闲线程时,IQM会送新包给NP,并且产生一个PAC_ID。
- PBA同时将PAC_ID注册到OE队列,完成“取号”动作
- NP多个线程可以同时处理不同的报文,最后发送Transmit指令给OE
1)如果有需要也可以“插队”
①可以将当前PAC_ID切换至其他有序流的队尾;
②直接切换至无序流,报文直接调度出队。
2)OE始终调度有序流队首的PAC_ID,直至队列为空; - OE将发送dispatch命令行给IQM,完成报文的发送。
常用名词
有序流和无序流示意图
有序流示意图:
无序流示意图:
OE处理命令
Command | Description |
---|---|
Bind | 注册新的Packet ID到有序流队列;该命令只由PBA硬件发起,Atom不能发起该命令给OE。 |
ChangeFlow | 变更有序流队列。将Packet ID从一条流注册到另外一条流。 |
OrderedAccess | 协处理器顺序访问。对访问协处理器的命令排队,OE确保命令按有序流队列中的正确顺序排队。当命令入队时OE将报文重新指定到新的有序流队列,因此,该命令与ChangeFlow命令相似。 |
TransmitUcast | 发送单播报文或最后一份组播复制报文。当Atom线程发送此命令给OE后,该线程无需等待OE响应直接被释放,可以接收新的报文进行处理。 |
TransmitUcast with NPR | 指示当前报文需要进行NP复制。其他跟TransmitUcast命令一样。 |
Flush | 发送Discard标识置位的Dispatch命令给IQM以删除报文。对于有序流队列,当报文位于有序流队列的头部时,从有序流队列中删除该报文。该命令还可以用来删除Timeout FIFO中位于头位置的报文。(处理超时/或特殊情况的报文) |
超时事件处理过程
- 控制平面响应中断(也可用查询方式),读取中断寄存器发现超时报警。
- CPU暂时屏蔽Timeout中断。确保Flush动作完成后再开启,避免整个流程被中断。
- 该步骤可选。如果检测到超时,可根据需要通过读超时信息寄存器获取超时的报文ID和流序号。
- CPU可以构造Flush命令来删除Timeout FIFO头部的PAC_ID。
- CPU通过轮询RBA寄存器检测Flush命令是否成功到达OE。
- CPU清除Timeout中断状态,再打开Timeout中断使能开关。