我们已经讲完了NoC的“宏观”理论(地图、导航、交通规则)。现在,我们要用“显微镜”来观察这个城市中最重要的单元——“智能十字路口”(路由器)——它内部是如何运转的。
我们来把这个“十字路口”拆开,看看每个“零件”是干什么的。
为了方便理解,我们假设这是一个Mesh(棋盘式)路网中的一个“十字路口”。它有5个入口和5个出口:
- 入口:东、南、西、北、本地 (Local,来自它所连接的CPU核)
- 出口:东、南、西、北、本地 (Local,去往它所连接的CPU核)
典型路由器的微架构 (The 5 Key Components)
想象一下,你就是这个“十字路口”的总设计师。
1. 输入端口 (Input Ports)
- 比喻: 到达十字路口前的**“待转区”或“停车场”**。
- 作用: 这是“车队”(Flits)抵达路口后,第一个停靠的地方。
- 核心组件: FIFO (First-In, First-Out) 缓冲区。
- 为什么必须有它? “车队”A(来自北边)和“车队”B(来自西边)可能同时到达路口,并且都想去“东边”。“东边”的出口一次只能走一辆车。
- 总得有一个“车队”需要排队等待。这个“待转区”(FIFO) 就是给它们排队用的。
- 与流控的关系: 这就是我们上一节课讲的“信用流控”里的那个**“停车场”**!
- 这个Input Port负责管理自己的FIFO。
- 当它快满的时候,它就不会再给“上游”的路口发送“信用”(Credit)。
- 当它空出一个位置时,它会给“上游”路口发送一个“信用”(Credit)。
2. 路由逻辑 (Routing Logic, RC)
- 比喻: 路口旁边的**“问询处”或“导航AI”**。
- 作用: 它只关心一个问题:“这列火车(车队)的下一站去哪?”
- 工作流程:
- 当一个**“火车头”(Head Flit)** 到达“待转区”(Input Port)时,它会被“复制”一份发给“问询处”(Routing Logic)。
- “问询处”查看“火车头”上的“目的地地址”。
- “问询处”执行我们学过的**“路由算法”**(比如 XY 路由)。
- 举例: 路口在(1,1),“火车头”的目的地是(3,2)。“问询处”的AI(XY算法)计算后得出:“X(1) < X(3),你必须去东边 (East)。”
- “问询处”把这个**“出口请求”(“我想去东!”)**发送给“仲裁器”。
- 注意: 这个“问询”动作只对“火车头”做一次。后面紧跟的“车身”(Body Flits) 和“车尾”(Tail Flit) 不需要再问路,它们会自动跟随“火车头”的路径。
3. 仲裁器 (Arbiter)
- 比喻: 十字路口中央的**“交通警察”**。
- 作用: 它的存在是为了**“解决冲突”**。
- 工作流程:
- 场景: 在同一个时刻,“北边”的Input Port(在“问询处”的帮助下)举手:“我想去东!”;“西边”的Input Port也举手:“我也想去东!”
- 冲突发生! “东出口”只有一个,“交警”(Arbiter) 必须决定谁先走。
- 仲裁算法: “交警”会使用一个公平的算法。最常见的叫**“轮询”(Round-Robin)**。
- “上次是‘西’先走的,这次轮到‘北’了。”
- “交警”向“北边”的Input Port**“授权”**(Grant):“你走!”
- 同时告诉“西边”的Input Port:“你再等一个周期。”
4. 交换矩阵 (Switch Fabric / Crossbar)
- 比喻: 路口中央的**“立交桥”或“扳道岔”系统**。
- 作用: 它是物理上的“连接通道”。它负责把“交警”批准的路径“接通”。
- 结构: 想象一个 5×55 \times 55×5 的“开关网格”(这就是 Crossbar,交叉开关)。
- 它有5条“横向”的输入轨道(来自东、南、西、北、本地的Input Ports)。
- 它有5条“纵向”的输出轨道(去往东、南、西、北、本地的Output Ports)。
- 工作流程:
- “交警”(Arbiter) 刚刚“授权”了:“北 → 东”。
- “扳道岔系统”(Crossbar) 收到指令,立刻把“北输入”轨道和“东输出”轨道在物理上接通。
- “北边”待转区的“火车头”(以及它后面的“车身”)现在可以“开”过这个Crossbar,冲向“东出口”了。
- 关键: Crossbar可以同时接通多条不冲突的路径。比如,在“北→东”接通的同时,它完全可以也接通“西→南”、“本地→北”。
5. 输出端口 (Output Ports)
- 比喻: 离开路口的**“加速匝道”**。
- 作用: 它就是连接到“下一个”路口的物理“街道”(Link)。
- 功能: 它的功能相对简单,主要是把从Crossbar“冲”过来的Flit,发送给“下游”路口的Input Port。
- (进阶:在某些设计中,Output Port也可能包含一个小型缓冲区,用来“暂存”Flit,以优化时序,但这对于初学者来说不是重点。)
总结:一节“火车头” Flit 的完整旅程
我们把这五个组件串起来,看看一个“火车头”(Head Flit) 是如何“闯关”的:
- 抵达: “火车头”从“北街道”抵达,进入“北输入端口 (Input Port)”的FIFO“停车场”。
- 问路: “路由逻辑 (Routing Logic)”查看它的地址,决定它需要去“东出口”。
- 申请: “北输入端口”向“仲裁器 (Arbiter)”举手:“我申请去‘东出口’!”
- 排队: “仲裁器”发现“西输入端口”也在申请“东出口”,它使用“轮询”算法,决定让“北”先走。
- 接通: “仲裁器”通知“交换矩阵 (Crossbar)”:“把‘北输入’和‘东输出’接通!”
- 通过: “火车头”从FIFO中被“释放”,它“开”过Crossbar,从“东输出端口 (Output Port)”飞驰而出,奔向下一个“十字路口”。
- 跟随: 紧随其后的“火车车身”(Body Flits) 到达“北输入端口”后,跳过第2步(不再问路),直接重复3-6步,沿着“火车头”开辟的路径前进。
这“五脏六腑”的协同工作,构成了一个高效的“智能十字路口”。
1万+

被折叠的 条评论
为什么被折叠?



