【FPGA】高速接口PCIe

发布于:2025-07-12 ⋅ 阅读:(23) ⋅ 点赞:(0)

仅供参考

目录

PCIe协议

概述

总线信号

一、信号线组成

二、关键辅助信号

三、功能详解

配置空间

一、两种配置请求的核心区别

二、配置请求的传递流程

场景示例(3级PCI总线拓扑):

三、PCI桥的关键角色

四、配置空间访问的硬件支撑

五、Type 01h请求的报文结构

六、为什么设计两种请求类型?

七、PCIe的演进与兼容

总结

基本配置空间

一、PCI配置空间核心框架

二、Type 00h配置空间寄存器详解

寄存器布局与功能

更详细的见一步一步开始FPGA逻辑设计 - 高速接口之PCIe_pcie expansion rom-CSDN博客

关键寄存器功能

三、配置空间访问流程

系统初始化时的枚举过程

四、高级特性扩展

五、PCI vs PCIe配置空间差异

事务层协议

TLP格式

 TLP Header (必选)

Data Payload (可选)

TLP Digest (可选)

不同事务的TLP示例

内存写请求(MWr)TLP

配置读请求(CfgRd0)TLP

TLP路由方式

存储器和配置读写请求TLP

中断


一步一步开始FPGA逻辑设计 - 高速接口之PCIe_pcie expansion rom-CSDN博客

PCIe协议

概述

单端并行信号(PCI总线)

高速差分信号(PCIe总线):更高的时钟频率,使用更少的信号线,完成之前需要许多单端并行数据信号才能到达的总线宽度

PCI总线使用并行总线结构,在同一条总线上的所有设备共享带宽,而PCIe总线使用了高速差分总线,采用端到端的连接方式(每一条PCIe链路中只能连接两个设备)

PCIe总线除了在连接方式上与PCI总线不同之外,还使用了一些在网络通信中使用的技术,如支持多种数据路由方式,基于多通路的数据传递方式,和基于报文的数据传送方式,并充分考虑了在数据传送中出现服务质量的问题

PCIe总线规范 总线频率 单Lane的峰值带宽 编码方式 单个Lane带宽
1.x 1.25GHz 2.5GT/s 8/10b编码 250MB/s
2.x 2.5GHz 5GT/s 8/10b编码 500MB/s
3.0

4GHz

8GT/s 128/130b编码

1GB/s

在PCIe总线中,使用GT计算PCIe链路的峰值带宽。GT是在PCIe链路上传递的峰值带宽,其计算公式为 总线频率*数据位宽*2

PCIe3.0的原始数据传输带宽应该是10GT/s,实际却只有8.0GT/s(在1.0,2.0标准中,采用的是8b/10b的编码方式,也就是说每传输8比特有效数据,要附带2比特的校验位,实际要传输10比特数据),有效带宽=原始数据传输带宽*80%。而3.0标准中,使用了更为有效的128b/130b编码方案从而避免20%带宽损失,3.0的浪费带宽仅为1.538%,基本可以忽略不计,因此8GT/s的信号不再仅仅是一个理论数值,是一个实在的传输值

PCIe总线采用串行连接方式,并使用数据包(Packet)进行数据传输,采用这种结构有效去除了在PCI总线中存在的一些边带信号,如INTx和PME#等信号。在PCIe总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层

PCIe总线的层次组成结构与网络中的层次结构有类似之处,但PCIe总线的各个层次都是使用哦硬件逻辑实现的。在PCIe体系结构中,数据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。同样接收端的数据也需要通过物理层、数据链路层和事务层,最终到达Device Core

在PCIe总线层次结构中,事务层最易理解,同时也与系统软件直接相关

事务层定义了PCIe总线使用总线事务,其中多数总线事务与PCI总线兼容。这些总线事务可以通过Switch等设备传送到其他PCIe设备或RCRoot Complex),RC也可以使用这些总线事务访问PCIe设备。事务层接收来自PCIe设备核心层的数据,并将其封装为TLP(Transaction Layer Packet)后,发向数据链路层。此外事务层还可以从数据链路层中接收数据报文,然后转发至PCIe设备的核心层。事务层还使用流量控制机制保证PCIe链路的使用效率

在 PCIe(PCI Express)总线架构中,RC 指的是 Root Complex(根复合体)。它是整个 PCIe 系统的核心和起点。

你可以把 Root Complex 想象成 CPU 与整个 PCIe 设备世界之间的“总管家”和“翻译官”。它的作用至关重要:

连接处理器和内存系统: RC 直接连接到 CPU(或系统芯片组)和系统的主内存(RAM)。这是 PCIe 通信的源头和目的地。

生成 PCIe 事务: 当 CPU 需要访问一个 PCIe 设备(比如读取显卡数据、写入硬盘数据)时,RC 负责将这些 CPU 的请求(内存读/写、I/O 读/写等)转换成符合 PCIe 协议规范的总线事务(TLP - Transaction Layer Packet)。

接收并处理 PCIe 事务: 当 PCIe 设备需要向 CPU 发送数据(如网卡收到数据包、设备发送中断)时,RC 接收这些来自 PCIe 总线的 TLP,并将其转换成 CPU 能理解的格式,传递给 CPU 或存入系统内存。

提供 PCIe 层次结构的根: RC 是 PCIe 树状拓扑结构的根节点。所有 PCIe 通信流(包括通过 Switch 传输的)最终都源于或流向 RC。

聚合根端口: 一个 RC 内部通常包含一个或多个 Root Port(根端口)。这些根端口是物理的 PCIe 连接点(通常是主板上的 PCIe 插槽或焊点)。

每个 Root Port 在逻辑上相当于一个虚拟的 PCI-to-PCI Bridge(在 PCI 树中),它连接到一个 PCIe Link(链路)。

这些 Link 可以直接连接到一个 Endpoint(端点设备,如显卡、网卡),或者连接到一个 Switch(交换机)。Switch 进一步扩展出多个端口,可以连接更多的 Endpoint 或其他 Switch。

资源集中器: RC 集中了系统资源(如内存地址空间、I/O 地址空间、中断资源等),并负责在启动时(枚举过程)向连接在其下的所有 PCIe 设备分配这些资源(BARs - Base Address Registers)。

协议转换: RC 处理 CPU 使用的系统总线协议(如 Intel 的 DMI, AMD 的 Infinity Fabric)与 PCIe 协议之间的转换。

错误处理和高级功能: RC 通常负责处理 PCIe 链路级错误报告、高级电源管理、热插拔支持(如果端口支持)等系统级功能。

简单来说:

RC 是 CPU 与 PCIe 设备之间的必经之路。 没有 RC,CPU 无法和任何 PCIe 设备通信。

RC 是 PCIe 世界的“总闸门”和“调度中心”。 所有进出 PCIe 设备的数据流都由它管理和路由。

RC 是 PCIe 树状结构的“根”。 所有设备都直接或间接地连接在 RC 下面。

为什么在描述事务传输时会提到 RC?

因为用户层(软件)发起的对 PCIe 设备的任何访问(读/写内存、I/O、配置空间),最终都必须由 CPU 发起请求,经过 RC 转换成 PCIe 事务(TLP)。这个 TLP 被发送出去,经过可能的 Switch 等设备,到达目标设备。设备返回的响应 TLP 也最终会回到 RC,由 RC 处理并递交给 CPU。

事务是从 RC 发出,经过 Switch 等设备,传送到目标 PCIe 设备;或者从 PCIe 设备发出,经过 Switch 等设备,传送回 RC。PC 主机侧的核心就是 RC。

总结:RC (Root Complex) 是 PCIe 架构中连接处理器/内存子系统与 PCIe 设备层次结构的核心组件,负责发起和终止 PCIe 事务、管理拓扑结构、分配资源以及处理协议转换。 它是整个 PCIe 通信的基石

总线信号

在处理器系统中,×16 PCIe插槽的信号配置及辅助信号详解如下:


一、信号线组成

32对差分信号(64根线)

:信号命名中的 T (Transmit) 和 R (Receive) 是从插槽视角定义的。对RC而言,PETxx 是输出,PERxx 是输入;而对插入的设备(如显卡),方向相反。

发送链路(TX)
PETp0~15 / PETn0~15(共16对)
作用:从Root Complex(RC)或设备发出数据至链路对端。

接收链路(RX)
PERp0~15 / PERn0~15(共16对)
作用接收对端设备(如显卡、SSD)传来的数据。


二、关键辅助信号

PCIe总线依赖以下辅助信号实现基础功能:

信号名 方向 作用
PRSNT# 设备→插槽 存在检测:设备插入时拉低,通知系统有设备存在。双引脚设计(PRSNT1#/PRSNT2#)可检测供电需求(如×16插槽需75W)。
CLKREQ# 设备→系统 时钟请求:设备需要工作时拉低,激活参考时钟(REFCLK);空闲时可拉高以节能。
REFCLK+/- 系统→设备 参考时钟:提供100MHz差分时钟,同步数据收发(PCIe 1.0-4.0必需,PCIe 5.0+可选)。
PERST# 系统→设备 全局复位:冷启动或热复位时拉低,强制设备复位至初始状态。
WAKE# 设备→系统 唤醒信号:设备从低功耗状态唤醒系统时触发(如网卡收到网络包)。
SMCLK/SMDAT 可选 SMBus接口:用于设备管理(如读取EEPROM信息),非必需但常见于高端设备。

三、功能详解

PRSNT#(存在检测)

物理上通过插槽引脚长短实现热插拔支持:短引脚(PRSNT#)先断开,长引脚(电源)后断开,避免电弧。

系统通过检测PRSNT1#/PRSNT2#的电平组合,判断设备功耗需求(如×16设备需75W时,两引脚均接地)。

CLKREQ#(时钟请求)

节能关键:设备休眠时可关闭REFCLK以降低功耗(符合PCIe电源管理规范 ASPM/L1)。

REFCLK(参考时钟)

早期PCIe依赖外部时钟同步,PCIe 5.0+ 支持基于数据流的时钟恢复(无REFCLK模式),但兼容性仍保留此信号。

PERST#(复位控制)

冷启动时由RC控制拉低≥100ms;热复位时拉低≥1ms,确保设备状态重置。

WAKE#(唤醒事件)

需配合系统BIOS/OS的电源管理策略,例如从睡眠状态(S3)唤醒主机。

配置空间

其中HOST主桥或者PCI桥使用Type 00h配置请求,访问与HOST主桥或者PCI桥直接相连的PCI Agent设备或者PCI桥;而使用Type 01h配置请求,需要至少穿越一个PCI桥,访问没有与其直接相连的PCI Agent设备或者PCI桥。在PCI总线中,只有PCI桥能够接收Type 01h配置请求。Type 01h配置请求不能回执二发向最终的PCI Agent设备,而只能由PCI桥将其转换为Type 01h继续向其他PCI桥,或者转换为Type 00h配置请求发向PCI Agent设备

一、两种配置请求的核心区别

请求类型 发起者 目标设备 拓扑位置 转换规则
Type 00h HOST主桥/PCI桥 直接连接的PCI Agent或下级PCI桥 同一条总线 无需转换
Type 01h HOST主桥/上游PCI桥 非直连设备(跨桥访问) 下游其他总线 必须由PCI桥转换

二、配置请求的传递流程

场景示例(3级PCI总线拓扑):

访问PCI Agent A(与HOST主桥直连):

HOST主桥发出 Type 00h 请求 → 直接抵达目标

访问PCI Agent B(需跨PCI桥1):

Step 1:HOST主桥发出 Type 01h 请求 → PCI桥1接收

Step 2:PCI桥1将其转换为 Type 00h 请求 → 发送至PCI Agent B

三、PCI桥的关键角色

PCI桥是Type 01h请求处理的唯一枢纽,其行为遵循以下规则:

请求拦截

仅PCI桥能接收Type 01h请求(Agent设备会忽略该请求)

地址解码

检查请求中的目标总线号(Bus Number):

若匹配自身次级总线号 → 转换为Type 00h发送到下游

若目标总线在下游更远处 → 原样转发Type 01h到下一级桥

拓扑管理

每级PCI桥维护三组总线号

Primary Bus(上游总线)

Secondary Bus(直连的下级总线)

Subordinate Bus(下游所有总线的最大编号)


四、配置空间访问的硬件支撑

PCI规范通过以下机制实现该逻辑:

专用配置周期生成

HOST主桥通过CF8h/CFCh端口(x86)或ECAM机制(PCIe)发起配置请求

PCI桥的配置寄存器

Bridge Control Register:控制转发行为

Primary/Secondary/Subordinate Bus Number:定义总线范围

IDSEL信号

Type 00h请求中,通过物理引脚选择目标设备(每个设备独占一条IDSEL)

五、Type 01h请求的报文结构

关键字段定义(以32位地址为例):

| 31:24    | 23:16     | 15:11       | 10:8      | 7:0        |
|----------|-----------|-------------|-----------|------------|
| 保留(0)  | 目标总线号 | 目标设备号   | 目标功能号 | 寄存器偏移 |
  • 目标总线号:决定请求在哪条总线上转为Type 00h

  • 设备/功能号:用于最终Type 00h请求的IDSEL选择


六、为什么设计两种请求类型?

拓扑隔离性

避免总线号冲突(每条总线独立编号)

功耗优化

非目标总线上的设备无需响应配置请求

扩展性

支持任意深度的树状拓扑(理论最多256条总线)

兼容性

与PCI桥的转发逻辑解耦,简化设备设计


七、PCIe的演进与兼容

PCIe继承了此机制但优化了实现:

配置请求封装

Type 00h/01h被封装为TLP(Transaction Layer Packet)

ECAM替代端口IO

将配置空间映射到MMIO区域(增强型配置访问机制)

转发逻辑不变

PCIe Switch中的上游端口仍执行PCI桥的Type 01h转换逻辑


总结

PCI总线的双类型配置请求是支撑其树状拓扑的核心设计:

  • Type 00h → 本地总线访问(垂直方向)

  • Type 01h → 跨桥路由寻址(水平方向)
    通过PCI桥的智能转换(Type 01h→Type 00h),实现了对复杂层级设备的无缝访问,该设计至今仍是PCIe体系的基础逻辑。

基本配置空间

一、PCI配置空间核心框架

特性 说明
空间大小 64字节(0x00~0x3F),所有PCI设备必须实现
访问方式 HOST主桥通过配置读写事务访问(如x86的CF8h/CFCh端口或PCIe的ECAM机制)
地址属性 配置空间地址属于PCI总线域地址(与内存域地址隔离)
空间类型 分三类:PCI Agent设备 / PCI桥 / Cardbus桥片(本文聚焦Agent设备的Type 00h)

二、Type 00h配置空间寄存器详解

寄存器布局与功能

更详细的见一步一步开始FPGA逻辑设计 - 高速接口之PCIe_pcie expansion rom-CSDN博客
关键寄存器功能

设备标识(0x00~0x03)

Vendor ID (16b):设备制造商ID(如Intel=8086h, NVIDIA=10DEh)

Device ID (16b):具体设备型号ID(由厂商分配)

控制与状态(0x04~0x07)

Command Register (16b)

Bit 0 : I/O Space Enable   # 启用I/O访问
Bit 1 : Memory Space Enable # 启用内存访问
Bit 2 : Bus Master Enable   # 允许设备发起DMA
Bit 3 : Special Cycles      # 监听特殊周期
Bit 6 : Parity Error Enable # 奇偶校验使能

Status Register (16b)

Bit 4 : Capabilities List  # 扩展能力链表存在标志
Bit 5 : 66MHz Capable       # 支持66MHz总线

类别码(0x08~0x0B)

  • Class Code (24b):设备功能分类

0x03_00_00 : 显示控制器(显卡)
0x01_00_00 : SCSI控制器(硬盘)
0x02_00_00 : 网络控制器(网卡)

基址寄存器 BARs(0x10~0x27)

  • 作用:定义设备需要的内存或I/O地址空间

  • 类型判断

BAR[0] = 0xFFFF0001  # Bit0=1 → I/O空间
BAR[1] = 0xFFFFFFF0  # Bit0=0 → 内存空间

操作流程

OS向BAR写入全1(0xFFFFFFFF)

设备返回可分配的资源大小(低位0的位数表示范围)
例:0xFFFF0000 → 需要64KB空间

中断配置(0x3C~0x3F)

Interrupt Line (8b):设备连接的中断线(如APIC的IRQ号)

Interrupt PIN (8b):硬件中断引脚(INTA#=1, INTB#=2,...)


三、配置空间访问流程

系统初始化时的枚举过程

四、高级特性扩展

Capabilities Pointer (Status寄存器的Bit4)

指向扩展能力链表(偏移0x34),支持PCIe高级功能:

MSI/MSI-X:消息信号中断

Power Management:电源管理

PCIe Express Capability:链路速率/宽度控制

Header Type (0x0E)

Bit7=0:标准Agent设备

Bit7=1:多功能设备(每个功能独立配置空间)


五、PCI vs PCIe配置空间差异

特性 PCI PCIe
访问机制 I/O端口 (CF8h/CFCh) ECAM (内存映射)
空间大小 64字节 (基本) 4KB (含扩展能力区)
中断支持 INTx#引脚 MSI/MSI-X (优先)
配置寄存器 直接定义 封装为TLP包传递

:PCIe完全兼容PCI配置空间,前64字节结构一致。

事务层协议

事务层是PCIe总线层次结构的最高层,该层次将接收PCIe设备核心层的数据请求,并将其转换为PCIe总线事务,PCIe总线使用的这些事务在TLP头中定义

在PCIe总线中,Non-Posted总线事务分为两部分进行,首先是发送端向接收端提交总线读写请求,之后接收端再向发送端发送完成(Completion)报文。PCIe总线使用Split传送方式处理所有Non-Posted总线事务,存储器读、I/O读写和配置读写这些Non-Posted总线事务都使用Split传送方式。PCIe的事务层还支持流量控制和虚通路管理等一系列特性

TLP格式

(79 封私信 / 81 条消息) 跟小灰灰一起学PCIe——PCIe总线事务层TLP中Fmt字段和Type字段 - 知乎

2.2 PCIe控制器——传输层——数据报文TLP格式_pcie tlp报文-CSDN博客

当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或多个TLP,之后才能通过PCIe总线的各个层次发送出去

TLP的格式
TLP Prefix(optional) TLP Prefix(optional) TLP Head Data Payload TLP Digest(optional)

一个完整的TLP由1个或者多个TLP Prefix、TLP头、Data Payload(数据有效负载)和TLP Digest组成。TLP头是TLP最重要的标志,不同的TLP其头的定义并不相同。TLP头包含了当前TLP的总线事务类型、路由信息等一系列信息。在一个TLP中,Data Payload的长度可变,最小为0,最大为1024DW。

TLPDigest是一个可选项, 一个TLP是否需要TLP Digest由TLP头决定。DataPayload也是一个可选项,有些TLP并不需要DataPayload,如存储器读请求、配置和I/O写完成TLP并不需要Data Payload。

TLPPrefix由PCIe V2.1总线规范引入,分为LocalTLP Prefix和EP-EP TLP Prefix两类。其中Local TLP Prefix的主要作用是在PCIe链路的两端传递消息,而EP-EP TLP Prefix的主要作用是在发送设备和接收设备之间传递消息。

TLP头由3个或者4个双字(DW)组成。其中第一个双字中保存通用TLP头,其他字段与通用TLP头的Type字段相关。一个通用TLP头由Fmt、Type、TC、Length等字段组成,如图5‑2所示。

如果存储器读写TLP支持64位地址模式时,TLP头的长度为4DW,否则为3DW。而完成报文的TLP头不含有地址信息,使用的TLP头长度为3DW。

 TLP Header (必选)
字段 位宽 作用
Fmt 2b 包头格式:
00=3DW无数据, 01=4DW无数据, 10=3DW带数据, 11=4DW带数据
Type 5b 事务类型:
00000=内存读, 00001=带锁读, 00010=内存写, 00100=配置读
TC 3b 流量类别(Traffic Class),用于QoS调度
Attr 3b 属性:宽松排序(Relaxed Ordering)/无监听(No Snoop)/ID-based排序
TH 1b TLP处理提示(可选)
TD 1b TLP摘要存在位(1=有ECRC)
EP 1b 中毒位(表示数据错误)
Length 10b 数据载荷长度(以DW为单位,最大1024 DW=4KB)
Requester ID 16b 请求者ID(Bus+Device+Function)
Tag 8b 事务标签(用于区分未完成请求)
Byte Enables 8b 首/末DW字节使能(控制部分写入)
Address 32/64b 目标地址(配置请求时为Bus/Dev/Func号)
Data Payload (可选)
  • 最大4KB,内容取决于事务类型:

    • 内存写:写入的数据

    • 配置读:返回的配置寄存器值

    • 消息事务:消息编码

TLP Digest (可选)
  • 包含32位 ECRC(端到端CRC校验),由发送方生成,接收方验证

不同事务的TLP示例

内存写请求(MWr)TLP

Header: 
  Fmt=10 (3DW带数据), Type=00010 (MWr), Length=数据长度
  Address=目标物理地址
Data: 待写入数据

配置读请求(CfgRd0)TLP

Header:
  Fmt=00 (3DW无数据), Type=00100 (CfgRd0)
  Address[31:16]=0, Address[15:0]= {Bus, Dev, Func, Reg}

TLP路由方式

事务类型 路由依据 应用场景
内存读写 地址路由 访问设备BAR空间
配置读写 ID路由 (Bus/Dev/Func) 枚举设备/配置寄存器
消息事务 隐式路由 中断、电源管理事件

TLP类型 Fmt[2:0] Type[4:0] 描述
MRd

0b000

0b001

0b0000 存储器读请求;TLP头大小为3个或者4个双字,不带数据
MWr

0b010

0b011

0b0000 存储器写请求;TLP头大小为3个或者4个双字,带数据
CpID 0b010 0b1010 带数据的完成报文,TLP头大小为3个双字,包括存储器读、I/O读、配置读和原子操作读完成

PCIe总线的数据报文传送方式与PCI总线数据传送有类似之处。其中存储器写TLP使用Posted方式进行传送,而其他总线事务使用Non-Posted方式。PCIe总线规定所有Non-Posted存储器请求使用Split总线方式进行数据传递。当PCIe设备进行存储器读、I/O读写或者配置读写请求时,首先向目标设备发送数据读写请求TLP,当目标设备收到这些读写请求TLP后,将数据和完成信息通过完成报文(Cpl或者CplD)发送给源设备。

其中存储器读、I/O读和配置读需要使用CplD报文,因为目标设备需要将数据传递给源设备;而I/O写和配置写需要使用Cpl报文,因为目标设备不需要将任何数据传递给源设备,但是需要通知源设备,写操作已经完成,数据已经成功地传递给目标设备。

存储器和配置读写请求TLP

(1)存储器请求TLP和读完成TLP

当PCIe主设备,RC或者EP,访问目标设备的存储器空间时,使用Non-Posted总线事务向目标设备发出存储器请求TLP,目标设备收到这个存储器读请求TLP后,使用存储器读完成TLP,主动向主设备传递数据。当主设备收到目标设备的存储器读完成TLP后,将完成一次存储器读操作

(2)存储器写请求TLP

在PCIe总线中,存储器写使用Posted总线事务。PCIe主设备仅使用存储器请求TLP即可完成存储器写操作,主设备不需要目标设备的回应报文

(3)配置读写请求TLP和配置读写完成TLP

从总线事务的角度上看,配置读写请求操作的过程与I/O读写操作的过程类似。配置读写请求TLP都需要配置读写完成作为应答,从而完成一个完成的配置读写操作

在PCIe总线中,存储器写请求TLP使用Posted数据传送方式。而其他与存储器和I/O相关的报文都使用Split方式进行数据传送,这些请求报文需要完成报文,通知发送端之前的数据请求报文已经被处理完毕。存储器读写请求TLP使用地址路由方式进行数据传递,在这类TLP头中包含Address字段,Address字段具有两种地址格式,分别是32位和64位地址。在存储器读写和I/O读写请求的第3和第4个双字中,存放TLP的32或者64位地址。存储器、I/O和原子操作读写请求使用的TLP头较为类似。

中断

在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持INTx中断消息。在PCIe总线中,MSI和MSI-X中断机制使用存储器写请求向处理器提交中断请求

不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求

有些PCIe设备还可以支持Legacy中断方式,通过发送Assert_INTx和Deassert_INTx消息报文进行中断请求,即虚拟中断线方式。。但是PCIe总线并不鼓励其设备使用Legacy中断方式,在绝大多数情况下,PCIe设备使用MSI或者MSI/X方式进行中断请求。

PCIe总线提供Legacy中断方式的主要原因是,在PCIe体系结构中,存在许多PCI设备,而这些设备通过PCIe桥连接到PCIe总线中。这些PCI设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。

当PCIe桥收到PCI设备的INTx信号后,并不能将其直接转换为MSI/MSI-X中断报文,因为PCI设备使用INTx信号进行中断请求的机制与电平触发方式类似,而MSI/MSI-X中断机制与边沿触发方式类似。这两种中断触发方式不能直接进行转换。因此当PCI设备的INTx信号有效时,PCIe桥将该信号转换为Assert_INTx报文,当这些INTx信号无效时,PCIe桥将该信号转换为Deassert_INTx报文。

与Legacy中断方式相比,PCIe设备使用MSI或者MSI-X中断机制,可以消除INTx这个边带信号,而且可以更加合理地处理PCIe总线的“序”。目前绝大多数PCIe设备使用MSI或者MSI-X中断机制提交中断请求。


网站公告

今日签到

点亮在社区的每一天
去签到