总目录在此哦~

https://blog.csdn.net/z123canghai/article/details/115644744


目录

3.1 链路层干的活

3.1.1 DLLP格式

3.1.2 ACK/NAK协议

3.1.3 数据链路层发送报文的顺序

3.2 链路层的初始化


我们对进行数据交换的两个个体有不同的称呼,或称之为源设备和目标设备,或是接收端和发送端。这样的不同称呼并不是随意为之。源与目标设备间的数据交换一般是按照一定的路由规则,也就是之间会经过很多“中转站”,而描述发送接收端则是一种点对点的通讯方案,两个个体通过在一定程度上固定的链路进行连接,实现数据的交互。而PCIE的链路层间的数据交换就是相邻两个点之间的数据收发。、

对PCIE数据链路层的理解可以分为两个方面,一方面是干活,另一方面是维护。它作为事务层和物理层的中间阶段,扮演着承上启下的作用,也就意味着TLP数据要进过这里做些操作,其本身也会产生一种叫DLLP的数据包与相邻端点链路层进行数据交换。维护即对本层状态的一个监控,及将物理层、事务处与本层状态进行处理,用于链路维护。


3.1 链路层干的活

如下图是链路层简单的拓扑结构图,链路层内部关于发送和接收的部分可分为发送和接收两个部件组成。其中发送部件由Replay Buffer、ACK/NAK DLLP、TLP发送模块组成,接收部件由“Error Check”、ACK/NAK发送逻辑和TLP接收模块组成,每个节点的链路层是一样的,均包含上述模块来实现数据的接收与发送。

首先来看一下数据的传输机制。当PCIE进行数据传递时,首先在事务层中产生TLP数据包,随后将其发送给数据链路层,数据链路层给TLP加上前缀和CRC并放入Replay Buffer中,然后在发送到物理层。接收端收到数据后在链路层去掉前缀和CRC,再将数据送达事务层,这就是传输方式。这里面就涉及到了Replay Buffer、Error Check 和ACK/NAK协议相关概念。首先说下Replay Buffer,其实这就是个FIFO,其大小决定了可以缓存事务层交付给链路层的数据量。在完成数据发送或超时会释放对应空间,在这其中也有有些处理机制,就不展开阐述了。Error Check是对于接收端的数据检查,唯有检查通过才会发送到事务层,或根据需要返回给发送端一个完成信号,这个带有完成信号的数据包称之为DLLP,也就是ACK/NAK协议相关内容。


3.1.1 DLLP格式

DLLP数据包是始于链路层并止于链路层。其存在意义是保证TLP数据包的正确传输和管理PCIE链路。DLLP数据包格式如下所示,一共是6个字节,这个长度是固定的。

其中“DLLP Type”字段是表示数据包的类型,如下所示,下面就简单介绍下各类型。

1、ACK

该数据包是接收端发送到发送端的数据包,表示接受到了对端数据,意味着一次的数据传输完成了。

2、NAK

该数据包是接收端到发送端的数据包,该数据包表示接收端有哪些数据包并没有被接收,接收端接收后会释放以正确接收的数据包的缓存空间,重传未正确接收的TLP。

3、PM_**

PM即power Management,也就是与电源管理相关,用于保证电源管理状态机的正常运行。

4、Vendor-Specific

PCIE总线并没有对此进行规定,用户可自定义

5、其他

这部分涉及到InitFC*、UpdateFC*相关数据包,是用于流量控制的,具体会在后面相关章节阐述。


3.1.2 ACK/NAK协议

ACK和NAK是DLLP两种数据类型,用于保证传输TLP能够被正确的传输的。首先明确的是,链路层的数据交换是固定的两个设备间的数据交换,是固定的。每个设备都有一个发送模块、一个接收模块,如下图所示。

保证数据完整性主要通过CRC校验和循环数校验,以及相对应的重传机制。ACK/NAK协议是一种滑动窗口协议,这个窗口其中就是环形缓冲区。发送端在发送TLP时,首先为这个TLP添加sequence(循环数)和校验码放入发送窗口中,并对这些TLP从0到N进行编号,只要发送窗口不满,发送端就可以持续的从事务层中接收报文。

上文说的循环数就是发送端的包计数器,该计数器称之为NEXT_TRANSMIT_SEQ,位宽是12bit。发送端链路层每发送一包数据,这个计数器就加一,计满清零。接收端也有个类似的计数器,称之为NEXT_RCV_SEQ,当接收端接收一包数据后会比较接收的循环数与NEXT_RCV_SEQ是否一致,一致则说明包序正常无丢包,如果校验通过则会将这报数据发送到事务层,否则丢弃。

接收端并不是对每一包数据都进行应答,这样太占用链路,而是采用收几包应答依次的方案,例如收了3包向发送端发送一包ACK数据包表示之前几包数据都收到了。在ACK数据包中添加了接收的序列号,叫做AckNak_Seq_Num。例如上图,发送端要发送3到7这几包数据,如果接收端返回应答包的序列是5表示第3、4、5包收到了,则可清空对应的缓冲区。如果收到了NAK数据包,则表示该包数据中的序列号对应的数据包未正常接收,发送端需重新发送,但不能一直重新发送,这样不仅占用链路,而且还会造成死锁,故需用些机制来有限制的纠错。

对于链路层的通讯,有两种纠错机制,一种是校验错误,一种是超时判断。

在发送端,有一个计数器,叫做REPLAY_NUM,这是个2bit位宽寄存器,接收端每收到一包NAK数据包则会加一,当计满后清零并终止TLP包发送并重新进行链训练。如果REPLAY_NUM加一后收到了ACK数据包,也就是校验通过的数据,则证明通讯恢复了,可继续进行数据传输。

此外,发送端还有一个REPLAY_TIME计数器,用来记载一个TLP报文从发送到获得ACK/NAK回应的时间,如果时间超过阈值则发送端若认为PCIE链路出现故障,链路会进行重新训练等操作,以判断在TLP的传输过程中是否出现异常。另外,在接收端也有AckNAK_LATENCY_TIMER计数器,该计数器溢出时,接收端将重发NAK数据包。一般AckNAK_LATENCY_TIMER阈值是REPLAY_TIME的三分之一。


3.1.3 数据链路层发送报文的顺序

数据链路层还规定了报文发送的顺序,DLLP和TLP数据包是共用一个PCIE链路,除此之外还有物理层的数据包,因此PCIE链路需要合理安排报文的发送数据,以避免锁死,故规定如下:

1、正在发送的TLP或者DLLP具有最高优先权。PCIE总线为了保证数据的完整性,不允许打断正在传送的报文。

2、处于底层的报文优先级高于处于协议高层的报文,例如NAK数据包优先于TLP

3、错误处理报文优先于正确的响应,例如NAK数据包优先于ACK

4、重传TLP数据包要优先于正常传输的TLP,因为重传数据包有问题,在其之后的数据包正确传输过去也不会正确接收

5、地址路由、电源管理等消息报文优先级最低。


3.2 链路层的初始化

链路层需要通过物理层监控PCIE链路状态,并由控制与管理状态机“DLCMSM”状态机指示当前状态,如下图所示。链路层会从物理层获取DL_Inactive、DL_Init和DL_Active这三个相关状态信息。

DL_Inactive状态表示PCIE链路不可用,没有检测到与之相邻的设备,可能是链路或者对端设备存在问题,或根本不存在。当状态机在该状态复位后会对链路层进行全面的初始化操作,包括丢弃Replay BUFFer数据,将相关计数器清零等操作。

DL_Init状态表示PCIE链路层可用,且物理层正处于链路初始化状态,此时数据链路层不能接受或发送任何数据包,这时PCIE链路会初始化VC0的流量控制机制,然后再对其他虚拟通路进行流量控制初始化。当链路层的VC0初始化完毕,且物理层到链路层的“LinkUP”信号为1的时候,状态机会迁移到“DL_Active”状态。

DL_Active状态是设备正常工作的状态,此时可以进行正常的数据交换。根据上面的状态机迁移图可以看出,DL_Active不能倒DL_Ini状态,只能到DL_Inactive状态,从DL_Active状态到DL_Inactive状态的可能性有:1、Bridge Control Register位被系统置一;2、Link Disable被系统置一;3、对端设备发送来了PME_Turn_Off信号,本设备进入低功耗状态;4、若是支持热插拔的设备,Hot Plug Surprise或Power Controller Control置一,也就是在被拔出时候,当然还有其它,故等等。

链路层根据物理层状态会进行不同的状态,本层也会产生些状态信号告知事务层。主要有两个信号,一个是DL_DOWN,一个是DL_UP。

DL_Down状态表示PCIE对端没有发生其它设备或本设备链路层、物理层处于不可用状态。当链路层处于DL_Inactive状态状态时该状态位有效。DL_Up状态表示PCIE链路的对端连接了其他设备,可以进行正常的数据交换。

沧小海笔记之PCIE协议解析——第三章 PCIE的数据链路层相关推荐

  1. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第三章 xilinx 三速以太网IP核(TEMAC)的介绍

    总目录在这里哦~ https://blog.csdn.net/z123canghai/article/details/114649502 Xilinx为我们提供了一个叫做"Tri-Mode ...

  2. 沧小海笔记之基于xilinx的三速以太网相关知识的学习与理解

    目录 第一章 读<图解TCP/IP>笔记 第二章  互联网概述 第三章  物理层介绍(基于88E1111) 第四章  xilinx 三速以太网IP核(TEMAC)的介绍 第一章 读< ...

  3. 沧小海基于xilinx srio核的学习笔记之第二章 Rapidio技术概述

    总的目录在这哦~ https://blog.csdn.net/z123canghai/article/details/114648658 目录 第二章 Rapidio技术概述 2.1 总体原则 2.2 ...

  4. 沧小海详解面试的必答题——I2C协议

    目录 第一部分:I2C协议的概述 第二部分:I2C协议的阐述 第三部分:AT24C04简述 第四部分:基于verilog的程序设计(暂无) 对于大多从事FPGA行业的应届生来说,在面试过程中很可能会被 ...

  5. 沧小海笔记本之xilinx srio核的学习记录之目录

    目录 第一章:互连问题 第二章 Rapidio技术概述 第三章 xilinx srio核结构 3.1 xilinx srio核的结构介绍 3.2 ilinx srio核的HELLO格式和流控 3.3  ...

  6. 沧小海笔记本之A7系列FPGA资源介绍

    目录 第一部分:I / OBANK部分资源介绍 1.1  I/O BANK概述与ILOGIC资源概述 1.2  IDELAYE2.IDELAYCTRL和OLOGIC的资源介绍 1.3  OSERDES ...

  7. 计算机网络笔记(王道考研) 第三章:数据链路层

    内容基于中国大学MOOC的2023考研计算机网络课程所做的笔记. 感谢LY,他帮我做了一部分笔记.其中第四章网络层各小节的顺序稍微做了下调整,和上课老师讲的先后顺序稍有不同,但内容是完整的. 课程内容 ...

  8. 高等数学笔记-乐经良老师-第三章-导数和微分

    高等数学笔记-乐经良老师 第三章 导数和微分 第一节 导数的概念 一.例子 01 速度 运动物体的路程函数 S(t)S(t)S(t),时间从 t0→t0+Δtt_{0} \rightarrow t_{ ...

  9. 《小软笔记》用户协议

    为了使用本软件及服务,请认真阅读本<用户协议>(以下简称"本协议"),确保您充分理解本协议中各条款.请您务必审慎阅读.充分理解各条款内容,并选择接受或不接受. 除非您已 ...

  10. C++Primer Plus (第六版)阅读笔记 + 源码分析【第三章:处理数据】

    第三章:处理数据 简单变量 整型 整型 short .int .long 和 long 无符号类型 选择整型类型 整型字面值 C++如何确定常量的类型 char 类型:字符和小整型 bool类型 co ...

最新文章

  1. spring-boot-mybatis
  2. Spring Boot + MDC 实现全链路调用日志跟踪
  3. mysql数据库的介绍及安装
  4. 004_CSS元素选择器
  5. Leetcode 14.最长公共前缀
  6. 中年之后的人脉,靠的是两个字
  7. el-jy-ii计算机组成原理实验报告,EL-JY-II型计算机组成原理实验系统
  8. java中的四个指令_JAVA命令学习系列(四) ---- jstat
  9. mysql数据库优化课程---12、mysql嵌套和链接查询(查询user表中存在的所有班级的信息?)...
  10. SQL Server 2008支持将数据导出为 insert into 的脚本
  11. phpcmsv9 更换域名出现页面无法访问后怎么办
  12. 图像形态学运算之腐蚀-膨胀篇
  13. 酷家乐的 Istio 与 Knative 实践
  14. 程序猿段子_程序猿的24个段子,笑着笑着眼泪就出来了
  15. Java程序员面试笔试宝典-数据库原理(三)
  16. vim插件管理利器:pathogen
  17. 通过优矿API python获取财报
  18. 疯狂动物城简介第一台通用计算机,疯狂动物城 简介
  19. 流程图软件最新排名,一分钟了解画流程图用什么软件
  20. 美化滚动条的一个插件 vue3-perfect-scrollbar

热门文章

  1. Recoil 的使用
  2. 2020牛客暑期多校训练营(第九场)K-The Flee Plan of Groundhog
  3. 批量转换文件编码(By notepad++)
  4. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结
  5. 什么是telemetry
  6. RAID5换硬盘重建记录
  7. MBR30300VPT-ASEMI肖特基二极管MBR30300VPT
  8. 【NFC】手机手环模拟门禁卡
  9. 论文笔记 ACL 2021|Capturing Event Argument Interaction via A Bi-Directional Entity-Level Recurrent Decod
  10. 论证是一门学问 如何让你的观点有说服力-6 规则6 措辞前后一致