从零开始讲PCIe(11)——数据链路层介绍

news2024/11/26 16:51:21

一、概述

        数据链路层这一层的逻辑是用来负责链路管理的,它主要表现为 3 个功能TLP 错误纠正、流量控制以及一些链路电源管理。它是通过如图 2-24 所示的DLLP(Data Link Layer Packet)来完成这些功能的。

二、DLLPs 数据链路层包(Data Link Layer Packet)

        DLLPs(数据链路层数据包)在链路上两个相邻设备的数据链路层之间传输,事务层对此类数据包并不知晓。DLLPs仅在相邻设备之间传递,并不会被路由到其他地方。与TLP(事务层数据包)相比,DLLPs的体积很小(始终只有8字节),这是一个优势,因为它们属于维持链路协议的开销,较小的大小有助于减少资源消耗。

2.1 DLLP组包

        DLLP(数据链路层数据包)的组包过程如图2-24所示,起源于发送端的数据链路层,并由接收端的数据链路层处理。为确保在接收端检查错误,DLLP核心部分附加了一个16位的CRC校验码。随后,DLLP的内容被转发至物理层,物理层会在包的开头和结尾附加起始和结束字符(适用于PCIe的前两代),然后对数据进行编码并通过所有可用通道以差分方式传输。

2.2 DLLP解包

        当DLLP到达物理层时,物理层会对接收到的位流进行解码,并移除起始和结束字符。随后,剩余的数据包被转发至数据链路层,数据链路层检查是否存在CRC错误,并根据数据包的内容采取相应的操作。由于数据链路层是DLLP的最终目的地,因此DLLP不会被传递到事务层。

三、Ack/Nak 协议(Ack/Nak Protocol)

        Ack/Nak协议提供了硬件层面上的自动重传机制,以实现错误校正功能,如图2-25所示。每个发出的TLP都会附加一个LCRC(链路层循环冗余校验码)和序列号,在接收端进行校验。发送端的重播缓冲区保存每个已发送的TLP副本,直到收到来自相邻设备的确认信息。确认信息是接收端发送的一个Ack DLLP(正确认)数据包,包含最后一个正确接收的TLP的序列号。

        当发送端接收到Ack时,它会将该序列号及之前的所有TLP从重播缓冲区中移除。如果接收端检测到TLP错误,它会丢弃该TLP并向发送端返回Nak(负确认),发送端随后将重新发送所有未被确认的TLP,希望下一次传输能够成功。由于检测到的错误大多是瞬时的,因此重播通常能解决问题。这个过程通常称为Ack/Nak协议。

四、DLLP基本形式

        DLLP的基本形式如图2-26所示,包含一个4字节的DLLP类型字段(可能包含其他信息)和一个2字节的CRC。图2-27展示了通过交换机的内存读取操作,通常情况下步骤如下:

  1. 步骤1a:请求方(Requester)发送一个内存读取请求(MRd TLP),并在其重播缓冲区中保存一份副本。交换机收到MRd TLP后,检查LCRC和序列号。步骤1b:未发现错误,因此交换机向请求方返回一个Ack DLLP,随后请求方从其重播缓冲区中删除该TLP的副本。

  2. 步骤2a:交换机将MRd TLP转发到正确的出口端口(Egress Port),并使用内存地址进行路由,同时在出口端口的重播缓冲区中保存一份副本。最终响应方(Completer)收到MRd TLP并检查是否有错误。步骤2b:未发现错误,因此响应方向交换机返回一个Ack DLLP,交换机端口从其重播缓冲区中清除MRd TLP的副本。

  3. 步骤3a:作为请求的最终目标,响应方检查MRd TLP中的可选ECRC字段。未发现错误,因此请求被传递给核心逻辑。根据命令,设备获取请求的数据并返回带有数据的完成包(CplD TLP),同时将其副本保存到重播缓冲区中。交换机收到CplD TLP并检查是否有错误。步骤3b:未发现错误,因此交换机向响应方返回一个Ack DLLP,响应方将其重播缓冲区中的CplD TLP副本删除。

  4. 步骤4a:交换机解码CplD TLP中的请求方ID字段,并将数据包路由到正确的出口端口,同时在出口端口的重播缓冲区中保存一份副本。请求方收到CplD TLP并检查是否有错误。步骤4b:未发现错误,随后请求方向交换机返回一个Ack DLLP,交换机从其重播缓冲区中清除CplD TLP的副本。请求方检查可选的ECRC字段,未发现错误,因此数据被传递给核心逻辑。

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

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

相关文章

基于Springboot+Vue的在线问诊系统的设计与实现(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

PDFToMarkdown

pdf转markdown 安装Tesseract-OCR项目拉取pytorch安装开始转换转换单个文件转换多个文件总结github开源PDF转markdown git clone https://github.com/VikParuchuri/marker.git 注意该项目有些包的语法需要python3.10,所以需要安装python3.10. 导入pycharm,下面选择取消 安…

Git分支-团队协作以及GitHub操作

Git分支操作 在版本控制过程中,同时推进多个任务> 程序员开发与开发主线并行,互不影响 分支底层也是指针的引用 hot-fix:相当于若在进行分支合并后程序出现了bug和卡顿等现象,通过热补丁来进行程序的更新,确保程序正常运行 常…

【Conda】Conda命令详解:高效更新与环境管理指南

目录 1. Conda 更新命令1.1 更新 Conda 核心1.2 更新所有包 2. 严格频道优先级3. 强制安装特定版本4. 创建与管理环境4.1 创建新环境4.2 激活和停用环境4.3 导出和导入环境4.4 删除环境 5. 清理缓存总结 Conda 是一个强大的包管理和环境管理工具,广泛应用于数据科学…

Linux中环境变量

基本概念 环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。 我们在编写C、C代码时候,在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器…

C#医学影像分析源码,医院影像中心PACS系统源码

医学影像系统源码,影像诊断系统PACS源码,C#语言,C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以…

【数据结构】【链表代码】相交链表

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//先求出两个链表的长度ListNode…

初始爬虫12(反爬与反反爬)

学到这里,已经可以开始实战项目了,多去爬虫,了解熟悉反爬,然后自己总结出一套方法怎么做。 1.服务器反爬的原因 服务器反爬的原因 总结: 1.爬虫占总PV较高,浪费资源 2.资源被批量抓走,丧失竞争力…

【Blender Python】2.结合Kimi生成

概述 结合Kimi这样的AI工具可以生成Blender Python代码,用来辅助生成一些或简单或复杂的图形。当然,出不出错这就不一定了。因为AI所训练的版本可能并不是Blender的最新版本,类似的问题也出现在Godot上。 测试 在kimi中提问,获…

全栈开发从未如此轻松:Bolt.new 让 AI 助力编程体验

你是否曾经因为复杂的开发环境配置而感到烦恼?现在,开发者们有了一个新的选择:StackBlitz 推出的创新平台 Bolt.new,彻底改变了全栈开发的传统方式。这个平台结合了人工智能和WebContainers技术,让你仅仅通过一个浏览器…

Hack Uboot

在硬件评估过程中,经常会遇到采用U-Boot的设备。本文旨在阐述U-Boot是什么,从攻击角度来看它为何如此吸引人,以及这种流行的引导程序所关联的攻击面。 U-Boot 特性 U-Boot,即通用引导加载程序(Universal Boot Loader…

STAR数据集:首个用于大型卫星图像中场景图生成大规模数据集

2024-06-12,在遥感图像领域,由武汉大学等机构联合创建的STAR数据集,标志着场景图生成技术在大规模、高分辨率卫星图像中的新突破。 一、研究背景: 场景图生成(Scene Graph Generation, SGG)技术在自然图像中已取得显著进展&#…

如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue

TOC ssm782基于bootstrap的课程辅助教学网站的设计与实现vue 第1章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期,学校通常采用人工登记的方式对相关的课程信息进行记录,而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模…

Linux基础项目开发1:量产工具——显示系统

文章目录 数据结构抽象使用场景disp_mannger.h Framebuffer编程Framebuffer.c 显示管理最终disp_manager.hdisp_manager.c 测试单元测试代码 数据结构抽象 我们添加的显示管理器中有Framebuffer和web输出,对于两个不同的设别我们需要抽象出同一个结构体类型&#x…

市面上8款AI论文大纲一键生成文献的软件推荐

在当前的学术研究和写作领域,AI论文大纲自动生成软件已经成为提高写作效率和质量的重要工具。这些工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。本文将分享市面上8款AI论文大纲一键生成文献的软件,并特别推…

YOLOv11改进 | 卷积模块 | 分布移位卷积DSConv替换Conv

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文介绍DSConv, DSConv 将…

算法1:双指针思想的运用(2)--C++

1.盛水最多的容器 题目链接:11. 盛最多水的容器 - 力扣(LeetCode) 题目解析: 在解析题目时,我们可以把最直接的方法先列举出来,然后再根据相应的算法原理,来进行优化 思路一:暴力…

Docker 启动 Neo4j:详细配置指南和浏览器访问

Docker 启动 Neo4j:详细配置指南和浏览器访问 文章目录 Docker 启动 Neo4j:详细配置指南和浏览器访问一 Neo4j compose 得 yml 配置二 配置描述三 浏览器访问 这篇文章详细介绍了如何使用 Docker Compose 启动 Neo4j 数据库,包括 docker-com…

菜鸟笔记003 获取目标对象的颜色值

在illustrator中,我们时常要获取一些对象的颜色值,但是一时不知道如何获取,下面我就来讲讲如何获取目标对象的颜色值。 下面以选择对象的最上层对象为例,我们通过查阅javascript编程手册,可以很容易获取下面代码: var sel=app.activeDocument.selection[0]; //获取最上…

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM

【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM 一,文档简介二, 功能实现2.1 软硬件平台2.2 软件控制流程2.3 资源分配概览2.4 EB 配置2.4.1 Dio module2.4.2 Icu module2.4.4 Mcu module2.4.5 Platform module2.4.6 Port module2.4.7 Pwm module 2.5 …