PCIe 数据链路层

news2024/12/25 8:58:12

       PCIe 总线的数据链路层处于事务层和物理层之间,主要功能是保证来自事务层的TLP在PCle链路中的正确传递,为此数据链路层定义了一系列数据链路层报文,即DLLP。数据链路层使用了容错和重传机制保证数据传送的完整性与一致性,此外数据链路层还需要对PCIe链路进行管理与监控。 数据链路层将从物理层中获得报文,并将其传递给事务层,同时接收事务层的报文,并将其转发到物理层。

       与事务层不同,数据链路层主要处理端到端的数据传送。在事务层中,源设备与目标设备间的传送距离较长,设备之间可能经过若干级Switch;在数据链路层中,源设备与目标设备在一条PCIe 链路的两端,不存在报文转发;

数据链路层的组成结构

       数据链路层使用 ACK/NAK协议发送和接收TLP,由发送部件和接收部件组成。 其中发送部件由 replay buffer、 ACK/NAK DLLP 接收逻辑和 TLP 发送逻辑组成;而接收部件由 " Error check" 逻辑、 ACK/NAK 发送逻辑和 TLP 接收逻辑组成。

       数据链路层使用 ACK/NAK协议保证 TLP 的正确传送, ACK/ NAK 协议是一种滑动窗口协议,通过Sequence前缀存放当前TLP 的序列号,滑动窗口协议需要使用这个序列号。该序列号可以循环使用,但在同一个时间段内,一条PCIe链路不能含有 Sequence 前缀相同的多个 TLP;

       PCIe 总线的数据链路层使用replay buffer和 Error Check部件共同保证数据传送的可靠性和完整性。来自事务层的 TLP首先暂存在replay buffer中,然后发送到目标设备。源设备的数据链路层根据来自目标设备的 ACK/NAK DLLP 报文决定是重发这些 TLP 还是消除保 存在replay buffer中的TLP;

       PCIe 设备的数据链路 中,还含有 Error Check单元。PCle设备使用 Error Check 单元检查接收到的 TLP ,并决定如何向对端设备进行报文回应。 如果 TLP 被正确接收, PCle 设备将向对端设备发送 ACK DLLP; 如果 TLP 没有被正确接收, PCIe 设备将向对端设备发 NAK DLLP。

数据链路层的状态 

        数据链路层需要通过物理层监控PCle 链路的状态,并维护数据链路层的"控制与管理状态机机" (Data Link Control and Management State Machine , DLCMSM) 。 DLCMSM 状态机可以 从物理层获得以下与当前 PCl 链路相关的状态:

• DL_Inactive 状态

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

       PCIe设备的物理层设置了 Link Up 位,该位为1时表示 PCle 链路的对端与 PCle设备相连。当物理层的LinkUp状态位为1,而且事务层设有禁用当前PCIe链路时,PCle数据链路层将从 DL_lnactive 状态迁移到 DL Init状态

• DL_lnit状态

       物理层通知数据链路层当前PCIe 链路可用,且物理层正处于链路初始化状态,此时数据链路层不能接收或者发送 TLP和DLLP,此时PCIe 链路首先需要初始化 vc0的流量控制机制,然后再对其他虚通路进行流量控制的初始化;

       当VC0的流量控制初始化完毕,而且物理层的LinkUp状态位为0b1时,数据链路层将 DL_Init 状态迁移到DL_Active 状态;如果在进行流盘控制初始化时,物理层的LinkUp 态位被更改为0b0时 ,数据链路层将从 DL_Init状态迁移到 DL_lnactive状态。

• DL_Ative状态

      当前PCle链路处于正常工作模式,此时物理层已完成 PCle 链路训练或者重训练。

       DLCMSM 状态机除了可以使用上述状态位,从物理层获得当前PCle链路状态外,还可以使用以下状态位,向事务层通知数据链路层所处的状态。事务层通过这些状态位获知数据链路层所处的工作状态;

       数据链路层可以从 DL_Active 状态迁移到DL_Inactive ,不能迁移到 DL_Init 状态,这也意味着数据链路层从 DL_Active 状态迁移出去后,必须重新进行对端设备的识别和流量控制初始化,之 后才能进入DL_Aclive 状态。

•DL_Down

       数据链路层处于该状态时,表示PCle 链路的对端没有发现其他设备,当数据链路层处于 DL_Inactive 状态时,该状态位有效。值得注意的是 DL_Down 有效时,并不意味着对端不存在物理设备,数据链路层仅是使用该状态位通知事务层,暂时没有从对端中发现 PCle 设备,需要进一步检测;

       当事务层收到数据链路层的 DL_Down 状态信息时,表示出现 以下情况

       • PC 链路的对端没有连接设备

       • 链路丢失了与对端设备的连接

       • 数据链路层和物理层出现某种错误,PCIe 链路不能正常工作

       • 系统软件禁用 PCIe 链路

• DL_Up

       数据链路层处于该状态表示在 PCle 链路的对端连接了其他设备 当数据链层处于DL_Active 态时,该状态位有效。

       数据链路层收到物理层的状态信息后,DLCMSM 状态机将进行状态转换,并向事务层通知 PCIe链路的状态。

       事务层处于 DL_Up 状态时,表示该设备 PCIe链路的对端设备 已经建立连接,链 路两端可以正常收发报文。当事务层发现PCIe链路从 DLDown 迁移 IJ L_Up 状态时, 将向 PC 链路的对端设备重新发送 Set_S ot_ ower Limit 消息,并重新初始化相关的寄 存器。

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

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

相关文章

frp内网穿透部署,轻松实现内网服务对外访问

FRP(Fast Reverse Proxy)是一种轻量级、高性能的反向代理工具,利用反向代理技术将公网请求转发至内网服务器上,并将内网服务器的响应再次转发至公网请求者。在实现内网穿透时,FRP能够将公网与内网之间的隔离突破&#…

每日一题:Leetcode1926.迷宫中离入口最近的出口

给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 . 表示)和墙(用 表示)。同时给你迷宫的入口 entrance ,用 entrance [entrancerow, entrancecol] 表示你一开始…

MYSQL练题笔记-聚合函数-游戏玩法分析

仍需成长啊,干自己认为的想干的事情的时候都有很大的挫败,那做别人分配给你的你自然会更难受些,尤其是你不懂的时候,所以加油,好好看待挫折和未成长的路啊!! 一、题目相关内容 1)相…

N26:构建无缝体验的平台工程之路-Part 1

在 N26,在生产环境中仅需一小时即可完成启动一个新的服务,包括所有必要的基础设施依赖项、功能,以及专用的数据库集群,并且其 API 可以用于通过身份验证的请求。在激烈竞争的金融市场中,迅速推出新产品和服务对于吸引和…

接口测试:身份认证(Auth认证的接口)+查询发布会

上一篇:接口测试case:查询发布会-CSDN博客(无身份认证版) 1、前置基础 一般测试工具都会提供一个User Auth/Authorization的选项,要求输入username/password字段。 系统登录功能时的username/password,是…

ke13--10章-1数据库JDBC介绍

注册数据库(两种方式),获取连接,通过Connection对象获取Statement对象,使用Statement执行SQL语句。操作ResultSet结果集 ,回收数据库资源. 需要语句: 1Class.forName("DriverName");2Connection conn DriverManager.getConnection(String url, String user, String…

机器学习 类别特征编码:Category Encoders 库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

java设计模式学习之【组合模式】

文章目录 引言组合模式简介定义与用途:实现方式UML 使用场景优势与劣势组合模式在Spring中的应用员工结构示例代码地址 引言 设想您正在组织一个大型派对,需要将各种食品和饮料按类型整理。您可能有单独的物品,如一瓶苏打水,也可…

您知道计算机是怎么分类的嘛

地表最强计算机 第 61 版全球最强大的超级计算机已经发布。名为 Top500,顾名思义,该列表列出了全球 500 台最强大的超级计算机。榜单显示,美国的AMD、英特尔和IBM处理器是超级计算系统的首选。在 TOP10 中,有四个系统使用 AMD 处理…

JWT安全及WebGoat靶场

JWT 安全 cookie(放在浏览器) cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的…

1+x网络系统建设与运维(中级)-练习题4

一.设备命名 LSW1 <Huawei>sys [Huawei]sysn LSW1 [LSW1]un in en 同理可得&#xff0c;给所有设备如以上命令一样配置 二.VLAN LSW1 [LSW1]vlan ba 1 10 20 100 [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type trunk [LSW1-GigabitEthernet0/0/1]port tru…

axios调接口传参特殊字符丢失的问题(encodeURI 和 encodeURIComponent)

1、axios调接口特殊字符丢失的问题 项目开发过程中遇到一个接口传参&#xff0c;参数带特殊字符&#xff0c;axios调接口特殊字符丢失的问题 例如接口&#xff1a; get/user/detail/{name} name是个参数直接调接口的时候拼到接口上&#xff0c;get/user/detail/test123#$%&am…

记一次Java内存溢出导致程序宕机的问题及排查

Hi, I’m Shendi 记一次Java内存溢出导致程序宕机的问题及排查 问题场景 今天在使用工具中的 word 转 pdf 出了问题&#xff0c;报502错误&#xff0c;打开服务器发现服务被关闭了&#xff0c;起初以为是误关&#xff0c;打开后重新转换又出现了这个问题&#xff0c;在项目文件…

微信机器人接口开发

简要描述&#xff1a; 设置http回调地址 请求URL&#xff1a; http://域名地址/setHttpCallbackUrl POST 请求头Headers:&#xff08;别忘了传&#xff09; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…

【尘缘送书第五期】Java程序员:学习与使用多线程

目录 1 多线程对于Java的意义2 为什么Java工程师必须掌握多线程3 Java多线程使用方式4 如何学好Java多线程5 参与方式 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰…

【Java 基础】23 国际化

文章目录 1.概念2.原理1&#xff09;Locale2&#xff09;ResourceBundle3&#xff09;MessageFormat 3.例子1&#xff09;准备资源文件2&#xff09;加载资源文件3&#xff09;格式化消息&#xff08;非必须&#xff09; 总结 在全球化的今天&#xff0c;开发支持多语言的应用变…

配置BFD状态与接口状态联动示例

1、BFD检测IP链路。 在IP链路上建立BFD会话&#xff0c;利用BFD检测机制快速检测故障。BFD检测IP链路支持单跳检测和多跳检测&#xff1a; BFD单跳检测是指对两个直连系统进行IP连通性检测&#xff0c;“单跳”是IP链路的一跳。 BFD多跳检测是指BFD可以检测两个系统间的任意路…

每日一练:插入排序

1. 概念及原理 插入排序是一种简单直观的排序算法&#xff0c;其基本思想是将一个元素插入到已经排序好的部分&#xff0c;然后不断地重复这个过程&#xff0c;直到整个数组有序。下面是插入排序的算法原理&#xff1a; 初始状态&#xff1a; 数组被分为已排序和未排序两个部分…

论文阅读——Deformable ConvNets v2

论文&#xff1a;https://arxiv.org/pdf/1811.11168.pdf 代码&#xff1a;https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介绍 可变形卷积能够很好地学习到发生形变的物体&#xff0c;但是论文观察到当尽管比普通卷积网络能够更适应物体形变&#xff…

Python中如何判断List中是否包含某个元素

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;判断一个列表&#xff08;List&#xff09;是否包含某个特定元素是常见的任务之一。在本文中&#xff0c;将深入探讨多种判断List成员包含性的方法&#xff0c;并提供丰富的示例代码&…