PCIe初探(2/2)

  上一篇讲到了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架构中的应用做一次专题,敬请期待.

 

posted @ 2020-01-31 20:41  Chxm  阅读(1906)  评论(0编辑  收藏  举报