PCIe总线的通信机制:当一个设备要想另一个设备进行读取通信时,请求方requester需要向另一个设备发送请求request,靶向方作为事件完成方completer,以complete Packet的形式返回数据或者错误信息。请求的形式有:内存(memory)、输入输出(IO),配置(Configuration)和消息(Message)

non-posted和posted的区别是是否仅仅将数据发送到接收方就完成动作,non_posted是指请求方发送了一个包含请求的Packet之后,还要得到一个包含completion的Packet的应答,posted指的是发出请求后,不需要completer发送一个包进行应答。显然,posted类型的操作对总线的利用效率更高。

事务层包(Transaction Layer Packet,TLP)的几种类型:

abbreviated :缩写

TLP的传输层示意图:

图中的示意图以发送和接收为例,用户层将数据发送到事务层,事务层给数据加上帧头,并在数据的结尾添加ECRC(端到端CRC校验)信息,再发送给数据链路层(Data Link Layer),护具链路层给接收到的TLP添加网络封包序号和数据链路层CRC校验结果,之后将数据发送到物理层,物理层给接收到的报添加其实和结束标志。

接收方反向操作。

事务层包的结构图为:

图中的TLP Digest即ECRC(End-to-End CRC),是可选项。此外,TLP的长度(包括其中的Header、Data和ECRC)是以DW(double word双字,即四个字节byte)为单位。

带回答的数据传输non-posted,包括Ordinary Read(正常读取)、Locked Read(锁存读取)、IO/Configuration Write(IO端口、配置写入),不带回应的传输为Memory Writes和Message Writes。

1、在Ordinary read(non_posted)时,终端endpoint向system memory系统内存空间发送读取请求(Read Request)

终端的读请求经过两个切换之后进入root,然后root对读请求的包packet进行解码,从解码结果中识别出操作地址,再向操作地址进行读取,将包含数据的completion packet(cplD包)发送到Endpoint。PCIe允许每个包的最大数据量(Max Data Payload)为4KB,但是实际上往往采用更小的Size(128,256,512,1024,2048)。因此,往往一个读请求对应多个ClpD,将大于设定的Size的数据分成多个包进行分包发送。此外,在root将数据发送给请求端方式根据请求数据中的BDF(Bus,device,Function)信息查找对应的endpoint设备.

2、对于posted-write

PCIe中的写操作都是posted的,因此请求方不需要完成方的Copletion信息,写请求有处理器Processor发出,Root接收到写请求指令后将数据通过写入信息通过switch写入到endpoint。由于没有返回Completion,在发生错误时,请求方不知道错误的发生。但是完成方completer会将错误记录到日志(log),然后向root发送报错记录的Message。

关于事务层传输的优先级问题

考虑到一些传输对时间要求的问题,保证这一类数据包的优先发送,PCIe标准中为每一个包都分配了一个优先级,通过事务层包的Header中的TC【2:0】进行区别,(Traffic Class,传输等级),TC越大,传输优先级越高,对应的包也会优先发送。通常支持QoS(Quallition of Service)的PCIe总线系统,对于每一个Tc值都会有一个独立的VC(虚拟通道,viatual channel)相对应,VC就是一个buffer缓存,作用是缓存数据包。

在switch端,switch根据优先级进行包传输,即为端口仲裁(Arbitrition of Port),

pcie数据反_PCIe事务层の详解(一)相关推荐

  1. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  2. Spring事务管理详解_基本原理_事务管理方式

    Spring事务管理详解_基本原理_事务管理方式 1. 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象 ...

  3. [4G5G专题-57]:L2 RLC层-详解RLC架构、数据封装、三种模式:透明TM、非确认模式UM、确认模式AM

    目录 第1章  L2 RLC层的架构 1.1 RAN的架构 1.2 L2架构概述 1.3 RLC软件系统结构图 第2章 TCP/IP协议提供的三种传输服务 ​2.1 TCP 2.2 UDP 2.3 R ...

  4. python中如何反解函数_PyTorch中反卷积的用法详解

    pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d(in_channels, out_channels, kernel_size, str ...

  5. 04-mysql数据备份之mysqldump命令详解

    MYSQL数据备份之mysqldump命令详解 一.mysqldump 简介 mysqldump 是 MySQL 自带的逻辑备份工具. 它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数 ...

  6. pyecharts在数据可视化中的应用详解

    使用pyecharts进行数据可视化 安装  pip install pyecharts也可以在pycharm软件里进行下载pyecharts库包. 下载成功后进行查询版本号 import pyech ...

  7. caffe网络模型各层详解(中文版)

    caffe网络模型各层详解(中文版) 参考网址:https://blog.csdn.net/qq_34220460/article/details/79872830 一.数据层及参数 要运行caffe ...

  8. 关于事务管理的理解和Spring事务管理详解

    转载于:http://www.mamicode.com/info-detail-1248286.html 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000 ...

  9. 【Dash搭建可视化网站】项目12:全球恐怖主义数据大屏制作步骤详解

    全球恐怖主义数据大屏制作步骤详解 1 项目效果图 2 项目架构 3 文件介绍和功能完善 3.1 assets文件夹介绍 3.2 app.py和index.py文件完善 3.3 header.py文件完 ...

最新文章

  1. SQL Server Mysql 对null值理解的不同
  2. tnsname.ora
  3. 用pytorch加载训练模型
  4. k3s containerd和docker命令对比表
  5. 44. 源代码解读-RocketMQ-架构
  6. Java二维码的制作
  7. JFinal 源码导读第四天(3) initRender
  8. 软件开发过程模型综述
  9. Fences v3.0.9 中文破解版,总结了一些注意事项,亲测可用
  10. 【事件相机整理】信号处理、噪声与滤波
  11. 163的邮箱怎么注册?163的邮箱格式怎么填写?
  12. USYD悉尼大学DATA1002 详细作业解析Module6
  13. 用html+js用canvas 实现刮风下雨特效【建议收藏】
  14. Maven构建docker镜像并打包推送到远程私有仓库
  15. 怎么样禁止鼠标和键盘唤醒win7系统睡眠模式转载
  16. Linux下curses函数库的详细介绍
  17. Linux 中的TAB键名字补全使用方法
  18. asp之小旋风服务器
  19. selenium之浏览器弹出新窗口(新页面)
  20. python打开本地浏览器_python如何实现打开浏览器

热门文章

  1. 【VS开发】VS2010 MFC中控件、对话框等背景颜色动态修改的方法
  2. (转载)mysql查询今天、昨天、7天、近30天、本月、上一月数据
  3. Android报错:No resource found that matches the given name 'Theme.AppCompat.Light.NoActionBar'
  4. PyQt5系列(二)Mac下使用py2app打包python项目
  5. 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
  6. iOS UIImage的剪裁、合并实现
  7. VALSE学习(一):high-resolution representation learning-高分辨率表示学习-姿态估计
  8. mysql数据库undo日志恢复_MySQL的undo/redo日志和binlog日志,以及2PC
  9. python中的常量_深入理解Python中的内置常量
  10. python爬虫视频课程推荐_Python 爬虫实战案例(推荐小白研究)