NoC组件之Router微架构解析(八)虚通道分配的延迟优化

📅 2026/6/16 3:25:56
NoC组件之Router微架构解析(八)虚通道分配的延迟优化
Chapter 8: High-Speed Allocators for VC-Based Routers本文版权归作者所有任何形式的转载都请注明出处本章在第 7 章的基础上进一步优化电路结构追求更高的主频。8.1 限制自由度降低 VA 的复杂度如 Fig 8.1 所示若限制 flit 包传递只能在特定的 VNVirtual Network中传输可以将 VA 拆分成多个小规模的电路分别负责 NV/k 段的 VC 分配其中 k 为 VN 数量。若 flit 包传递过程中不允许改变 VC那么整个 VA1 逻辑会消失。8.2 预先计算 VA1Lookahead VA1如 Fig 8.2 所示可以将 VA1 提前到上一 hop即 LVA1提前计算出下一 hop 的 outVC并随 flit 传递。此时LVA1 不在关键路径上可以和 VA2 或者 SA 并行计算。但是由于不清楚下一 hop 输出 VC 是否可用导致携带的 outVC 信息无法更改——在多个 inVC 竞争一个 outVC 时只能排队等待。当然也可以将 LVA1 提前到写入 RxBuffer 前计算便于获得outVCAvailable信息。但是这种方式的 LVA1 仍在关键路径上需要考虑到达 RxBuffer 之前的路径是否满足时序要求。总之此方法是以「扩充 flit 域段」和「可能导致吞吐下降」为代价换取「主频提升」。8.3 去掉 VA2VA2 的作用是匹配 inVC 与 outVC可以通过将 outVC 分配给 SA 胜出者以消除 VA2。以下给出 3 种电路结构VA1 与 SA 串行执行VA1筛选每个 inVC 输入的请求每个 inVC 选择一个空闲且有信用的 outVC。SA1每个 inPort 仲裁出来自唯一一个 inVC 的请求。SA2每个 outPort 仲裁出一个 inPort 授权返回 Granted。VA1 与 SA 并行执行因为进入 SA 只需要知道请求的 outPort 内存在可用的 outVC 即可不需要知道具体是哪一个 outVC所以 SA 没必要等待 VA1 执行结果。LVA1提前已知唯一请求的 outVC若该 outVC 空闲且信用足够即可进入 SA同时计算下一 hop 的 VA1。8.4 投机执行 SASpeculative SA不管 VA 是否成功分配投机地执行 SA可以切断 VA 与 SA 的依赖关系。此时存在以下 4 种情况VA 仲裁失败SA 仲裁失败下一 Cycle 重试。VA 仲裁获胜SA 仲裁失败不投机存在竞争保留 VA 仲裁结果下一 Cycle 重试 SA。VA 仲裁失败SA 仲裁成功投机失败代价是本次轮空。VA 仲裁成功SA 仲裁成功投机成功在流量较小的场景下投机成功概率较高。为了降低投机失败的概率如 Fig 8.4 所示可以做两套 SA 逻辑一个只接收投机请求未分配 VC 的 Head另一个只接收非投机请求已经分配过 VC 的 Head 或 Body/Tail。给非投机 SA 更高优先级——当存在一对相同 Input-Output 配对的 SA 仲裁成功时屏蔽投机结果以保证获胜 flit 总能通过。如何保证非投机 SA 输出屏蔽掉投机 SA 输出利用一个状态矩阵free(i, j)若free(i, j) 1表示非投机 SA 未输出Input[i]和Output[j]的 Granted。利用free(i, j)矩阵作为掩码屏蔽掉非投机 SA 结果后再输入投机 SA。当然可以采用更悲观的投机策略——不需要得到非投机 SA 的结果再实行投机 SA而是直接用非投机 SA 的输入作为掩码无论非投机是否仲裁获胜该Input[i]-Output[j]配对一定不再执行非投机 SA。当流量较小时后者执行非投机时由于竞争少获胜概率较高若流量较大非投机更容易失败会导致投机 SA 过度被屏蔽。8.5 Switch 输入端口扩展上述所有的结构基于 Switch 输入侧每个 Cycle 只允许来自同一 inPort 的 1 个 VC 通过。如 Fig 8.6 所示可以扩展 Switch 的输入 N 为m × N使得每 Cycle 同一 inPort 可以输出 m 个 flit。若不允许跳转 VC则不需要 VA那么每个 VC 可以单独做 SA 仲裁如 Fig 8.7 所示。