一、什么是PCIe

定义:PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准。

传输方式:全双工,TX和RX都采用串行差分信号进行数据传输。

Lane:一条Lane是一对TX差分线加上一对RX差分线,可以有2的n次方条Lane,最多支持32条Lane。

带宽:最高时钟频率是16GHz,则一条Lane的带宽计算 16G * (128/130) / 8 = 1.969GB/s。

发送端将原始数据包封装成协议规定的格式,再转化成串行数据流发出,接收端将串行数据流收集后,按照协议规定逆向解析出原始的数据包

PCIe使用的串行传输方式取代了PCI的并行传输方式,因为并行总线在时钟频率和布线方面会有很多限制,在很多领域高速串行有着取代传统并行的趋势。

二、PCIe结构拓扑

Root Complex: 简称RC,作为PCIe树的根,一方面是连接CPU、Memory子系统,另一方面可以连接多个PCIe端口。

Switch:可以把一个PCIe端口转换成多个PCIe端口。

Endpoint:PCIe终端设备成为Endpoint,它可以挂在RC上,也可以挂在Switch上。

三、PCIe封/拆包流程

一个原始的数据包(Data)通过如上图三层逻辑(Transaction、Data Link、Physical)的处理变成了一个可以发送的包,通过TX发送给对端,反之,在RX接收的包也可以通过如上图三层逻辑解出原始的数据包(Data)。

  1. 事务层(Transaction):给Data增加了Header和ECRC。
  2. 链路层(Data Link):在事务层的基础上增加了Sequence Number和LCRC。
  3. 物理层(Physical):在链路层的基础上增加了Framing和Framing。

四、各层逻辑功能

PCIe上的通信是基于Transaction的,根据地址空间不同可以把Transaction分为4类:Memory、I/O、Configuration、Message。

对于发送端所有被标记位保留的域段都必须填0,对于接收端要忽略所有保留域段的值。

4.1 事务层

4.1.1 Prefixes

Prefixes是Header的扩展,和Header有着相同的域段,Prefixes可以省去,也可以有一个或者多个。

4.1.2 Header--属性

Fmt: Header的格式。

Type:当前Transaction的类型。

TC:传输服务的分类,可以实现差异化的传输服务。

LN:轻量级通知使能。

EP把指定位置Cacheline中的内容拷贝一份到本地,如果有设备更新了Cacheline中的这块内容,就会通知EP你关注的这条Cacheline已被更新,请停止使用你本地的备份。(这种做法主要是为了降低访问延时及带宽占用)

TH:指示Header中是否存在TPH域段。

TD:指示TLP中是否含有Digest。

EP:指示TLP内容是否已经损坏。

Attr[2] & Attr[5:4]:

AT:地址类型。

Length:数据的长度是多少DW。

Transaction ID:  由Requester ID和Tag组成Transaction ID,它是一个全局ID。

字节使能:  如果TH有效,THP域段生效(Last DW和1st DW),4位表示传输的第1个或最后一个DW的哪几位有效。(疑问?)

4.1.3 Header--地址

Transaction的路由规则有三种方式:基于地址、基于ID、隐式路由。

1)基于地址:

 

如果Fmt指示的是4DW,则有64位地址,否则32位地址。

2)基于ID:

  

通过Bus Number、Device Number、Function Number三个组合起来,来告诉Transaction要发往的目的地。

2)隐式路由:

如果是Message Request,它并不包含Header中并不包含具体的地址或者ID来指定Transaction发往的目的地,所以叫做隐式路由。

4.1.4 Payload

要传输的数据。

4.1.5 Digest

如果Header中的TD有效,会有一个DW的ECRC。

​​​​​​​​​​​​​​4.2 链路层

主要是为了确保TLP传输的可靠性,在TLP头部增加了序列号,在TLP尾部增加了校验。

Sequence Number:序列号,递增产生,达到最大值后翻转成0。

LCRC:Link层的CRC。

​​​​​​​​​​​​​​4.3 物理层

​​​​​​​4.3.1 Logical Sub-Block

主要实现发送逻辑和接收逻辑。

发送逻辑:

  1. 根据速率选在8b/10b或128b/130b编码。
  2. 将要发送的数据根据lane的数量转换成对应的串行数据。
  3. 增加帧头帧尾,如下图(lane*4的场景)。
  4. 数据加扰。

接收逻辑:

与发送逻辑过程相反。

​​​​​​​4.3.2 Electrical Sub-Block

主要实现差分信号的收发。

学习笔记: PCIe 4.0 协议(一)-- 概述相关推荐

  1. OpenHarmony学习笔记——I2C驱动0.96OLED屏幕

    文章目录 前言 I2C简介 硬件连接 编程实现 创建代码框架 初始化并复用GPIO 初始化I2C0 初始化OLED 从机地址 OLED初始化配置 功能代码 总结 目录 前言 前面介绍了一些关于在Hi3 ...

  2. 【人工智能学习笔记】人工智能里的数学——概述

    系列文章目录 [人工智能学习笔记]人工智能里的数学--概述 [人工智能里的数学]一元函数微分学 [人工智能里的数学]线性代数基础 [人工智能里的数学]多元函数微分学 前言 与软件开发相比,人工智能领域 ...

  3. Python学习笔记28:从协议到抽象基类

    Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...

  4. Java入门学习笔记——郝斌(一)概述及面向对象

    Java入门学习笔记--郝斌 1.Java概述 java的起源和发展 java的特点 java的应用领域 java学习目标 环境变量的设置 为什么要设置path? path的设置 有关classpat ...

  5. 【计算机网络学习笔记07】PPP协议、IP编址、NAT技术

    [计算机网络学习笔记07]PPP协议.IP编址.NAT技术 一.PPP协议 是TCP/IP网络中最重要的点到点的数据链路层协议. 1 PPP协议的组成 1)链路控制协议:建立并维护数据链路连接(身份验 ...

  6. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  7. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装

    Unity DOTS 学习笔记1 - ECS 0.50介绍和安装 为什么学习这个技术 ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计 ...

  8. 基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

    基于MVS的三维重建算法学习笔记(一)- MVS三维重建概述与OpenMVS开源框架配置 声明 1. MVS(Multi-view stereo)概述 稀疏重建与稠密重建的区别 稀疏重建--SFM(S ...

  9. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  10. Mr.J--HTTP学习笔记(一)-- HTTP简要概述

    今天看了一本书<HTTP权威指南>,记录一下学习笔记,便于闲时阅读. HTTP HTTP 使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏 ...

最新文章

  1. layui列表显示缩略图_layUI实现列表查询功能
  2. MySQL安装教程,包含所有平台(图解)
  3. 认清SQL_Server_2005的基于行版本控制的两种隔离级别
  4. 界面设计语言_使用任何语言设计界面的提示
  5. 夺命雷公狗ThinkPHP项目之----企业网站2之数据库的快速设计
  6. java基础Runtime类的使用
  7. UNIX网络编程——使用线程的TCP回射服务器程序
  8. aws rds监控慢sql_如何使用Web控制台和AWS CLI停止AWS RDS SQL Server
  9. 如何使用python编程画图_【Python开发】使用python中的matplotlib进行绘图分析数据...
  10. mysql事件【定时器】
  11. 2020年度博客之星发榜了,第一次参加,第70名,感谢给我投票的老铁们,2021继续努力!
  12. OBS录制的时候黑屏怎么办
  13. 2021-11-09 jQuery常用方法及事件
  14. 英语音标中KK音标、IPA音标、DJ音标各是什么意思
  15. 今日芯声 | 每天徒步7公里找信号?印度不愧是开挂民族
  16. 非线性规划(二): Matlab 求解约束极值问题
  17. 李航《统计学习方法》第二版第一章-泛化误差
  18. 爬取汽车之家汽车品牌型号系列数据
  19. iuap助力中建五局打造数字化创新集成平台
  20. 狂神mysql笔记 md_MyBatis狂神总结笔记

热门文章

  1. RDP报表设置Tomcat服务自动启动详细教程
  2. 删除pdf(论文)的行号
  3. DF1协议的CSP寻址
  4. linux下运行exe程序之wine的使用与安装
  5. chinapub matlab,MATLAB与通信仿真
  6. 01-C语言之父:丹尼斯·里奇
  7. OpenGL编程指南 示例笔记(2)--独立地移动光源
  8. python基础--综合练习(之王者荣耀小游戏)
  9. linux通过端口测试网速,【转】Linux下测试网速的工具
  10. win10 Delphi7 Help帮助文档的安装