当前位置:首页 > > 处芯积律

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层级。

  1. 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.

  1. 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上限就增加了。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭