【IC】NoC设计入门 -- 延迟 (Latency) 吞吐量 (Throughput)
延迟 (Latency) 和 吞吐量 (Throughput) 就是你设计的NoC的**“成绩单”**。
你设计了“城市地图”(拓扑)、“GPS导航”(路由)、“交通规则”(流控),现在我们要看看,你设计的这个“交通系统”“跑得快不快”、“堵不堵车”。
我们还是用“城市交通”的比喻来彻底讲透这两个概念。
1. 🚀 延迟 (Latency):一个“包裹”送达有多快?
- 比喻: 你(在(0,0)的家)点了一份外卖(来自(3,3)的餐厅)。“延迟”就是指,从“餐厅接单”到“你收到外卖”,总共花了多少时间。
 - NoC 的定义: 指一个“数据包”(Packet)的“头”(Head Flit)从源头NI(网络接口)成功“注入”(inject)网络开始,直到这个包的“尾”(Tail Flit)被目标NI成功“接收”(eject)为止,所花费的总时间(通常以时钟周期 
cycles为单位)。 - 你作为设计师要问: “我的数据,多久能到?”(越低越好)
 
“延迟”的时间都花在哪里了?
当你分析“外卖为什么这么慢”时,你会发现时间花在了:
- 餐厅打包时间(NI的打包延迟)
 - 路上开车时间(在“街道”上的传输延迟)
 - 等红绿灯/过路口时间(在“路由器”中的处理延迟)
 - 堵车排队时间(在“路由器”的FIFO中等待的延迟)
 
在NoC中,这个总延迟(Total Latency)主要由两部分构成:
- 
A. 零负载延迟 (Zero-Load Latency):
- 比喻: 凌晨3点的城市,马路上一辆车都没有。你从(0,0)开车到(3,3),需要的时间。
 - 含义: 这是你的NoC能达到的**“理论最快速度”**。
 - 它只取决于**“固定成本”**:
- NI的打包/拆包时间(固定的几个周期)。
 - 物理距离:你要经过多少个“十字路口”(Hop Count)。
 - 路口处理时间:每过一个“路口”(路由器),固定要花的时间(比如问路、仲裁、过立交桥,可能总共要3-5个周期)。
 - 街道行驶时间:Flit在两个路由器之间的“街道”(Link)上传输的时间(通常是1个周期)。
 
 零负载延迟 ≈ NI时间 + (路口处理时间 + 街道时间) * 距离(Hops)
 - 
B. 拥塞延迟 (Contention Latency):
- 比喻: 早高峰。虽然你还是走一样的路,但每个路口你都在排队。
 - 含义: 这是因为“共享资源”(街道、路口出口)被其他“车队”占用了,你被迫等待所额外花费的时间。
 - 这正是“仲裁器”(Arbiter)和“FIFO缓冲区”发挥作用的地方。你排队等待的时间,就是拥塞延迟。
 
 
总延迟 = 零负载延迟 + 拥塞延迟
2. 🚛 吞吐量 (Throughput):整个“城市”有多能“扛”?
- 比喻: 你的“城市交通系统”总共有多大的运力?是只能跑1万辆车的小县城,还是能跑100万辆车的大都市?
 - NoC 的定义: 整个网络在单位时间内(比如每秒,或每周期)总共能成功传输多少“货物”(数据,通常以 
bits/sec或Flits/cycle为单位)。 - 你作为设计师要问: “我的网络总共能‘扛’住多大的‘流量’?”(越高越好)
 
关键概念:“饱和点” (Saturation Point)
吞吐量不是一个“固定值”,它取决于你“注入”(Injection)了多少流量。
- 比喻:
- 凌晨3点,每分钟只有10辆车上路。你的“交通系统”轻轻松松,实际吞吐量 = 10辆/分钟。
 - 早上7点,每分钟有1000辆车上路。系统也扛得住,实际吞吐量 = 1000辆/分钟。
 - 早上8点(早高峰),每分钟有5000辆车想上路。但是你的“城市路网”设计(街道宽度、路口效率)决定了,最多每分钟只能处理3000辆车。
 - “3000辆/分钟” 就是你的“最大吞吐量”,也叫**“饱和吞吐量”**。
 - 当你想注入5000辆时,你的网络已经“饱和”了,多出来的2000辆车会无限期地堵死在“入口”(或者说,导致整个城市的延迟急剧飙升)。
 
 
3. 📈 黄金关系:延迟 vs. 吞吐量(“冰球棍”曲线)
这两个指标不是孤立的,它们是NoC性能最重要的一张图,长得像一个**“冰球棍” (Hockey Stick)**。
- X轴: 你注入的流量(吞吐量)
 - Y轴: 对应的平均延迟
 
- 
“杆身” (Handle):
- 在低流量时(X轴很低),“交通”很顺畅。
 - 延迟非常低,基本等于“零负载延迟”(Y轴很低)。
 - 你注入多少,系统就处理多少(吞吐量 = 注入量)。
 
 - 
“拐点” (Knee):
- 随着流量增加(X轴向右),“拥堵”开始出现(Contention Latency)。
 - 延迟开始缓慢爬升(Y轴开始抬头)。
 
 - 
“杆头” (Blade):
- 当流量达到某个点(饱和点)时,系统“扛不住”了。
 - 延迟会“指数级”飙升(Y轴垂直向上),趋近于无限大。
 - 此时X轴对应的值,就是你的**“最大吞吐量”**。
 
 
你的设计目标:
- 降低“杆身”: 尽量降低“零负载延迟”(比如优化路由器内部逻辑,让它处理更快)。
 - 推高“拐点”: 尽量提高“饱和点”(比如用“自适应路由”分流,用“虚拟通道”减少阻塞),让你的网络能“扛”住更大的流量。
 
总结:我们的“理论课”如何影响“成绩单”?
你之前学的所有理论,都会在这张“成绩单”上体现出来:
- 拓扑 (Topology):
Mesh:由于“距离”可能很长(Hop多),“零负载延迟”(杆身)可能比较高。
 - 路由 (Routing):
XY路由:简单,但可能在“拐角”处(比如所有流量都汇聚到右上角)造成拥堵,导致“饱和点”(拐点)提前到来。自适应路由:能绕开拥堵,推高“饱和点”,提升最大吞吐量。
 - 流控 & 路由器设计:
大FIFO (大停车场):能“吸收”突发的流量,推高“饱和点”。但FIFO越大,路由器面积越大,成本越高。队头阻塞 (HoL Blocking):我们之前提过,它会无故增加“拥塞延迟”,让延迟曲线更早“抬头”。- 死锁 (Deadlock): 如果你的设计有死锁,那谈不上性能了。吞吐量会降为0,延迟变为无限大,系统瘫痪。
 
 
