Chapter 7: Baseline Virtual-Channel Based Switching Modules and Routers本文版权归作者所有任何形式的转载都请注明出处本章给出一个多 VC 的 N-to-1 基本结构如 Fig 7.1 所示。该结构的特性N 个输入口每个输入口有 V 个 VC输出口为寄存器下一 hop 的输入为多个 VC 并行的 Buffer输入仲裁为两级仲裁第一级为每个输入口的多个 VC 仲裁第二级为各输入口之间的仲裁creditCounter[i]用于输出VC[i]的信用计数outVCAvailable[i] 1表示输出VC[i]空闲由于实现了多 VC Buffer不同VCid的 flit 支持交织传输可避免头阻塞若协议层/算法未做限制则 VC 可以自由分配如为避免死锁会限制 VC 分配规则来自同一 Packet 的 Head、Body 和 Tail 必须走相同 VC 输出每个 VC 需要outVC[i]和outVCLock[i]实现 outVC 独占。outVC[i]用于寄存独占的outVCidoutVCLock[i]表示outVC[i]有效Head 置 1Tail 清 0。虚通道分配VA请求 VCHead 产生一个candidateOutVC[i][V-1:0]生成请求reqVC[i]——可以申请多个 VC但最终只会被分配 1 个。同时一个 VC 一次只能分配给一个输入。分配 VC未被分配的空闲 VC 用outVCAvailable表示在候选且空闲的 VC 中选出一个 VC 输出VCGranted[i]和selOutVC[i]寄存在outVC[i]并置位outVCLock[i]表示outVC[i]被当前Input[i]占用并屏蔽同一包的 Body/Tail 再次申请 VC。Tail flit 通过时清除outVCLock[i]释放 VC。仲裁第一级仲裁器VA1每个 inVC 从候选 outVC 中选择一个。第二级仲裁器VA2每个 outVC 从多个请求者中选择一个。输出通道分配SA请求输出通道SAreq[i]需要满足以下三个条件Input[i].valid 1outVCLock[i] 1creditCounter[i] 0输出通道仲裁inputGrantSA[i]产生 Ready 握手弹出 flit同时更新前一 hop 的 Credit CounterinputVCSelect[k]用于仲裁来自同一输入的不同 VCoutputSelect用于仲裁不同的输入flit data 中的VCid域段需要更新。仲裁第一级仲裁器SA1inPort 内部仲裁选择一个 inVC 晋升下一级 SA2 仲裁。第二级仲裁器SA2outPort 全局仲裁从所有 SA1 的获胜者中选择一个连接到输出。关于 VA 和 SA 的仲裁器仲裁权重更新最好等 SA2 仲裁一轮后再更新 SA1可以保证每个 inVC 都经过 (N-1) 个 Cycle 被仲裁到。输出优先仲裁即调换 SA1 和 SA2先全局仲裁输出口再局部仲裁得到获胜inVC。相对于输入优先输出优先的性能较好但电路实现的表现较差论文 “Becker D U, Dally W J. Allocator implementations for network-on-chip routers. ACM, 2009:1. DOI:10.1145/1654059.1654112.” 得出的结论。扩展为 N-to-N 的多 VC 路由结构如 Fig 7.8 所示。RC路由计算如 Fig 7.9 所示有两种实现方式每个 VC 配一套 RC 逻辑同一个 inPort 的所有 VC 共用一套 RC 逻辑因为每个 Input 同一时刻只能仲裁出一个 VC。VAVC分配如 Fig 7.11 所示inVC 需要提供目标输出端口和 VC 的请求reqPort[i]和reqVC[i]Head flit 时仲裁 VCBody/Tail flit 依靠outPort[i]和outVC[i]寄存。inVC[i]可以并行地分配给outVC[i]其中outVC[i]可以是属于相同 outPort 的不同 VC也可以是属于不同 outPort 的相同 VC。SASwitch通道选择如 Fig 7.11 所示进入 SA 需要满足以下条件输入有效valid 1已分配 VCoutVCLock[i] 1outVC 信用充足ready[outPort[i]][outVC[i]] 1。如 Fig 7.12(a) 所示每 Cycle 的仲裁逻辑如下每行每列只能 1 bit 获得 Granted一个 outVC 只能与一个 inVC 两两配对属于index i ÷ V的 inVC 只能有 1 个获得 Granted。仲裁逻辑VA如 Fig 7.13 所示VA1 在每个 inVC 申请的 outVC 中筛选出一个可用的VA2 在申请同一个 outVC 的多个输入中仲裁出一个返回 Granted。其中为了对齐 VA2 仲裁输入位宽需要利用reqPort[i]和reqVC[i]做 deMUX。如 Fig 7.14 所示每个 inVC 可以增加 N 个并列的仲裁器则 VA1 阶段输出的位宽天然为 N×V不需要额外的 deMUX——面积换时序。SA如 Fig 7.15 所示SA1 为每个 inPort 内部先仲裁出唯一的 inVC每个 inPort 使用 Switch 的一个输入接口同一个 inPort 每 Cycle 只能出一个 VCSA2 整合同一 Output 的请求并仲裁出唯一的 inVC 获得 Granted。如 Fig 7.16 所示SA1 阶段每个 Input 内部筛选出一个SA2 阶段再在其中为每个 outPort 筛选出一个。可见这种仲裁方式存在利用率浪费但若实现性能更优的仲裁算法如多次迭代查找等必然会产生延迟或面积上的额外代价。某些算法在提升利用率的同时可能会牺牲公平性导致饥饿。整合 VA SA 的仲裁结构原理将所有请求和资源用一个矩阵表示如 Fig 7.17 所示的Wavefront Allocation——每行每列仲裁出 1 bit通过矩阵形式输出 Granted。电路结构如 Fig 7.18 所示通过一个 NV×NV 大小的矩阵一次性仲裁出结果也可以如 Fig 7.19 所示通过一个 N×N 大小的矩阵先仲裁出 inPort再在 Input 内部仲裁出 VC。
(七)Baseline Virtual-Channel Based Switching Modules and Routers
发布时间:2026/6/16 7:54:04
Chapter 7: Baseline Virtual-Channel Based Switching Modules and Routers本文版权归作者所有任何形式的转载都请注明出处本章给出一个多 VC 的 N-to-1 基本结构如 Fig 7.1 所示。该结构的特性N 个输入口每个输入口有 V 个 VC输出口为寄存器下一 hop 的输入为多个 VC 并行的 Buffer输入仲裁为两级仲裁第一级为每个输入口的多个 VC 仲裁第二级为各输入口之间的仲裁creditCounter[i]用于输出VC[i]的信用计数outVCAvailable[i] 1表示输出VC[i]空闲由于实现了多 VC Buffer不同VCid的 flit 支持交织传输可避免头阻塞若协议层/算法未做限制则 VC 可以自由分配如为避免死锁会限制 VC 分配规则来自同一 Packet 的 Head、Body 和 Tail 必须走相同 VC 输出每个 VC 需要outVC[i]和outVCLock[i]实现 outVC 独占。outVC[i]用于寄存独占的outVCidoutVCLock[i]表示outVC[i]有效Head 置 1Tail 清 0。虚通道分配VA请求 VCHead 产生一个candidateOutVC[i][V-1:0]生成请求reqVC[i]——可以申请多个 VC但最终只会被分配 1 个。同时一个 VC 一次只能分配给一个输入。分配 VC未被分配的空闲 VC 用outVCAvailable表示在候选且空闲的 VC 中选出一个 VC 输出VCGranted[i]和selOutVC[i]寄存在outVC[i]并置位outVCLock[i]表示outVC[i]被当前Input[i]占用并屏蔽同一包的 Body/Tail 再次申请 VC。Tail flit 通过时清除outVCLock[i]释放 VC。仲裁第一级仲裁器VA1每个 inVC 从候选 outVC 中选择一个。第二级仲裁器VA2每个 outVC 从多个请求者中选择一个。输出通道分配SA请求输出通道SAreq[i]需要满足以下三个条件Input[i].valid 1outVCLock[i] 1creditCounter[i] 0输出通道仲裁inputGrantSA[i]产生 Ready 握手弹出 flit同时更新前一 hop 的 Credit CounterinputVCSelect[k]用于仲裁来自同一输入的不同 VCoutputSelect用于仲裁不同的输入flit data 中的VCid域段需要更新。仲裁第一级仲裁器SA1inPort 内部仲裁选择一个 inVC 晋升下一级 SA2 仲裁。第二级仲裁器SA2outPort 全局仲裁从所有 SA1 的获胜者中选择一个连接到输出。关于 VA 和 SA 的仲裁器仲裁权重更新最好等 SA2 仲裁一轮后再更新 SA1可以保证每个 inVC 都经过 (N-1) 个 Cycle 被仲裁到。输出优先仲裁即调换 SA1 和 SA2先全局仲裁输出口再局部仲裁得到获胜inVC。相对于输入优先输出优先的性能较好但电路实现的表现较差论文 “Becker D U, Dally W J. Allocator implementations for network-on-chip routers. ACM, 2009:1. DOI:10.1145/1654059.1654112.” 得出的结论。扩展为 N-to-N 的多 VC 路由结构如 Fig 7.8 所示。RC路由计算如 Fig 7.9 所示有两种实现方式每个 VC 配一套 RC 逻辑同一个 inPort 的所有 VC 共用一套 RC 逻辑因为每个 Input 同一时刻只能仲裁出一个 VC。VAVC分配如 Fig 7.11 所示inVC 需要提供目标输出端口和 VC 的请求reqPort[i]和reqVC[i]Head flit 时仲裁 VCBody/Tail flit 依靠outPort[i]和outVC[i]寄存。inVC[i]可以并行地分配给outVC[i]其中outVC[i]可以是属于相同 outPort 的不同 VC也可以是属于不同 outPort 的相同 VC。SASwitch通道选择如 Fig 7.11 所示进入 SA 需要满足以下条件输入有效valid 1已分配 VCoutVCLock[i] 1outVC 信用充足ready[outPort[i]][outVC[i]] 1。如 Fig 7.12(a) 所示每 Cycle 的仲裁逻辑如下每行每列只能 1 bit 获得 Granted一个 outVC 只能与一个 inVC 两两配对属于index i ÷ V的 inVC 只能有 1 个获得 Granted。仲裁逻辑VA如 Fig 7.13 所示VA1 在每个 inVC 申请的 outVC 中筛选出一个可用的VA2 在申请同一个 outVC 的多个输入中仲裁出一个返回 Granted。其中为了对齐 VA2 仲裁输入位宽需要利用reqPort[i]和reqVC[i]做 deMUX。如 Fig 7.14 所示每个 inVC 可以增加 N 个并列的仲裁器则 VA1 阶段输出的位宽天然为 N×V不需要额外的 deMUX——面积换时序。SA如 Fig 7.15 所示SA1 为每个 inPort 内部先仲裁出唯一的 inVC每个 inPort 使用 Switch 的一个输入接口同一个 inPort 每 Cycle 只能出一个 VCSA2 整合同一 Output 的请求并仲裁出唯一的 inVC 获得 Granted。如 Fig 7.16 所示SA1 阶段每个 Input 内部筛选出一个SA2 阶段再在其中为每个 outPort 筛选出一个。可见这种仲裁方式存在利用率浪费但若实现性能更优的仲裁算法如多次迭代查找等必然会产生延迟或面积上的额外代价。某些算法在提升利用率的同时可能会牺牲公平性导致饥饿。整合 VA SA 的仲裁结构原理将所有请求和资源用一个矩阵表示如 Fig 7.17 所示的Wavefront Allocation——每行每列仲裁出 1 bit通过矩阵形式输出 Granted。电路结构如 Fig 7.18 所示通过一个 NV×NV 大小的矩阵一次性仲裁出结果也可以如 Fig 7.19 所示通过一个 N×N 大小的矩阵先仲裁出 inPort再在 Input 内部仲裁出 VC。