4. 高速互连协议与Jacinto内部总线
在Jacinto这类面向域控制器与ADAS的SoC中,CPU、GPU、DSP、ISP、VPAC、DSS、PCIe控制器、以太网与DDR控制器并不是通过一根“总线”简单相连,而是通过一套分层的高速互连网络(NoC,Network-on-Chip)互联。理解这套互连,关键不是记住协议名字,而是搞清楚三件事:谁发起事务、事务以什么协议语义传输、NoC如何按QoS和优先级把有限带宽分配给不同主端口。这三件事共同决定了DDR带宽利用率、实时任务的延迟抖动,以及多路摄像头/显示并发时是否出现“抢带宽”导致的帧丢失。
4.1 三种协议在Jacinto中的分工
AXI、ACE、CHI是ARM生态中三代互连协议,Jacinto内部同时存在它们的“身影”,但角色不同。
AXI4/AXI4-Lite是最基础的读写通道协议,采用独立的读地址、读数据、写地址、写数据、写响应五通道,支持突发(burst)传输。Jacinto中大量外设、DMA、PCIe、以太网、部分加速器的主端口都以AXI为主。AXI的语义是“非一致性”的:主端口发出读写请求,互连只保证传输,不保证缓存一致性。因此CPU访问这些外设时,必须由软件显式处理缓存维护(clean/invalidate),否则会出现数据不一致。
ACE/ACE-Lite在AXI基础上增加了缓存一致性扩展。ACE允许带有缓存的主端口(如CPU集群)之间通过snoop通道维持一致性;ACE-Lite则用于“能发起一致性访问但不带本地缓存”的主端口,例如GPU或某些DMA。在Jacinto中,CPU集群与GPU、部分加速器之间的一致性访问通常走ACE/ACE-Lite路径,避免频繁的软件缓存维护开销。
CHI是面向多核、多集群、多级缓存的下一代一致性协议,采用基于报文(packet)的通道化传输,支持更细粒度的一致性状态(如UniqueClean、SharedDirty等)和更高效的snoop过滤。Jacinto的高端型号在CPU集群、系统缓存(System Cache)与内存控制器之间可能采用CHI或CHI-like互连,以降低大规模一致性流量对DDR的冲击。
4.2 NoC的QoS与优先级:不是“先到先得”
Jacinto的NoC通常对每个主端口(master port)配置一组QoS参数,核心包括:
- 优先级(Priority):数值越高,仲裁时越优先。通常实时性要求高的主端口(如显示刷新、摄像头写入)优先级高于后台批量传输(如CPU大块内存拷贝)。
- 带宽限制(Bandwidth Limit / Rate Limiting):限制某主端口在给定时间窗口内可占用的带宽比例,防止一个主端口“饿死”其他主端口。
- 延迟敏感度(Latency Sensitivity):部分NoC支持基于延迟的调度,对延迟敏感的事务优先放行。
- 读/写分离:读事务和写事务在NoC中往往走不同路径或不同仲裁队列,因为DDR的读带宽和写带宽特性不同,读写切换本身有开销。
QoS的本质是“在带宽不足时做取舍”。当所有主端口都空闲时,QoS参数几乎不起作用;只有当DDR带宽接近饱和时,QoS才决定谁先被服务、谁被延迟。因此调优QoS的前提是先确认瓶颈确实在DDR或NoC,而不是在某个主端口自身。
4.3 带宽仲裁机制与主从端口属性
NoC中的仲裁通常发生在两个位置:主端口到NoC的入口,以及NoC到DDR控制器的出口。入口仲裁决定多个主端口竞争同一路径时谁先走;出口仲裁决定DDR控制器先服务哪个读/写请求队列。
主端口(Master)属性一般包括:端口ID、支持的事务类型(读/写/原子操作)、最大突发长度、数据位宽、是否支持outstanding(未完成事务)以及最大outstanding数量。从端口(Slave)属性包括:地址范围、支持的传输粒度、是否可缓存、是否支持写合并等。理解这些属性,才能判断一个主端口“理论上能跑多快”和“实际能跑多快”。
例如,一个64位位宽、支持256字节突发的AXI主端口,在理想情况下每周期可传8字节,若NoC和DDR都能跟上,则理论带宽为:
理论带宽 = 位宽(字节) × 频率 × 每周期传输次数
= 8 B × 800 MHz × 1 = 6.4 GB/s(单向)
但实际带宽受限于:outstanding数量不足导致流水线断流、DDR行切换开销、读写切换开销、NoC仲裁延迟等。因此实际有效带宽往往只有理论值的50%~70%。
4.4 事务类型与传输效率
Jacinto中常见的事务类型包括:单次读/写(single)、增量突发(INCR)、回绕突发(WRAP)、原子操作(Atomic)以及一致性事务(如ReadShared、MakeUnique)。传输效率的关键在于突发长度与DDR访问粒度的匹配。
DDR控制器的访问粒度通常是32字节或64字节(取决于位宽和burst chop)。如果AXI突发长度太短(如每次只传8字节),DDR控制器需要频繁切换行和列,效率急剧下降。因此,软件和DMA配置应尽量使用长突发(如16拍×8字节=128字节),并保证地址对齐。
另一个影响效率的因素是读写切换。DDR在同一bank上频繁读写切换会引入tWTR、tRTW等时序开销。NoC的读写分离队列和DDR控制器的读写调度策略(如读优先、写批量刷新)就是为了减少这种切换。
4.5 实际调优中的判断依据
当系统出现“显示卡顿”或“摄像头丢帧”时,不能直接调高显示端口优先级了事。正确的判断顺序是:
- 用性能计数器确认DDR总带宽是否接近饱和(如LPDDR4-3200理论约25.6 GB/s,实际有效约15~18 GB/s)。
- 若未饱和,检查是否某个主端口outstanding不足或突发太短,导致NoC入口就断流。
- 若已饱和,再检查QoS配置:显示和摄像头写是否被CPU大块拷贝或GPU批量传输挤占。
- 必要时对低优先级主端口设置带宽上限,而不是无限提高高优先级端口的优先级,否则会引发优先级反转和饥饿。
总结来看,Jacinto内部互连的性能问题,很少是单一协议或单一参数造成的,而是协议语义、QoS策略、DDR访问模式三者共同作用的结果。理解AXI/ACE/CHI的分工,掌握NoC QoS的仲裁逻辑,再结合主从端口属性和事务类型去分析,才能把“带宽不够”这个模糊问题,定位到具体的端口、队列或突发配置上。