PCIe gen6 数据链路层总结
扫描二维码
随时随地手机看文章

Data Link Layer 负责将TLP可靠地传输给链路的另外一个组件。
Data Link Layer 功能包含如下部分:
Data Exchange
Accept TLPs for transmission from the Transmit Transaction Layer and convey them to the Transmit Physical Layer
Accept TLPs received over the Link from the Physical Layer and convey them to the Receive Transaction Layer
Error Detection and Retry (Non-Flit Mode)
TLP Sequence Number and LCRC generation
Transmitted TLP storage for Data Link Layer Retry
Data integrity checking for TLPs and Data Link Layer Packets (DLLPs)
Positive and negative acknowledgement DLLPs
Error indications for error reporting and logging mechanisms
Link Acknowledgement Timeout replay mechanism
Initialization and power management:
跟踪链路状态,并且将 active/reset/disconnected状态传递给Transaction Layer
DLLPs 用于链路管理,包含TLP确认,功耗管理和流控交互。
DLLP是在链路的两个组件之间进行传输,而TLP的传输路径有可能会经过多个中间组件。
Non-Flit模式,DLLP使用16bit的CRC,TLP使用32bit的CRC进行数据完整性检查。收到的DLLP如果没有通过CRC检查,则直接丢弃。没有通过完整性检查(LCRC and sequence number)的TLP则会被对端重新发送。
Flit Mode模式, DLLP和TLP都会使用flit传输,flit使用LCRC,FEC和sequence number进行数据完整性检查。重传操作发生在Flit层级。
Data Link Control and Management State Machine
Data Link Layer负责跟踪链路状态,并且与Transaction and Physical Layers交互链路状态。

数据链路层使用Data Link Control and Management State Machine (DLCMSM)完成链路状态管理工作。
DLCMSM包含如下4个状态:
• DL_Inactive - Physical Layer reporting Link is non-operational or nothing is connected to the Port
• DL_Feature (optional) - Physical Layer reporting Link is operational, perform the Data Link Feature Exchange
• DL_Init - Physical Layer reporting Link is operational, initialize Flow Control for the default Virtual Channel
• DL_Active - Normal operation mode
DLCMSM输出两个状态:
• DL_Down - The Data Link Layer is not communicating with the component on the other side of the Link.
• DL_Up - The Data Link Layer is communicating with the component on the other side of the Link.
Data Link Control and Management State规则
DL状态不受FLR影响
DL_Inactive
在DL_Inactive状态,DLCMSM会输出DL_Down状态给向事务层和链路层的其他模块。
链路层会丢弃来自事务层和物理层的TLP
不再产生和接收DLLP
如果物理层表示Physical LinkUp=1,且支持Data Link Feature Exchange并且Data Link Feature Exchange is Enabled bit为1,则从DL_Inactive进入DL_Feature
如果物理层表示Physical LinkUp=1,不支持Data Link Feature Exchange或者Data Link Feature Exchange is Enabled bit为0,则从DL_Inactive进入DL_Init
这会导致事务层丢弃任意未完成的传输,并且去终止传输TLP。对Downstream Port来说,这相当于Hot-Remove。对Upstream Port来说,链路进入down状态,相当于hot reset。
DL_Inactive是PCIe 复位(仅包含PCI Express Hot, Warm, or Cold Reset )后的初始状态,
一旦进入DL_inactive,则复位DL层状态为初始值
在DL_Inactive状态:
DL_Feature:
成功完成 Data Link Feature Exchange,并且物理层继续表示Physical LinkUp = 1b,或者
Data Link Feature Exchange 过程判断远端的数据链路层不支持Data Link Feature Exchange protocol,并且物理层继续表示Physical LinkUp = 1b
通过Data Link Feature DLLP执行Data Link Feature Exchange协议,完成Scaled Flow Control等信息交换
汇报DL_Down 状态
DL_Down的端口,其数据链路层允许丢弃任意收到的TLP,因为没有ACK DLLP用于确认TLP的接收。
在 DL_Feature状态:
满足如下要求进入DL_Init状态
一旦物理层继续表示Physical LinkUp = 0b,则终止Data Link Feature Exchange 过程,进入DL_Inactive
DL_Init
成功完成流控初始化,并且物理层持续支持Physical LinkUp = 1b
为VC0完成流控初始化
在 FC_INIT1阶段输出DL_Down状态,在FC_INIT2状态输出DL_Up状态
DL_Down状态的链路层允许丢弃任意收到的TLP
满足如下要求进入DL_Active 状态
一旦物理层指示Physical LinkUp = 0b,则终止VC0的流控初始化,且进入DL_Inactive
DL_Active
DL_Active 是链路正常工作状态
链路层能够正常接收来自物理层的TLP,能够发送来自事务层的TLP
能够产生和发送DLLP
给事务层和链路层其他模块输出DL_Up状态
一旦物理层指示Physical LinkUp = 0b,则进入DL_Inactive
2、Data Link Feature Exchange

数据链路特性交换协议的操作就是通过DLLP将local port支持的特性传递给remote port,并且捕获remote port传递过来的特性信息,并且记录更新到Data Link Feature Status Register
支持16.0 GT/s以及更高速率的port必须支持 Data Link Feature交换协议。实现此协议的Downstream Ports必须实现了Data Link Feature Extended Capability,而实现此协议的 Upstream Ports是可选择实现Data Link Feature Extended Capability。

此能力主要包含如下4部分:
Local Data Link Feature Supported field 为1表示支持Data Link Features,为0表示不支持
此字段位于Data Link Feature Capabilities Register寄存器

Remote Data Link Feature Supported field表示对端port是否支持the Data Link Features
此字段位于Data Link Feature Status Register
Remote Scaled Flow Control Supported为1表示remote支持缩放流量控制(Scaled Flow Control )


Remote Data Link Feature Supported Valid 字段为1表示当前port在 DL_Feature阶段至少收到一个 Data Link Feature DLLP,表示 Remote Data Link Feature Supported字段包含有效数据
Data Link Feature Exchange is Enabled允许系统关闭Data Link Feature Exchange.这个功能可以用于对接无法正确处理Data Link Feature DLLP的传统旧设备。


数据链路特性交换协议需要遵守的规则:
一旦进入DL_Feature,允许将Remote Data Link Feature Supported and Remote Data Link Feature Supported Valid fields 清零
在 DL_Feature 状态
如果 Remote Data Link Feature Supported Valid 为0,则从接收到的Data Link Feature DLLP中提取Feature Supported field,并且将Data Link Feature status寄存器Remote Data Link Feature Supported Valid bit置1.
DLLP中的The transmitted Feature Supported字段必须使用Data Link Feature Capabilities寄存器的the Local Data Link Feature Supported field.
DLLP中The transmitted Feature Ack bit 必须使用Data Link Feature status寄存器the Remote Data Link Feature Supported Valid bit.
事务层必须停止传输TLPs
数据链路层发送 the Data Link Feature DLLP
处理接收到的Data Link Feature DLLPs:
满足如下情况则退出DL_Feature
已经收到了InitFC1 DLLP,或者
至少收到一个Feature Ack bit置1的 Data Link Feature DLLP
Data Link Feature 处于activated状态的条件
在Local Data Link Feature Supported and Remote Data Link Feature Supported fields中对应的Feature Supported bit 为1且Remote Data Link Feature Supported Valid 为1
3.Flow Control Initialization Protocol
在PCIe建立过程中,还有一个重要的一步,那就是流控初始化。默认虚拟通道,即VC0必须首先由硬件完成初始化,随后才能进行其他VC的初始化(如果存在多个VC)。
PCIe Gen6 支持Flit 模式,在Flit模式下共享流控(Shared Flow Control)是生效的,而在非flit模式下,Shared Flow Control必须关闭。需要注意的是,在FLit模式下,共享(shared)信用量和专用(Dedicated)信用量是可以同时存在的。在Non-Flit模式,仅仅使用专用(Dedicated)信用量。
流控初始化的两个状态:
• FC_INIT1 :对接的设备通过发送FC_INIT1 DLLP,完成信用量信息的交换。
• FC_INIT2 :通过发送InitFC2 DLLPs完成信用量信息的再次确认。

3.1 FC_INIT1 状态
在FC_INIT1 状态下,对接的设备通过发送FC_INIT1 DLLP,完成信用量信息的交换。
在FC_INIT1 状态下,会进行如下操作
事务层阻塞当前VC的TLP
Non-Flit模式下,按顺序传输3种类型的InitFC1 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
Flit模式下,按顺序传输6种类型的InitFC1 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
▪ InitFC1-P [Shared] (fourth)
▪ InitFC1-NP [Shared] (fifth)
▪ InitFC1-Cpl [Shared] (sixth)
设置 DataFC, DataScale, HdrFC, and HdrScale 如表Table 3-2 和 Table 3-3
此处不推荐大家耗费很多时间在share credit 上面,因为当前主流PCIe IP vendor对share credit的支持不够完善,目前几乎没有已商用的支持share credit的产品。



为了保证InitFC1 DLLP能够得到足够的传输频率,此时数据链路层会阻塞其他类型的传输,例如阻塞Ordered Sets), Ack and Nak DLLPs (when applicable), 以及其他VC的TLP
如果收到 InitFC1 and InitFC2 DLLPs会进行如下处理:
从InitFC1 and InitFC2 DLLPs中提取HdrFC and DataFC values 并且记录下来
如果接收者支持Scaled Flow Control,则还需要把DLLPs中申明对端支持的HdrScale and DataScale记录下来
一旦完成 P, NP, and Cpl对应数据记录,则将FI1标志置1
在 Non-Flit模式下,当收到3种专用信用量的FC unit 数据后,则将则将 FI1标志置1
在 Flit模式下,当收到6种信用量的FC unit 数据后,则将则将 FI1标志置1
一旦完成FI1标志置1,则表明已经记录对端设备的 P, NP, Cpl对应的FC unit 数值,此时从FC_INIT1退出,进入FC_INIT2
3.2 FC_INIT2
在FC_INIT2 状态下,通过发送InitFC2 DLLPs完成信用量信息的再次确认。
在FC_INIT2 状态下,会进行如下操作
事务层阻塞当前VC的TLP
Non-Flit模式下,按顺序传输3种类型的InitFC2 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
Flit模式下,按顺序传输6种类型的InitFC2 DLLPs
▪ InitFC1-P [Dedicated] (first)
▪ InitFC1-NP [Dedicated] (second)
▪ InitFC1-Cpl [Dedicated] (third)
▪ InitFC1-P [Shared] (fourth)
▪ InitFC1-NP [Shared] (fifth)
▪ InitFC1-Cpl [Shared] (sixth)
设置 DataFC, DataScale, HdrFC, and HdrScale 如表Table 3-2 和 Table 3-3
此处不推荐大家耗费很多时间在share credit 上面,因为当前主流PCIe IP vendor对share credit的支持不够完善,目前几乎没有已商用的支持share credit的产品。
为了保证InitFC1 DLLP能够得到足够的传输频率,此时数据链路层会阻塞其他类型的传输,例如阻塞Ordered Sets), Ack and Nak DLLPs (when applicable), 以及其他VC的TLP
如果收到 InitFC1 and InitFC2 DLLPs会进行如下处理:
忽略DLLPS中的HdrFC, HdrScale, DataFC, and DataScale 数值
收到任何InitFC2 DLLP,则将FI2标志置1
一旦收到当前VC所属的任何TLP,任何UpdateFC DLLP或者任何Optimized_Update_FC(Flit模式),则将FI2标志置1
满足如下条件则表示流程初始化流程完成并且退出InitFC2:
FI2标志已置1
Scaled Flow Control已生效,发送侧发送的当前VC的 UpdateFC DLLPs中的HdrScale and DataScale 为01b, 10b, or 11b。note:此时不允许发送00的Scale数值。
Scaled Flow Control不支持或者不生效,发送侧发送的当前VC的 UpdateFC DLLPs中的HdrScale and DataScale 为00b。note:此时不允许发送01b, 10b, or 11b的Scale数值。

3.3 Scaled Flow Control
Scaled Flow Control机制目的就是现有FC DLLP字段位宽分布不修改的情况下,增加credit数量上限的方法,即用比例缩放的方式描述credit。当Scale Factor为10b时,此时表示放大4倍,这样情况下,有限的FC DLLP filed字段能够表示的credit上限就增加了。






