本节摘要:访存请求离开缓存后就上了系统互连——它是片上世界的市政道路网,决定请求按什么规矩排队、走哪条车道、等多久。本节讲总线协议的三要素(通道、仲裁、握手),比较主流协议家族的分野,解释一致性请求为什么需要专门的特殊通道,并给出总线设计与调试的工程要点。
芯片工程师口中的"总线烂尾",指的是片上互连的带宽与仲裁设计跟不上主设备需求——表现为系统级性能远低于各 IP 核标称值之和,压力测试时延迟曲线陡峭爬升。这个词的存在提醒我们:核再快,路窄了全系统一起堵。互连是典型的"看不见但决定成败"的子系统,本章前三节优化的访存请求,最后都要从这条路上过。
任何片上总线协议都在回答三个问题:请求与响应怎么分道(通道)、多个主设备同时申请怎么裁决(仲裁)、主从双方怎么确认对方就绪(握手)。
通道分离是现代协议的标志性设计。读请求、读数据、写请求、写响应各自独立成道,读写可以流水重叠——相比老的共享通道设计,带宽利用率成倍提升。旗舰协议进一步把地址、数据、响应拆成五条独立通道,每条通道有自己的握手信号,事务可以在不同通道间交错推进。
仲裁决定谁先用路。固定优先级最简单,但低优先级设备可能被饿死;轮询公平,但紧急请求排队久;带权重的轮询在公平与紧急之间折中。仲裁器的延迟直接叠加进访存延迟,所以它必须是组合逻辑极浅的小电路——这又是一个时序谈判的经典小案子。
握手是可靠传输的基石:主设备发请求前看对方的就绪信号,从设备回数据前看主设备的接收信号,双方就绪的时钟沿上事务成立。看似啰嗦,它保证了不同速度的模块可以安全对接——快核配慢外设,握手自动插入等待,不需要任何一方知道对方的速度。

开源 RISC-V 生态里最常见的三张面孔:源自学界与开源社区的轻量协议(为教学与小系统而生,信号少、好理解)、工业界事实标准的高性能协议系列(五通道、读写并行、面向高带宽)、以及老一代的简单总线(低速外设的合适归宿)。选型的议价点大致三条:
延迟与吞吐的取舍。轻量协议路径短、延迟低,但并发能力有限;高性能协议用更深的流水与更多通道换带宽,单笔事务延迟反而可能更长。控制平面流量(配置寄存器读写)适合前者,数据平面流量(大块搬运)适合后者——所以真实系统级芯片经常两类混用,中间加协议桥转换。
集成生态。工业标准协议的从设备生态(各类控制器知识产权核)最丰富,接进来就能用;小众协议要自己写适配层。集成工程量也是钱,第二章的账单思维在这里同样适用。
验证复杂度。通道越分离、交错越自由,协议违例的组合空间越大。工业协议有成套的验证知识产权与断言集可以买,自研协议的验证环境要从零搭——这笔隐性成本在项目排期里经常爆雷。
| 维度 | 轻量教学系 | 工业高性能系 | 老代简单系 |
|---|---|---|---|
| 信号复杂度 | 低 | 高 | 极低 |
| 读写并发 | 有限 | 五通道全并行 | 无 |
| 单笔延迟 | 低 | 中 | 低但慢 |
| 适合挂什么 | 小系统的从设备 | 内存、高速外设 | 串口、定时器 |
4.4 将展开的缓存一致性协议,需要主设备之间互相打探"你这行缓存的数据新不新"。这类一致性事务与普通读写不同:它要求全系统对同一行的状态改动有序可见。为此,支持多核一致性的互连要提供专门的一致性端口或集线器——普通数据道与一致性道分轨运行,集线器负责把各核的探听与失效请求按可预期的顺序广播或转发。这就是"一致性集线器"这个部件存在的意义:它不是另一条路,而是路口的信号灯系统。
⚠️ 常见坑:总线级性能问题在核级仿真里看不出来。核级测试都命中缓存时互连零流量,一片歌舞升平;上板跑全系统负载,仲裁排队与通道争用立刻现形。互连必须在系统级场景下压测,第八章的性能调优演练会给出具体手法。
真实系统级芯片几乎必然混用几代协议——高性能内存挂在旗舰协议上,老外设挂在轻量协议上,中间的协议桥负责翻译。桥的账单要点有三:延迟,每次跨协议的事务要在桥里拆包重组,付出数拍到数十拍的过路费;带宽失配,两边协议宽度与并发度不同,桥里要用先进先出队列缓冲,深度不够就成瓶颈;语义翻译,一边有的特性(比如乱序完成)另一边没有,桥必须把乱序"整流"成按序,性能随之打折。工程经验:桥能少则少,高频流量尽量直挂原生协议,地址布局规划时就要想清楚每个设备的流量走哪条路、过几个桥。
问:总线位宽越宽越好吗? 宽度换带宽也换引脚与功耗。并行传输在板级受信号完整性约束(走线等长、串扰),片上受面积约束——现代设计宁可"窄而快"(高频串行链路)也不"宽而慢",所以高速组件间流行串行接口,低速控制仍用简单并行。
问:怎么判断我的系统瓶颈在总线? 三个信号一起看:核的每周期指令数低但缓存未命中并不高(说明堵在传输不在缺失)、总线仲裁等待计数高、以及降低其他主设备流量后性能明显回升。7.3 的剖析工具能分别给出这三项数据——对上号就可以立案了。
设计师视角小结:互连设计的三步工作法——先画流量图(每个主设备到每个从设备的带宽与延迟需求),再选拓扑与协议(流量图上重的那几条线配原生高性能协议,轻的配轻量协议),最后仿真压测(按流量图的峰值压力跑,看仲裁等待与队列深度)。跳过第一步直接抄参考设计,是集成项目返工的头号原因——路网规划永远从车流量出发,不是从别人的图出发。
路修好了,多核的车流怎么不撞车——下一节进入一致性协议。