2.3 数据链路层(DLL)模块分析
数据链路层介于事务层和物理层,主要进行数据链路管理和辅助TLP报文的传输。
·
数据链路层介于事务层和物理层,主要进行数据链路管理和辅助TLP报文的传输。
一、概述
二、硬件模块
DLL层连通事务层和物理层,硬件架构如下图所示
- DLLP_check模块主要功能是接收物理层发送的DLLP和TLP包,并进行包格式检查,按DLLP包的类型进行分类。
- TLP_check模块功能是对接收到的TLP包进行CRC和协议检查。如果没有出现问题,则将数据发送到事务层,并告知DLLP GEN模块,发送DLLP给发送方确认数据传输情况。
- ACK/NAK packets模块是对收到的ACK/NAK DLLP进行解析,并把结果发送给retry buffer,帮助retry buffer判断是否需要重新发送TLP或是将存储的TLP删除。
- Retry buffer模块:缓存已发送的TLP包,并根据收到的ACK/NAK DLLP包的结果判断是否需要重新发送或是将已经收到确认信息的TLP删除。Retry Buffer在进行重发的时候,数据链路层不再从事务层接收TLP,因此不能同时进行读写,所有是单端口的RAM。
- DLLP_ARB模块:对要发送的DLLP和TLP进行仲裁,并按优先级进行发送,一般顺序是:完成事务TLP的数据包和当前需要发送的DLLP优先级最高,其次是Nak DLLP,接下来是Ack DLLP、retry buffer中的重传TLP,最后是正在等待的TLP。
- TLP packets Gen模块:接收事物层发送的数据,并加上sequence、LCRC等数据链路层信息。再发送给DLLP_ARB,同时把数据存入retry buffer,并在需要retry的时候,从retry buffer取数据发送。
- DLLP_Gen模块:根据事物层发送的信息和DLCMSM、接收到的TLP包、POWER management状态等条件产生DLLP包。
- DLCMSM模块:Data Link Control and Management State Machine,数据链路控制与管理状态机。将物理层和PCIe的链路层状态报告给数据链路层进行监控,管理和控制数据链路层,包含DL_Inactive、DL_Init、DL_Active三个状态并把链路层状态发送给事物层和物理层,与物理层的链路训练与重定向关联紧密。
- PM(power management, 电源管理)模块功能负责系统的电源状态与管理。
三、数据链路层的状态机(DLCMSM)
3.1 数据链路层状态
根据DLCMSM的值,数据链路层将对外表现出两种状态:DL_Down和DL_Up
- DL_Down:DLL将不会和链路对面的设备进行通信
- DL_Up:DLL可以和链路另一侧设备通信
3.2 数据链路控制和管理状态机(DLCMSM)
PCIe总线的数据链路层通过数据链路控制和管理状态机(DLCMSM)实现状态的切换,该状态机共有三个状态,分别为:
- DL_Inactive(表示链路无效状态,不可用,或者没有连接设备)
- DL_Init(链路可用,将进行VC0的初始化)
- DL_Active(链路可正常使用)
状态机转换如图所示:
3.2.1 DL_Inactive
- 如何进入DL_Inactive状态
- hot reset、warm reset、cold reset的初始化阶段,注意DL状态不会被FLR所影响
- 复位所有DLL状态为初始值
- 丢弃DLL retry buffer内容
- DL_Inactive行为
- 向事务层和数据链路层其他模块报告DL Down状态,事务层将停止发送TLP
对下游设备来说等同于“hot-remove”,对上游设备来说等同于“hot-reset”操作。 - 丢弃来自事务层和物理层的TLP信息
- 不再产生或接收DLLP报文
- 如何退出DL_Inactive状态
事务层报告软件没有失能建立链路,同时物理层报告建立链路,linkUp=1(PCIe gen3/gen4/gen5达到gen1速度即可)
从该状态推出后进入DL_Init状态
3.2.2 DL_init
- DL_Init状态行为
- 初始化默认VC(virtual channel)的Flow control
- 当在FC_Init1状态时报告DL_Down,挡在FC_Init2状态时报告DL_Up。
FC状态详细参考:PCIe控制器——数据链路层——flow control - 若某设备DLL表现DL_Down状态,一旦发送ACK的DLLP报文而不能识别对应的TLP,该DLL可以丢弃该TLP
-
如何退出DL_Init状态进入DL_Active状态
FC初始化完成,同时物理层报告链路建立,linkUp=1 -
如何退出DL_Init状态进入DL_Inactive状态
物理层报告链路断开,linkUp=0
2.3 DL_Active
DL_Active是正常操作状态
- DL_Active状态行为
- 在事务层和物理层之间接收和传输TLP
- 产生和接收DLLP
- 向事务层和数据链路层报告DL_Up
- 如何退出DL_Inactive

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)