PCIE 学习笔记(入门简介)

这篇具有很好参考价值的文章主要介绍了PCIE 学习笔记(入门简介)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PCIE 学习笔记

书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。

  1. PCIE基础

  1. PCIE和PCI的不同

  • PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是4条。PCI是同步时钟、并行传输。

PCIE 学习笔记(入门简介)
  • PCIE是端到端的传输,一条链路上只能有两个设备,而PCI是共享总线型的。

  • PCIE的lane可以扩展成x2, x4, x8, x16, x32.

  • PCIE没有专门的中断信号,而是通过message报文传输。

PCIE version

Gigabits/second/lane/direction

coding

V1

2.5

8/10b

V2

5

8/10b

V3

8

128/130b

V4

16

128/130b

V5

32

128/130b

  1. PCIE 拓扑

PCIE 学习笔记(入门简介)

PCIE系统主要包括RC、Switch和EP(pcie设备)。一个PCIE树上最多可以有256个PCIE设备。

  1. 组件

  1. RC (ROOT COMPLEX)

RC是PCIE树的根节点,RC可以有一个或者多个PCIE端口(port),它可以根CPU 和memory controller相接,或者说分隔PCIE domain和CPU/MEMORY domain。

类似于PCI 中的HOST主桥。

  1. Switch
PCIE 学习笔记(入门简介)

Switch有一个上游端口和两个或者两个以上的下游端口。上游端口是RC或者上游Switch的下游端口。

Switch中每个端口都可以看成是一个PCI-to-PCI bridge,这些bridge也都有配置空间,跟PCI中一样,配置空间有IO/Memory 的base address和limit size。

Switch中还有一条虚拟的PCI总线连接Switch内部的各个bridge。

Switch还支持crosslink的连接方式,也就是Switch上游端口可以和其他Switch的上游端口连接;下游端口也可以和其他Switch的下游端口连接。

Ingress和Egress:在一次传输中,Switch中的端口可分为ingress port和egress port,划分跟数据流向有关。Ingress port就是数据进来的端口,egress port就是输出流出的端口。

Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。

数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。

  1. EP(endpoint)

EP有三种: legacy EP,PCIE EP,RC integrated EP。

Legacy EP:就是PCI device

PCIE EP:

RC integrated EP:集成在RC内部的EP。

  1. PCIE bridge

PCIE bridge就是PCI-to-PCI/PCI-X bridge

  1. PCIE 层次简介

PCIE 学习笔记(入门简介)

PCIE协议分为如上三层:transaction layer, data link layer, physical layer。

发送端发送的报文以此经过transaction -> data link layer ->physical,经过物理链路到达接收端,又经过physical layer->data link layer -> transaction layer到达接收端。

不同层次的数据包格式如下,这个简单的格式,实际更复杂:

PCIE 学习笔记(入门简介)

在transaction layer,TLP由header+data+ECRC,可能也会有TLP Prefix和TLP digest。

Data link layer接受transaction layer的TLP报文,加上sequence number和LCRC;在data link layer还有自己独有的DLLP,DLLP尽在data link layer以下传输,不会传到transaction layer。

  1. transaction layer service

主要是生成和接受TLP,进行基于credit的flow control,power management。

  • 在初始化和配置中,事务层的作用:

  • 保存处理器设置的链路配置信息;

  • 将物理层链路协商的bus width 和frequency保存在link capabilities结构中。

  • 在TLP生成的接收中,事务层的作用:

  • 为device core发出的请求生成TLP。

  • 将接受到的请求转换成device core可识别的Requests(或者说一种格式吧)

  • 从接受到的完成报文提取出data payload和status信息给到device core。

  • 识别出不支持的TLP,并且采用合适的机制进行处理。

  • 如果支持end-to-end 数据完整性,那么生成CRC,并且更新对应的TLP header。

  • 在流控中,事务层的作用:

  • 追踪传输中TLP的flow control credit信息。

  • 将credit status周期性地传递给对端的transaction layer,这是通过data link layer实现的。

  • 根据credit来阻塞TLP传输。

  • 事务层在ordering的作用:

  • PCI/PCI-X兼容的生产者-消费者ordering model。

  • Relaxed-ordering

  • ID-Based ordering

  • 事务层在电源管理的作用:

  • 软件控制的电源管理

  • 硬件自动控制的电源管理。

  • 事务层在VC和TC上的作用:

  • 结合VC和TC机制,来为不同类型的服务和应用提供不同的服务和QoS。

  • Virtual channel

  • Traffic class

  1. Data link layer service
  • 初始化和电源管理的作用:

  • 接收来自transaction layer的电源状态请求,并将他们传递给physical layer。

  • 将active/reset/disconnected/power managed state传给transaction layer。

  • 数据保护、错误检查、重试:

  • CRC生成。

  • 为了重试机制,保存发送的TLP。

  • 错误检查

  • TLP应答和retry messages。

  • 错误报告和打印。

  1. Physical layer service
  • 接口初始化、maintenance control、状态追踪

  • 复位、热插拔控制和状态

  • 连线的电源管理

  • 协商Width and lane mapping

  • Lane polarity inversion。

  • 生成Symbol和ordered set

  • 8b/10b 编码、解码。

  • 嵌入式的时钟tuning和对齐。

  • Symbol传输和对齐

  • 传输电路

  • 接收电路

  • 接收端的弹性缓冲器

  • 接收端的Multi-lane de-skew

  • DFT feature

  1. PCIE配置空间

PCIE 学习笔记(入门简介)

0x00- 0x3f这段配置空间是PCI、PCIE设备都要支持的。

0x40-0xff这段空间主要存放于MSI中断和电源管理相关的capabilities。

0x100-0xfff是PCIE所独有的。

Capability

Capability是PCI/PCIE配置结构,一个capability对应一个capability point和一段空间,可以把一个capability看做寄存器set,

多个capability组成capability 链表,上一个capability保存下一个capability的point。当然会有一个其实的capability point register。

每种Capability 结构中的capability ID是唯一的,

PCI Power management capability
PCIE 学习笔记(入门简介)
PCIE capability
PCIE 学习笔记(入门简介)

Device capability:max payload等

Link capability:supported link speed/width, current link speed, negotiate link widthdeng 。

PCIE extended capability
PCIE 学习笔记(入门简介)

包含VC/TC mapping table和端口、VC仲裁策略。

  1. 端口仲裁和VC仲裁

VC(virtual channel)

Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。

数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。

PCIE 学习笔记(入门简介)
TC/VC mapping
PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)
Arbitration
PCIE 学习笔记(入门简介)

端口仲裁:当有多个ingress port的 数据包用同一个VC的时候,决定哪个port使用该VC。

VC仲裁:在egress port上,有多个VC,仲裁决定哪个VC从egress port发出,也就是占用link。

  1. Transaction layer

  1. TLP格式

PCIE 学习笔记(入门简介)
TLP Header
PCIE 学习笔记(入门简介)
  1. TLP 类型

Fmt和Type两个字段决定TLP类型。

PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)

主要有五种访问类型:存储器、I/O、配置、message、原子操作。

存储器、I/O、配置读请求;不带数据

存储器、I/O、配置写请求;带数据

存储器、I/O、配置读完成;带数据

I/O、配置写完成;不带数据

消息请求;带数据或不带数据

原子操作:swap、CAS

  1. 三种TLP路由方式

地址路由

通过地址来定位目标设备,用在memory和I/O 请求中。

在Switch的PCI-to-PCI bridge的配置空间中有I/O address、limit和memory address、limit,用来判断地址是否在bridge的访问空间内。

在TLP header中就会有地址字段。

PCIE 学习笔记(入门简介)
ID路由

通过ID来定位目标设备,用在配置读写请求和完成报文。

ID是由bus number, device number和function number组成的。

PCIE 学习笔记(入门简介)

PCI-to-PCI bridge的配置空间中会有primary bus number, secondary bus number和subordinate bus number。Primary bus number是bridge上游bus number,secondary bus number是下游第一个PCI bus number,subordinate bus number是下游最后一个bus number。

隐式路由

用在message报文中,要么是发向RC,要么是从RC广播。

  1. Data link layer

  1. data link layer作用

  • 数据交换

  • 接收事务层TLP并转发到物理层;

  • 从物理层接收TLP转发到事务层。

  • 初始化和电源管理的作用:

  • 接收来自transaction layer的电源状态请求,并将他们传递给physical layer。

  • 将active/reset/disconnected/power managed state传给transaction layer。

  • 数据保护、错误检查、重试:

  • CRC生成。

  • 为了重试机制,保存发送的TLP。

  • 错误检查

  • TLP应答和retry messages。

  • 错误报告和打印。

  1. 组成

PCIE 学习笔记(入门简介)

数据链路层通过ACK/NAK协议发送和接受TLP,主要包括发送部件和接收部件。

发送部件包括Replay buffer、ACK/NAK DLLP接收逻辑和TLP发送逻辑。

接收部件包括Error check逻辑、ACK/NAK DLLP发送逻辑和TLP接收逻辑。

PCIE 学习笔记(入门简介)
  1. 链路层状态机

链路层通过data link control and management state machine(DLCMSM)来控制链路状态,并且在事务层和物理层之间传递链路状态。

PCIE 学习笔记(入门简介)

链路层从物理层获取link上的状态,如下:

  • DL_Inactive: 物理层向链路层报告当前PCIE链路不可用,对端没有连接人和设备,或者没有检测到对端的设备。

  • DL_Feature(optional):物理层报告当前链路可用,进行data link feature exchange(这些feature保存在capability结构中。)

  • DL_Init:物理层通知链路层当前PCIE链路可用,正在对VC0进行流量控制。当前链路层不能接收或者发送TLP和DLLP。

  • DL_Active:当前PCIE链路处于正常工作状态。

链路层向事务层报告link上的状态,如下:

  • DL_Down:告知事务层,当前link处于DL_Inactive状态,没有从对端检测到设备。

  • DL_Up:告知事务层,link上检测到对端设备,正在跟对端的设备进行数据链路层交流。也就是link处于DL_Active状态。

Link状态跳变过程如下:

  • DL_Incative:当hot, warm, cold reset之后,link进入DL_Inactive状态;当时FLR reset不能。

在这个状态下,所有跟链路层状态机有关的信息都被复位到默认值;retry buffer中的数据丢失。

链路层向事务层报告DL_Down状态,事务层接收到DL_Down之后,会丢弃所有的outstanding transaction,停止发送TLP。

链路层本身会丢弃TLP相关的信息,停止生成和接受DLLP。

DL_Inactive -> DL_Init的情况有两种:

  1. 端口不支持DL_Feature特性,软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).

  1. 端口支持DL_Feature,但是被软件disable;软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).

  • DL_Init:改状态分为两个子状态:FC_INIT1和FC_INIT2。在INIT1阶段,向事务层报告DL_Down状态,在FC_INIT2阶段,报告DL_Up状态。

在端口处于DL_Down状态的时候,接收端会丢弃那些接收到的但没有去应答的TLP。

DL_Init ->DL_Active:当流量初始化完成,并且物理层LinkUp为高,进入DL_Active状态。

  1. DLLP报文

PCIE 学习笔记(入门简介)

DLLP主要分为:

  1. ACK

  1. NAK

  1. 电源管理DLLP

  1. 流控DLLP

  1. Vendor-defined DLLP

PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)
  1. ACK/NAK应答机制

参考《PCIE体系结构导读》7.2章节。

发送端和接收端通过sequence number来标记报文。

接收端不会为每个报文回复应答。如果发送端发送了3-5 sequence number报文,接收端NAK应答中的AckNak_Seq_Num是4,说明报文3-4已经被成功接受。

  1. 链路层发送报文的顺序

TLP、DLLP和物理层报文PLP都会使用同一个物理link发送报文,他们之间的顺序是有要求的,一般发送中的报文优先级最高,越是底层的报文优先级越高。

优先级从高到低如下:

  1. 正在传输的TLP和DLLP。

  1. PLP。

  1. NAK DLLP

  1. ACK DLLP

  1. 重新发送replay buffer中的TLP

  1. 其他在事务层等待的TLP。

  1. 其他DLLP。

  1. Physical layer-逻辑子层logical sub-block

4.1 逻辑子层结构图

PCIE 学习笔记(入门简介)
Byte striping/un-striping

将数据分到不同的lane上,或者从多条lane上合并数据。

会进行de-skew操作。

Scrambler、de-scrambler 加扰

加扰:通过线性反馈移位寄存器LSFR产生伪随机序列,数据跟这个伪随机序列进行异或操作。

作用:防止信号有某些固定的重复值,降低EMI干扰

  1. 8/10b编码 2.5GT/s 5.0GT/s

8/10b

为了0、1均衡,如果在一个高速链路上有较多连续的“1”,会将AC耦合电容充满,从而影响这些电容正常工作。

连续传输的0或1不会超过5个。

保证每十位中最多有6个0或者6个1.

但是仅仅如此还不够,可能10位中连续是6个0或者1,那么0或1就会聚集。所以有了CRD(current running disparity),每个byte(symbol)的编码都有两个,一个0多,一个1多

PCIE 学习笔记(入门简介)
传输
PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)
Symbol

编码结果可以通过Dxx.y和Kxx.y表示,前者表示数据字符,后者表示控制字符。

PCIE 学习笔记(入门简介)

Figure4.5中,在TLP前面加上STP symbol,在TLP后面加上END,分别表示TLP的开始和结束。

PCIE 学习笔记(入门简介)

在figure 4.6中,在DLLP前面加上SDP,后面加上END。

PCIE 学习笔记(入门简介)

加上TLP,DLLP的开始符号和结束符号之后再进行byte-striping。

PCIE 学习笔记(入门简介)
  1. 128/130b 编码 8GT/s

每个symbol是8bit。

每条lane上传输sync bit。

PCIE 学习笔记(入门简介)
两位Sync bit

‘b10代表是data block。

‘h01代表ordered set block

Ordered set block

在所有的lane同时传输相同的ordered set block。

Data block

Data block 包括framing token、DLLP、TLP。

Framing token类似于8/10b编码中的控制符号。

PCIE 学习笔记(入门简介)
PCIE 学习笔记(入门简介)
传输

传输TLP和DLLP

PCIE 学习笔记(入门简介)

EDS framing token之后代表要传输ordered set block,从下图figure4.17中可以看出,所有lane上传输的ordered set block是相同的。文章来源地址https://www.toymoban.com/news/detail-460193.html

PCIE 学习笔记(入门简介)
  1. Physical layer-电气子层electrical sub-block

Power management

System architecture

到了这里,关于PCIE 学习笔记(入门简介)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch入门学习:基础铺垫与简介

    声明:以下内容均来自b站 ElasticSearch入门到精通教程,摘录了其中大部分内容,仅为自己学习使用。 一、ElasticSearch基础铺垫 学习ElasticSearch之前我们需要先了解以下什么是全文检索,下面就让我们简单看下它们的概念吧。 1.1 全文检索概念 数据分类: 1、结构化数据: 固定格

    2024年02月05日
    浏览(49)
  • Kafka 简介 + 学习笔记

    先说明消息队列是什么: 亚马逊: 消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。 我的理解:

    2024年02月11日
    浏览(26)
  • 机器学习笔记 - 局部敏感哈希简介

            局部敏感散列  (LSH) 技术,可显著加快对数据的邻居搜索或近似重复检测。例如,这些技术可用于以惊人的速度过滤掉抓取网页的重复项,或者从地理空间数据集中对附近点执行近恒定时间查找。          让我们快速回顾一下其他类型的哈希函数,哈希函

    2024年02月12日
    浏览(47)
  • NLP学习笔记——情感分析一 (简介)

    目录 一、什么是情感分析  二、研究现状及存在问题 1、研究现状 (1). 传统情感分类方法 (2). 短文本情感分类方法 (3). 基于深度学习的方法  2、存在问题 (1). 文化差异 (2).情感词典无法覆盖全部情感词汇 (3). 语义相似不等于情感相似 三、情感分析的应用         情感分析又

    2023年04月08日
    浏览(38)
  • AC695x学习笔记(1): 简介

    目录 前言 一、板级配置 二、常规功能配置 1.功能app模式配置 2.串口(uart)调试信息输出配置 3.系统配置 4.音频Audio配置 4.其他配置 最近在学习和使用杰理的AC695x系列的芯片,在平时的学习和调试中也会经常遇到不少的问题点,且为了防止后续遗忘,故用博客方式进行记录,也

    2024年02月10日
    浏览(41)
  • SQLite 学习笔记1 - 简介、下载、安装

    SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 SQLite 是一个由C语音开发的嵌入式库,具有小型、快速、自包含、高可靠、功能齐

    2024年02月07日
    浏览(40)
  • Python爬虫学习笔记(二)————爬虫简介

    目录 1.爬虫概念 2.爬虫核心 3.爬虫分类  通用爬虫 聚焦爬虫 4.反爬手段 (1)User‐Agent (2)代理IP (3)验证码访问 (4)动态加载网页 (5)数据加密 1.爬虫概念 通过一个程序,根据Url(http://www.taobao.com)进行爬取网页,获取有用信息。 使用程序模拟浏览器,去向服务器发送

    2024年02月15日
    浏览(43)
  • Docker笔记1 | Docker学习和简介

    本系列笔记学习主要参考书籍《Docker-从入门到实践》以及结合官网的教程,仅作为个人学习使用; 推荐大家阅读此书,感谢作者的书籍,学到了很多。 Docker 官方主页:https://www.docker.com Docker 官方博客:https://blog.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker Store:https

    2023年04月21日
    浏览(37)
  • stm32学习笔记-1 STM32简介

    注:笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库。 本教程使用STM32最小系统板(STM32F103C8T6)+面包板硬件平台进行学习。使用面包板可以完成任意硬件的连接,相比于成品的开发板方式,使用面包板更

    2024年02月02日
    浏览(45)
  • Android车载学习笔记1——车载整体系统简介

             汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。 1. 安全车载操作系统         安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态发展已趋于成

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包