以下文章来源于LPIoT ,作者水鸟LPIoT
Pcie数据链路层
PCIe的数据链路层在事务层和物理层之间,用来负责链路管理,其主要功能是保证来自事务层的TLP在PCIe链路中的正确传输,为此数据链路层定义了一系列的DLLP报文,数据链路层使用了容错和重传机制保证数据传输的完整性和一致性(TLP ACK/NAK),此外数据链路层还需要对PCIe链路进行管理(电源管理)和监控(流量控制)。
与事务层不同的是,数据链路层主要处理端到端(同一条PCIe物理链路相邻两端设备的发送端和接收端)的数据传输;而事务层是源设备和目标设备之间的数据传输(源设备与目标设备之间传输距离更长,可能经过多个Switch并有多条PCIe物理链路)。此处类似于网络通讯的概念,链路层通讯在直接物理相连的设备端口进行,网络层通讯可以跨过多个设备进行。
数据链路层结构
数据链路层使用ACK/NAK协议发送和接收TLP(事务层报文),由发送部件和接收部件组成(每个PCIe设备的数据链路层包含了这两部分,而两个PCIe设备间的通信是发送部件和接收部件成对实现的),如下图所示;
发送部件由1.Replay Buffer、2.ACK/NAK DLLP接收逻辑和3.TLP接收逻辑组成;
接收部件由1.“Error Check”逻辑、2.ACK/NAK DLLP发送逻辑和3.TLP发送逻辑组成。
PCIe总线数据链路层使用Replay Buffer和Error Check部件共通保证数据传输的可靠性和完整性;来自事务层的TLP先暂存在Replay Buffer中,然后发送到目标设备;源设备的数据链路层根据来自目标设备的ACK/NAK DLLP报文来决定是重发这些TLP,还是清除存放在Replay Buffer中的TLP。
1.Replay Buffer的大小决定过了事务层可以暂存在数据链路层的报文数量;
2.PCIe设备使用Error Check检查接收到的TLP,并决定如何向对端设备进行报文回应;
数据链路层状态
数据链路层需要通过物理层来监控PCIe链路状态,并维护数据链路层的“控制与管理状态机”(Data Link Control and Management State Machine,DLCMSM),可以从物理层获得与当前PCIe链路相关的状态,如下图所示:
DLCMSM主要包含三个状态:DL_Inactive、DL_Iinit、DL_Active
DL_Inactive状态:物理层通知数据链路层当前PCIe链路状态不可用,没有检测到PCIe链路的对端连接了PCIe设备;PCIe设备从复位状态进入DL_Inactive状态时,进行如下操作:
(1)对PCIe数据链路层进行彻底复位:将与PCIe链路相关的寄存器置为复位值,并丢弃在Replay Buffer中保存的所有报文;
(2)数据链路层向事务层提交DL_Down状态信息;
(3)丢弃来自数据链路层和物理层的所有TLP,不再接收对端设备发送的DLLP;
(4)如果PCIe链路对端有PCIe设备相连,则物理层的LinkUp状态位为1,且事务层并未禁止当前PCIe链路时,数据链路层将从DL_Inactive状态迁移到DL_Init状态。
(5)如果PCIe链路对端不存在PCIe设备,则物理层的LinkUp状态位为0,此时数据链路层一直处于DL_Inactive状态。
2.DL_Iinit状态:物理层通知数据链路层当前PCIe链路可用(LinkUp = 1),且物理层正处理链路初始化状态,此时数据链路层不能接收或发送TLP和DLLP;
3.DL_Active状态:当前PCIe链路处于正常工作模式,物理层已完成PCIe链路训练(LTSSM);此时数据链路层可以从事务层和物理层正常接收和发送TLP,并处理DLLP。在多数情况下数据链路层从DL_Active状态迁移到DL_Init状态,意味着处理器系统出现了异常,系统软件需要处理这些异常;但如下情况的状态迁移不会引发异常。
DLCMSM除了从物理层获得当前PCIe链路状态外,还可以使用状态位向事务层报告数据链路层所处的状态;如上图所示,当数据链路层收到物理层的状态信息后,DLCMSM状态机将进行状态转换,并向事务层通知PCIe链路的状态。
1.DL_Down:数据链路层处于该状态时,表示PCIe链路暂时没有检测到对端连接设备(并非对端不存在物理设备);当数据链路层处于DL_Inactive时,该状态位有效;
2.DL_Up:数据链路层处于该状态时,表示PCIe链路的对端连接了设备;当数据链路层处于DL_Acive状态时,该状态位有效。
事务层对DL_Down/Up状态的处理
当事务层收到数据链路层的DL_Down状态信息时,则说明出现了如下状况:
1.PCIe链路的对端没有连接设备;
2.PCIe链路丢失了对端设备的连接;
3.数据链路层和物理层出现了某种错误,PCIe链路不能正常工作;
4.系统软件禁用PCIe链路。
事务层受到DL_Down状态信息后:
1.将不再从数据链路层中接收TLP,除了已经使用ACK/NAK报文确认过的TLP;
2.RC或Switch的下游端口将复位与链路相关的内部逻辑和状态;
3.Switch和Bridge的上游端口将复位相关的内部逻辑和状态,并丢弃正在处理的TLP;
——此时Switch和PCIe桥使用Hot Reset方式复位所有下游端口。
以上是《PCIE数据链路层整体架构》,敬请关注后续内容
全部0条评论
快来发表一下你的评论吧 !