3. 跨层互连架构:物理层、数据链路层、传输层、协议层的分层模型

做Chiplet这么多年,我越来越觉得,跨层互连的分层模型是整个系统的骨架。说白了,就是把复杂的互连问题拆成几个独立的层次,每层各司其职。这个思路其实跟计算机网络里的OSI模型很像,但咱们Chiplet场景下更强调物理实现和效率。

我个人习惯把跨层互连比作一个快递系统:物理层是公路和卡车,数据链路层是交通规则,传输层是物流调度中心,协议层则是客户下单的接口。每一层只关心自己的事,上层不用管下层怎么跑。

3.1 物理层(PHY)—— 最底层的硬功夫

物理层,说白了就是芯片之间怎么传电信号。它负责把0和1变成电压或电流,在Die-to-Die的通道上跑起来。

物理层要解决的核心问题:

  • 信号完整性:高速信号在微凸点、RDL、硅中介层上跑,反射、串扰、衰减都是家常便饭。我记得有个项目,信号速率跑到16Gbps时,眼图直接闭上了,最后发现是硅通孔的寄生电容没算准。
  • 时钟与数据恢复(CDR):没有全局时钟,接收端得从数据流里把时钟抠出来。这玩意儿调起来很磨人,我曾经为了一个CDR的锁定时间问题,连续加班了一周。
  • 均衡与预加重:高频信号衰减严重,发射端得预加重,接收端得均衡。说白了就是给信号打一针强心剂。
  • 电气接口标准:比如HBM用的1024位宽接口,或者UCIe里定义的56Gbps NRZ/PAM4信号。不同的标准,功耗和面积差很多。

关键参数速查表:

参数典型值说明
单通道速率16-56 GbpsUCIe 1.0/2.0标准
通道间距25-55 μm取决于封装工艺
误码率< 1e-15带FEC后要求
功耗效率0.5-2 pJ/bit先进工艺可更低

我的经验:物理层设计时,一定要留足余量。我曾经遇到过温度变化导致信号时序漂移,差点翻车。建议在仿真时把PVT(工艺、电压、温度)角都跑一遍,别偷懒。

3.2 数据链路层(Data Link)—— 保证不出错

物理层只管传,但传错了怎么办?数据链路层就是干这个的——它负责把物理层不可靠的比特流,变成可靠的数据帧。

数据链路层的核心职责:

  • 帧同步:接收端得知道哪里是一帧的开始和结束。常用的是逗号序列(K码)或者特殊的同步头。
  • 错误检测与纠正:CRC校验是标配,高级点的还会加FEC(前向纠错)。嗯,这里要注意,FEC虽然能纠错,但会引入延迟,实时性要求高的场景得权衡。
  • 流量控制:发送端不能一股脑往外扔数据,得看接收端缓冲区还有没有位置。常用的有信用制(Credit-based)或者暂停帧(PAUSE frame)。
  • 链路初始化与训练:上电后,物理层需要一段时间来对齐相位、校准均衡器。数据链路层要管理这个状态机。

你想想看,如果没有数据链路层,物理层传错一个bit,上层应用可能就直接崩溃了。我见过一个案例,某团队直接拿物理层裸传数据,结果偶尔出现比特翻转,排查了两个月才发现是数据链路层没做CRC。

3.3 传输层(Transport)—— 端到端的可靠传输

传输层是承上启下的关键。它不关心数据怎么在物理链路上跑,只关心从发送端到接收端,数据能不能完整、有序地到达。

传输层的主要功能:

  • 数据包化:把上层的数据切成合适大小的包,加上包头(包含源地址、目的地址、序列号等)。
  • 重传机制:如果数据链路层检测到错误但无法纠正,传输层会请求重传。我习惯用Go-Back-N或者选择性重传,具体选哪个看延迟容忍度。
  • 多通道管理:Chiplet之间往往有多个物理通道,传输层可以把数据分发到不同通道上,实现负载均衡。
  • 死锁避免:这是个大坑。如果多个数据包互相等待对方释放资源,系统就卡死了。我曾经在设计中加入虚拟通道(Virtual Channel)来解决这个问题。

避坑指南:我曾经在一个项目中,传输层的缓冲区设计得太小,导致高负载下频繁丢包重传,性能直接腰斩。后来把缓冲区从4KB扩到16KB,问题就解决了。记住,缓冲区大小要跟延迟带宽积匹配。

3.4 协议层(Protocol)—— 应用看得懂的接口

协议层是最靠近应用的一层。它定义了数据怎么组织、命令怎么编码、事务怎么完成。说白了,就是让CPU、GPU、加速器这些IP核能互相理解对方在说什么。

常见的协议层标准:

  • AXI/CXS:ARM生态最常用,支持读写事务、乱序传输、原子操作。我做过一个AI加速器,就是用AXI over UCIe来跟CPU通信的。
  • CHI:ARM的缓存一致性协议,适合多核Chiplet场景。但实现复杂度高,小团队慎入。
  • OpenCAPI/CCIX:面向异构计算的协议,支持内存语义访问。
  • 自定义协议:有些场景下,标准协议太臃肿,可以自己定义精简协议。但要注意兼容性。

协议层的设计原则是:够用就好。不要为了追求功能完整而引入不必要的开销。我见过有人把完整的PCIe协议栈搬到Chiplet内部,结果延迟和面积都爆炸了。

3.5 分层模型的核心逻辑

为了让你更直观地理解这四层的关系,我画了一张图。这张图展示了数据从协议层一路往下,经过传输层、数据链路层,最终通过物理层发送出去的过程。

Chiplet跨层互连分层模型 发送端 (Die A) 接收端 (Die B) 协议层 (Protocol) AXI/CHI/自定义 协议层 (Protocol) AXI/CHI/自定义 传输层 (Transport) 包化/重传/多通道 传输层 (Transport) 包化/重传/多通道 数据链路层 (Data Link) 帧同步/CRC/FEC/流控 数据链路层 (Data Link) 帧同步/CRC/FEC/流控 物理层 (PHY) CDR/均衡/SerDes 物理层 (PHY) CDR/均衡/SerDes 物理介质 (Die-to-Die通道) 数据从协议层向下封装,经过传输层、数据链路层,最终通过物理层发送 接收端则反向解封装,从物理层到协议层逐层还原

这张图里,数据从协议层往下走,每层都会加上自己的控制信息(包头、校验码等),这叫封装。接收端则反向操作,逐层解封装。你想想看,如果没有这个分层模型,所有功能揉在一起,调试起来得多痛苦。

核心要点:

  • 物理层管信号,数据链路层管帧,传输层管包,协议层管语义。
  • 层与层之间通过标准接口交互,这样每一层可以独立升级。
  • 实际项目中,UCIe标准已经把这四层都定义好了,但很多自研Chiplet还是会自己实现部分层次。

嗯,这一章的内容就到这里。分层模型是理解Chiplet互连的基础,后面我们会深入到每一层的具体实现细节。到时候再结合我踩过的坑,跟你慢慢聊。

可可精品资料库