首页 > 其他分享 >PCIe总线-存储器域和PCIe总线域访问流程分析(二)

PCIe总线-存储器域和PCIe总线域访问流程分析(二)

时间:2025-01-12 22:54:32浏览次数:1  
标签:存储 存储器 总线 PCIe 地址 RC EP

1.概述

PCIe总线的最大特点是像CPU访问DDR一样,可以直接使用地址访问PCIe设备(桥),但不同的是DDR和CPU同属于存储器域,而CPU和PCIe设备属于两个不同的域,PCIe设备(桥)的地址空间属于PCIe总线域。存储器域访问PCIe总线域或者PCIe总线域访问存储器域,需要经过一系列的转换才可以完成。

2.跨域访问

下图是存储器域访问PCIe域和PCIe域访问存储器域的示意图。通常情况下,存储器域指的是CPU能直接访问的地址空间,包括了CPU寄存器、DRAM、PCIe控制器和PCIe窗口地址空间。

PCIe总线域指由PCIe设备所能直接访问的地址空间组成,包括PCIe桥设备和PCIe Swtich,若由多条PCIe总线,则对应多个PCIe总线域。

图中出现的名词解释如下:

  • Outbound: 存储器域访问PCIe总线域称为Outbound传输,从RC或EP的角度看,也可以称为发送。
  • Inbound: PCIe总线域访问存储器域称为Inbound传输,从RC或EP的角度看,也可以称为接收。
  • Outbound ATU(address translation unit): Outbound地址转换单元,负责将存储器域地址转换成PCIe总线域地址。
  • Inbound ATU(address translation unit): Inbound地址转换单元,负责将PCIe总线域地址转换成存储器域地址。

image

注:

  1. PCIe总线诞生在x86体系结构中,而在x86处理器中,并没有地址转换单元ATU,但存储域和PCIe总线域地址空间的概念仍然存在。
  2. 存储域和PCIe总线域地址的转换规则PCIe规范中并没有规定,因此不同的处理器架构实现各不相同,因此图中统一使用ATU表示地址转换功能。
  3. RC存储域地址和PCIe总线域地址虽然相同,但还是两个不同的域,当然也可以通过配置映射,使存储域地址和PCIe总线域地址不同。在x86架构中RC存储域窗口地址为总线地址,arm等架构中,RC存储域窗口地址为物理地址。
  4. RC存储域访问EP存储域使用PCIe总线域0xA0000000-0xA00FFFFF地址段(配置在PCIe桥的BASE和Limit寄存器或PCIe设备的BAR寄存器中),EP存储域访问RC存储域使用PCIe总线域0xB0000000-0xB00FFFFF地址段。0xA0000000-0xA00FFFFF和0xB0000000-0xB00FFFFF地址段不能重合,否则PCIe桥无法区分该请求是发给RC还是桥下面的其他EP。

2.1. RC存储域访问EP存储域

RC存储域访问EP存储域会经历Outbound和Inbound传输。在访问之间RC配置Outbound映射,EP配置Inbound映射。具体过程如下:

  1. RC存储域发出访问地址,若命中Outbound Region地址段0xA0000000-0xA00FFFFF,则RC会响应这个访问请求。
  2. RC存储域Outbound ATU将访问地址转换成PCIe域总线地址,转换后的地址必须在PCIe总线地址段0xA0000000-0xB00FFFFF内,然后将请求发送到PCIe总线上(该请求会被封装成一个TLP事务包,具体会在PCIe总线事物层介绍)。
  3. 该请求经过基于地址的PCIe总线路由,发送到了访问目标EP存储域。
  4. EP存储域Inbound ATU将该请求的PCIe总线域地址转换成EP存储器域地址,转换后的地址必须在EP存储域地址段0xC0000000-0xC00FFFFF内。
  5. EP开始响应该请求,执行读或者写任务。

2.2. EP存储域访问RC存储域

EP存储域访问RC存储域会经历Inbound和Outbound传输(EP访问RC通常使用DMA)。在访问之间RC配置Inbound映射,EP配置Outbound映射。具体过程如下:

  1. EP存储域发出访问地址,若命中Outbound Region地址段0xD0000000-0xD00FFFFF,则EP会响应这个访问请求。
  2. EP存储域Outbound ATU将访问地址转换成PCIe域总线地址,然后将请求发送到PCIe总线上。
  3. 该请求经过基于地址的PCIe总线路由,发送到了访问目标RC存储域。
  4. RC存储域Inbound ATU将该请求的PCIe总线域地址转换成RC存储器域地址,转换后的地址必须在RC存储域地址段0xB0000000-0xB00FFFFF内。
  5. RC开始响应该请求,执行读或者写任务。

标签:存储,存储器,总线,PCIe,地址,RC,EP
From: https://www.cnblogs.com/linhaostudy/p/18667552

相关文章

  • PCIe总线-简介(一)
    1.概述早期的计算机使用PCI(PeripheralComponentInterconnect)总线与外围设备相连,PCI总线使用单端并行信号进行数据传输,由于单端信号很容易被外部系统干扰,其总线频率很难进一步提高。目前,为了提高总线频率以获得更高的总线带宽,高速串行总线逐步替代了并行总线,PCIExpress总线已逐......
  • [PCIE5.0] 4.2.4.9 Reset
    本小节主要描述了两种重置机制:基础重置(FundamentalReset)和热重置(HotReset),以及它们在PCIe协议中如何影响接收端(Receiver)和发送端(Transmitter)的行为。1.基础重置(FundamentalReset)•基础重置是PCIe系统中一种重要的重置操作,它通常是在系统启动时进行,或者在需要恢复系统......
  • [PCIE5.0] 4.2.8 Compliance Pattern in 8b/10b Encoding
    这段文字描述的是在PCIe或类似高速接口协议中,Polling.Compliance子状态的具体要求,特别是合规模式(CompliancePattern)在传输过程中的处理方式。这个过程主要是通过SKPOrderedSet来验证链路的合规性,确保链路在高频率下的稳定性、可靠性和时序准确性。我们来逐步解读这......
  • PCIe TLP路由分为几类?都有什么作用
    PCIeTLP(事务层数据包)路由主要分为以下几类及其作用:1.基于地址的路由(Address-BasedRouting)作用:用于MemoryRead/Write和I/ORead/Write等事务,TLP头中包含目标地址,交换机根据该地址将TLP转发到正确的设备。2.基于ID的路由(ID-BasedRouting)作用:用于配置Read/Write和......
  • 国微pcie switch 8748高速存储方案设计
    今天聊聊纯国产高速存储方案怎么设计,主要是针对pcie switch架构做深入分析,switch架构方案的优点是特别灵活,对速率和盘的容量可以任意扩展,并且支持标准ext4文件系统,可以将磁盘取下插入到windows系统上被识别到标准盘符,同样也可以插入到linux系统被识别成标准盘符。下面开始分......
  • PCIe扫盲——TLP路由之Implicit Routing
    模糊路由(ImplicitRouting,又译为隐式路由)只能用于Message的路由。前面的文章中多次提到过,PCIe总线相对于PCI总线的一大改进便是消除了大量的边带信号,这正是通过Message的机制来实现的。PCIe定义的Message主要有以下几种类型:PowerManagementINTxlegacyinterruptsignalingE......
  • PCIe扫盲——TLP路由之Address Routing
    地址路由(AddressRouting)的地址包括IO和Memory。对于Memory请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header。注:再次强调,IO请求是为了兼容早期的PCI设备的,在新的PCIe设备中禁止使用。3DW和4DW的TLPHeader......
  • PCIe扫盲——TLP路由之ID Routing
    ID路由(IDRouting)有的时候也被称为BDF路由,即采用BusNumber、DeviceNumber和FunctionNumber来确定目标设备的位置。这是一种兼容PCI和PCI-X总线协议的路由方式,主要用于配置请求(ConfigurationRequest)的路由,在PCIe总线中,其还可以被用于Completion和Message的路由。前面的文章提......
  • STM32 I2C总线
    一、什么是I2C总线1、SCL、和SDA线的作用I2C总线是主机与从机之间通过SCL、SDA连接,达到一个主机对应多个从机的作用。其中SCL叫做串行时钟线,负责传输时钟信号,SDA叫做串行数据线,负责传输数据。2、为什么SCL和SDA都是开漏输出,并且要外接一个上拉电阻什么开漏输出?只有低电......
  • Flutter进阶(5):EventBus全局事件总线
    一、EventBus的基本概念FlutterEventBus是一种用于在Flutter应用程序中实现组件间通信的事件总线机制。可以用于在应用程序中实现各个组件之间的通信。它基于发布/订阅模式,允许组件订阅感兴趣的事件,并在事件发生时接收通知。二、FlutterEventBus的工作原理FlutterEventBu......