上一篇讲到了PCIe的事务层,下面会对数据链路层和物理层做简要介绍。
数据链路层的主要功能为:
TLP传输
出错检测和裁决
LCRC和Sequence Number的生成
存储发送端的TLP用于重发
为TLP和DLLP做crc校验
DLLP的ack/nack响应
链路初始化和电源管理
DLLP传输
用于链路管理功能(TLP确认,电源管理,VC通道初始化)
仍然用下面这张图来梳理三层结构中的事务包.
数据链路层为了保证事务包传输的正确性, 采用了Ack/Nak的握手机制,
Ack/Nak是一种由硬件实现的,完全自动的机制,目的是保证TLP有效可靠地传输。Ack DLLP用于确认TLP被成功接收,Nak DLLP则用于表明TLP传输中遇到了错误。
下图为数据链路层的工作过程:
PCIe的物理层 :
物理层分为两部分,逻辑物理层和电气物理层。如下图所示:
电气层和逻辑层间定义了一个成为PIPE的物理接口
电气子层: 包括收发器、模拟缓冲器、串行/解串行器(SerDes)在内的模拟器件以及10位接口
编码子层(PCS)把每8位数据字节编码/解码为10位代码。这种编码特性不仅能检查有效字符,而且也限制了被发送的0/1数量上的差异,从而同时在发射器和接收器侧保持了DC均衡,进而大大提高了电磁兼容性(EMC)和电气信号性能。
在物理层内PIPE接口的另一侧包含用以指示链路训练和状态的状态机(LTSSM)、通道间去除偏移、特殊序列检测和生成等功能。
电气层涉及模拟电路的部分,这里简单了解一点:
从串行引脚层到PIPE接口层统称为物理层。
从PIPE接口到应用的那些层称为数字控制器(Controller)。
SerDes设计挑战
串行到并行的数据转换,要求先进的模拟设计
不同工艺技术间,模拟设计不具有移植性。所以必须针对芯片制造所采用的工艺技术对物理层实施重新设计
高速-模拟链路引入的额外设计复杂性使设计难度进一步加大(如因信号完整性和噪音导致的衰减问题)
物理层必须通过严格的电气和兼容性测试,以确保与其他设备的互操作性。
逻辑物理层:
物理层的发射部分负责:
采用特殊符号插入对数据包进行帧化处理; 如用STP或SDP符号标志数据包的开始,用END符号标记数据包结束。
通道映射使顺序传送数据包在到通道链路上同时发送,从而增加吞吐量。接收器物理层以正确顺序对数据包进行重组
数据加扰
链路控制 – 初始化、宽度和通道反转协商
多通道传输控制
生成跳跃序列以补偿链路两端的时钟PPM差。
物理层的接收部分负责:
负责包含多通道链路的通道映射、通道到通道间的去偏移
数据解扰
发现数据包并实施去帧化处理
CDR恢复始终信号
检测特殊数据包序列,如: TS1, TS2, Skip和电气闲置。
关于三层结构介绍暂时到这里,那么PCIe在上电后是怎么开始工作的呢?下面会较详细的叙述PCIe开始工作的过程。
PCIe开始工作主要分为3个步骤:链路训练,枚举扫描,配置BAR空间。
链路初始化:
Link Initialization & Training:
枚举扫描:
总线枚举过程:
配置BAR:
配置基地址寄存器,给PCIe分配地址空间。
PCIe还有很多其他内容,比如Ordering, 中断,RAS,Power管理,虚拟化等,每一个话题都可以单独开题,PCIe初探部分就到此为止了,后续会对PCIe的Ordering和在ARM架构中的应用做一次专题,敬请期待.