1. PCIe基础知识
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。
与大多数总线一样,PCIe总线也包括电气属性和协议组成两部分。完整地了解PCIe是相对复杂的,所以从应用角度来讲,我先从基本的协议入手,对PCIe有个初步的认识。拓展学习可以参考官方协议规范文档《PCI Express Base Specification》。
PCIe 规范对于设备的设计采用分层的结构,有事务层、数据链路层和物理层组成,各层有都分为发送和接收两功能块。
发送端,应用程序(设备核A)在事务层形成事务层包(TLP——Transaction Layer Package),储存在发送缓冲器里,等待推向下层。在数据链路层,在TLP 包上再串接一些附加信息,这些信息是对方接收TLP 包时进行错误检查要用到的,形成数据链路层包(DLLP——Data Link Layer Package);在物理层,对DLLP 包进行编码,占用链路中的可用通道,从发送器发送出去。
在接收端,实际上是发送端的“逆”过程。如果说发送端是在不断组包,那么接收端就是不断的拆包,最后提取出有用的数据信息供B设备的应用程序使用。

整个过程实际上和以太网的过程很相似,都是在不同层级上进行数据的扩展。在FPGA的开发过程中,实际上从事务层到物理层都是封装好了的,组成标准IP核。用户通过IP核要求的总线协议(如AXI4-Stream)与之进行数据交换。

2. 事务层协议
2.1 数据包结构
有了IP核之后,实际上我们最关心的就是事务层包的数据格式。
事务层数据包(TLP)主要由:一个或多个可选的前缀(TLP Prefixes)、一个帧头(TLP Header)、一个数据有效负载(Data Payload)和一个可选的摘要(TLP Dignest)组成,下面简单介绍一下各部分。

  • 前缀(TLP Prefixes)

有PCIe V2.1总规范引入,主要起扩展帧头的作用。如果用不到,可以省去该字段

  • 帧头(TLP Header)

TLP Header是TLP中最重要的标志,不同的TLP其头的定义并不相同。TLP 头标长3 或者4 个DW(DW = double word——双字,32位),格式和内容随事物类型变化;

  • 数据有效负载(Data Payload)

即主设备要传输的数据。数据的长度最小为0,最大为1024DW,视具体情况而定。该字段也是一个可选项,因为有些TLP并不需要传递数据,如存储器读请求、配置和I/O写完成TLP也不需要。

  • 摘要(TLP Dignest)

摘要是一个可选项,长度为1DW。一个TLP是否需要Dignes是由Header中TD字段决定。如果接受设备支持ECRC校验的功能的话,则该字段用来防止TLP中的数据校验码ECRC。

2.2 帧头含义详述

TLP Header长3 DW或者4 DW,格式和内容随事务类型的不同而不同。但是对于所有TLP Header来讲,都拥有相同的第一个DW定义,如下图所示(R:Reserved,为0)。

  • Fmt([31:29])——Format of TLP

Fmt是关于头标长度和该TLP是否有数据(字段)的信息,如下图所示。实际上是3 DW还是4 DW是根据要访问目标的地址位宽有关。

  • Type([28:24])

    Type的5位编码与Fmt字段一起用于规定事务类型、头标长度和是否有数据负载,如下图所示,只列举了一部分常用的类型,完整版可以查阅官方协议规范。

  • TC([22:20])

    Traffic Class,传输类型也代表优先级,优先级高的先得到服务。这里是3比特,说明可以分为8个等级,0-7,TC默认是0,数字越大,优先级越高。

  • Attr([18]、[13:12])

    该字段表述TLP的属性,由3位组成,注意不是连续的。具体含义见规范。

  • TH([16])

    位为 1 表示当前 TLP 中含有 TPH(TLP Processing Hint)信息,TPH 是 PCIe V2.1 总线规范引入的一个重要功能。TLP 的发送端可以使用 TPH 信息,通知接收端即将访问数据的特性,以便接收端合理地预读和管理数据。

  • TD([15])

    表示 TLP 中的 TLP Digest(之前说ECRC可选)是否有效,如果这个这个bit置起来,说明该TLP包含ECRC,接收端应该做CRC校验;

  • EP([14])

    表示当前 TLP 中的数据是否有效,为 1 表示无效,为 0 表示有效。

  • AT([11:10])

    Address Type,地址种类,与 PCIe 总线的地址转换相关,可暂时不考虑。

  • Length([9:0])

    用来描述 TLP 的有效负载(Data Payload)大小。PCIe 总线设置 Length 字段的目的是提高总线的传送效率。Length 字段以 DW 为单位,其最小单位为 1 个 DW。

PCIe(peripheral component interconnect express)相关推荐

  1. Linux PCI驱动框架分析:(Peripheral Component Interconnect,外部设备互联)

    <DPDK 20.05 | rte_pci_bus思维导图 | 第一版> <linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作> <Linux指令:ls ...

  2. 【扫盲】硬盘接口『 SATA 、 mSATA 、 m.2 ( NGFF )、PCI-E ( PICe 、 PCI Express ) 』及其协议 『 NVMe 、 AHCI 』

    参考: What is the IDE interface and what does it consist of? - https://itigic.com/ide-ata-pata-and-ata ...

  3. 主成分分析(principal component analysis, PCA)公式

    主成分分析(principal component analysis, PCA)公式 主成分分析 摘要 什么是主成分 求解 PCA 的公式 数学证明 程序验证 参考文献 主成分分析 摘要 主成分分析作 ...

  4. 主成分分析(Principal Component Analysis, PCA)原理全面解析与应用

    目录 1. PCA算法概述 2. 数据预处理 3. 协方差矩阵计算 4. 特征值与特征向量 5. 选择主成分 6. 数据投影 7. PCA的优缺点 8. PCA算法应用 主成分分析(Principal ...

  5. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例

    主成分分析及其现代解释 4. 主成分分析及其现代解释 Principal Component Analysis and Its Modern Interpretations 4.1 几何学解释 The ...

  6. Google V8 编译方法(visual c++ 2008 express)(学习+原创)

    参考资料: (不同 VS 版本的可以看这里,有很详细介绍的,不过是鸟文··)http://code.google.com/p/v8/wiki/BuildingOnWindows http://code ...

  7. 独立成分分析(Independent component analysis, ICA)

    作者:桂. 时间:2017-05-22 12:12:43 链接:http://www.cnblogs.com/xingshansi/p/6884273.html 前言 今天群里冒出这样一个问题:群里谁 ...

  8. SPSS 主成分分析(Principal Component Analysis,PCA)

    定义 主成分分析是利用降维的思想,在损失很少信息的前提下把多个指标转化为几个综合指标的多元统计方法. 转化生成的综合指标称之为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,这 ...

  9. PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现

    关于PCA的原理参见: PCA原理 PCA:一种通过特征的线性组合来实现降维的方法,目的就是在尽可能好的代表原始数据的前提下,通过线性变换将样本数据投影到地位空间中. 如图示意,二维样本分别投影到e1 ...

最新文章

  1. JAVA中rootpanel_Java JPanel.setFocusCycleRoot方法代码示例
  2. 中科微研课题上犹授牌-农业大健康·李喜贵:谋定功能性农业
  3. simulink中from与goto模块的使用
  4. 泛型Dictionary的用法详解
  5. SQL JOIN连接分类[转]
  6. zsh: command not found: service
  7. static class 静态类(Java)
  8. MaxCompute中如何通过logview诊断慢作业
  9. AHP中特征向量、权重值、CI值等指标如何计算?
  10. 计算机程序设计员( 国家职业标准三级),计算机程序设计员国家职业标准
  11. Stata软件做门槛回归模型(汉森个人主页上的代码)
  12. 弘扬时代新风建设网络文明,小趣带你揭秘肾透明细胞癌致瘤机制
  13. JavaScript 基础(002_Event Bubbling)
  14. JS--页面加载完毕后执行
  15. 计算机基础和photoshop的应用,一级计算机基础与Photoshop应用真题
  16. mx250是什么_分析mx250显卡什么级别
  17. 信道估计(channel estimation)图解——从SISO到MIMO原理介绍
  18. SCI审稿流程(转)
  19. 机器学习——EM和GMM(基于李航老师的推导)
  20. 上海社科院:沪30岁以下青年购房压力

热门文章

  1. Spark Standalone -- 独立集群模式、Spark 提交任务的两种模式、spark在yarn上运行的环境搭建、自己写的spark代码如何提交到yarn上并运行...
  2. python爬虫天气数据_Python爬取真气网天气数据
  3. 2022华为杯A题第二问详细思路分析移动场景超分辨定位问题
  4. 大学排行榜 : qs全球中国区大学排行榜
  5. 【MySQL主从复制】使用MySQL8.0.17的clone技术在线搭建主从复制环境
  6. 项目管理全过程最佳实践(上)
  7. Vue+wangeditor富文本+element——--上传+下载文件+图片预览
  8. Linux与MySql学习之旅(一): 离线安装MySQL和问题解决
  9. 1. 什么是ThingsBoard
  10. java代码导出excel支持数据有效性验证,即excel单元格可以下拉选择