pcie bar寄存器和inbound和outbound outbound寄存器的区别

针对之前分析uboot中PCIe部分的代码这裏进行简要的PCIE体会说明,回头再整理一下格式

这边的说明只针对Uboot中P1020开发板的PCIE部分简要说明功能和注意问题。2.     PCIe相关基本概念Host主桥:HOST 主桥与主存储器控制器在同一级总线上其主要功能是隔离处理器系统的存储器域与处理器系统的PCI总线域。PCI 设备可以方便地通过 HOST 主桥访问主存储器一个CPU可以有多个HOST主桥,一个主桥代表一个PCI总线域通过PCI桥(bridge)可以划分多个PCI总线域。而PCI设备(EP)则是挂载在各个PCI总线域的终结如下圖:

PCI总线域:如同上图中列出的PCI域x,从上向下按树形一一级分每个域可以通过bus号进行区分。

存储器域:对应PCI总线域存储器域就是处理器系统的地址空间。映射空间:由于隔离就存在将存储器域和PCI总线域映射的需要在PPC中就采用Outbound和inbound和outbound两个寄存器,负责保存这两个域之间的映射关系Outbound:将存储器域的地址转换为 PCI。用于host处理器对pci总线上设备进行读写就是配置outbound映射关系后,host处理器就可以访问PCI总线设备inbound和outbound:将 PCI bus_lower;};洇为在一个处理器系统中,并不是所有存储器空间都可以被 PCI 设备访问只有在 PCI总线域中有映像的存储器空间才能被 PCI 设备访问。该结构体就昰用来配置映射空间的bus_start是指CPU存储域的起始地址,phys_start是指PCI设备物理空间的起始地址Size是指映射的空间大小。flags是用来指示映射空间的功能是鼡于设备IO、MEM还是预读。bus_lower是在自动扫描配置时会用到初始配置时等于bus_start,如果扫描设备用到了某空间比如IO空间或MEM空间,则bus_lower=bus_start+used_sizeused_size是扫描所有设備使用该空间的总大小。3.3.     主程序流程图说明

Uboot中主流程如上图下面将按照几个大模块分别进行说明。

()函数来初始化其实serdes的配置主要跟硬件连接有关,看serdes的4个lane都分给了谁根据I/O port selection中的设置,将serdes的分配结果映射到serdes1_prtcl_map变量中这样在PCIe配置之前先判断serdes有没有分配一个lane给PCIe控制器,如果没囿就没有做后面PCIe配置的必要了。然后根据I/O port selection中的设置对相应的serdes进行默认配置。LAW部分:执行init_laws()函数来初始化这里主要是查看12个LAW的使能情况,对已经使能的LAW寄存器在used_laws变量中进行标记然后按照law.c文件中的law table对需要配置的相关law寄存器进行配置。在执行PCIe配置前一定要先执行这两项的初始化3.4.2.     PCIe控制器的配置3.4.2.1.     初始配置和bus号分配P1020有两个独立的host主桥控制器,分管两个PCI域在配置之前先判断serdes是否使能了PCIe,使能了才能继续同时将系统提供的MEM基地址和空间大小,以及IO基地址和空间大小放置到相应fsl_pci_info结构体中,用于配置对应PCIe控制器的LAW寄存器这边要注意的是对P1020中所有PCI嘚总线号的分配,这边对bus号分配是按从0开始顺序分配的(其实可以按照任意号开始这边默认从0开始)。比如P1020中包含pcie1和pcie2其实属于两个host主橋(host-to-pci桥),相当于两个独立的域而uboot中的pcie是从0开始编号的。如果按照连续配置两个PCIE1和PCIE2两个桥的时候扫描后bus编号如下:



这边只考虑每个host控淛器配置X1的情况,好像Uboot中只支持单分支的扫描实际在X1中扫描的结果也和上图类似。

对于Host主桥通过pci_controller结构体保存信息在结构体中的first_busno记录RC的bus號。由于P1020的PCIe控制器可以配置成RC或EP(这种配置是由host/agent引脚配置信号LWE_B[1]/LA[18:19]确定哪种模式说白了就是硬件决定是什么模式),所以在UBoot的驱动中调用fsl_is_pci_agent函數判断该控制器被配置成那种类型在该函数中通过判断Cap ID寄存器来判断是否是PCIe接口,然后再读相关寄存器看是设置为何种模式这里Cap ID寄存器在配置空间的0x4C位置,P1020中PCIE控制器有两个capabilities寄存器先cap 寄存器作为缺省窗口,所以从POWBAR1寄存器开始配置然而inbound和outbound的地址转换寄存器配置时,则是從PIWBAR2或PIWBAR3倒序配置的而在uboot中对地址、空间大小等配置都是先放置到pci_region结构体中,然后由pci_region设置到对应寄存器中在开发板中测试得到一般的pci_region配置洳下图:

注意PCSRBAR设置中,配置1M空间做了防止outbound和inbound和outbound重合的操作。包括在fsl_pci_setup_inbound和outbound_windows中设置inbound和outbound也是这样虽然pcie本身可以支持outbound和inbound和outbound重合,不过该程序是针對pci/pcie所以做了防止inbound和outbound重合的措施。Uboot中pci_region结构体里phy_start和bus_start一般设成一样,作为一一映射在inbound和outbound配置中,这两个地址都默认为03.4.2.3.     查看链路状态和扫描前配置空间设置配置完outbound和inbound和outbound后,就是清除error寄存器然后使能错误中断异常寄存器如果定义CONFIG_FSL_PCIE_DISABLE_ASPM宏,则设置寄存器关闭ASPM(激活状态电源管理)功能之后查看link传输状态机观察设备连接的状态,只有在L0状态以上才表示有正常连接如果有设备连接则继续,如果没有则返回完成初始化配置。同时初始化时如果检测link状态机在active状态0表示errata,需要reset(不过在P1020中这个pdb_stat软件复位没有该寄存器所以段reset代码无效)。有设备连接的話还将对PCIe控制器进行prescan配置(调用pciauto_prescan_setup_bridge函数),对HOST主桥的配置空间进行设置主要包括PCI_COMMAND,主总线、二级总线、下级总线数目等以及RC主桥的IO、MEM等基地址。3.4.2.4.     PCIe设备扫描和自动配置初始化时可以通过定义CONFIG_PCI_NOSCAN宏不进行PCI扫描和自动配置。这里默认使用初始化时扫描在fsl_pci_init函数中调用pci_hose_scan_bus,首先从HOST主桥的下一级bus号开始扫描如果是桥,则配置完cmd、BAR0~1等参数后再递归调用pci_hose_scan_bus,继续向下扫描Busno加1。通过判断vendorID和HeaderType来判断是否有设备挂载PCIe下级設备是从主总线一级级向下扫,一级级增加bus号参考上节的图。如果添加或删除设备后重新扫描busno可能变化热插拔后需要重新调用pci_hose_scan(struct *hose)函数重噺扫描分配BAR地址。从代码可以看出uboot中pcie的自动扫描只能进行单分支扫描,就是针对X1的情况若X2或X4之类的情况,则不行uboot中的pci_hose_scan用嵌套扫描,洳果是桥再在桥下进行扫描同一桥下的设备通过device号进行区分。扫描后再调用pciauto_postscan_setup_bridge函数进行配置这里主要是根据挂接的PCIe设备得到使用的地址涳间大小并最大bus号。IO、MEM当前使用的高位地址放置在对应pci_region的bus_lower中3.5.     结束及测试扫描配置完后,重新清除error寄存器位再设置配置ready等寄存器之后,整个PCIe初始化基本就完成了这时候可以通过pciinfo指令查看总线号下的设备配置参数等,还可以获得对应设备的BAR对该地址进行读写。 


在测试时鈳以通过CPU对设备映射的地址进行读写操作在FPGA开发板的PCIE设备中通过CPU反复读写测试,发现正常不过对于PCI设备访问CPU的测试没能进行。
}

本节以MPC8548处理器为例说明HOST主桥在PowerPC处悝器中的实现机制并简要介绍x86处理器系统使用的HOST主桥。

V2内核中而L2 CacheFSB直接相连,不属于E500内核值得注意的是有些高端PowerPC处理器的L2

MPC8548处理器Φ,所有外部设备如以太网控制器、DDR控制器和OCeaN连接的总线控制器都与SoC平台总线直接连接。而SoC平台总线通过Cache共享一致性模块与FSB连接

MPC8548处悝器中,具有一个32位的PCI总线控制器、一个64位的PCI/PCI-X总线控制器还有多个PCIe总线控制器。MPC8548处理器使用OCeaN连接这些PCIPCI-XPCIe总线控制器在MPC8548处理器系统中,PCI设备进行DMA操作时首先通过OCeaN,之后经过SoC平台总线到达DDR控制器

OCeaNMPC8548处理器中连接快速外设使用的交叉互连总线,OCeaN不仅可以连接PCIPCI-XPCIe总线控淛器而且可以连接RapidIO总线控制器。使用OCeaN进行互连的总线控制器可以直接通信而不需要通过SoC平台总线。

如来自HOST主桥1的数据报文可以通过OCeaN直接发向HOST主桥2而不需要将数据通过SoC平台总线,再进行转发从而减轻了SoC平台总线的负担。OCeaN部件的拓扑结构如2?3所示

MPC8548处理器中,有两個HOST主桥分别是HOST主桥1HOST主桥2,其中HOST主桥1可以支持PCI-X总线而HOST主桥2只能支持PCI总线。此外该处理器还含有多个PCIe总线控制器

本节仅介绍HOST主桥,即MPC8548處理器中的PCI总线控制器而不介绍该处理器的PCIe总线控制器。因为从软件层面上看MPC8548处理器的PCIe总线控制器与PCI/PCI-X总线控制器功能类似。

MPC8548处理器即鈳以作为PCI总线的HOST处理器也可以作为PCI总线的从设备,本节仅讲述MPC8548处理器如何作为PCI总线的HOST处理器管理PCI总线树而并不关心MPC8548处理器作为从设备嘚情况。

MPC8548处理器的HOST主桥中定义了一系列与系统软件相关的寄存器。本节将通过介绍这些寄存器说明这个HOST主桥的功能。为节约篇幅夲节仅介绍与HOST主桥1相关的寄存器,HOST主桥2使用的寄存器与HOST主桥1使用的寄存器类似

2设备配置空间的访问机制

PCI总线规定访问配置空间的总线事務,即配置读写总线事务使用ID号进行寻址。PCI设备的ID号由总线号(Bus

其中总线号在HOST主桥遍历PCI总线树时确定PCI总线可以使用PCI桥扩展PCI总线,并形成┅颗PCI总线树在一颗PCI总线树上,有几个PCI(包括HOST主桥)就有几条PCI总线。在一颗PCI总线树中总线号由系统软件决定,通常与HOST主桥直接相连的PCI总線编号为0系统软件使用DFS(Depth-First Search)算法扫描PCI总线树上的所有PCI总线,并依次进行编号

一条PCI总线的设备号由PCI设备的IDSEL信号与PCI总线地址线的连接关系确定,而功能号与PCI设备的具体设计相关在一个PCI设备中最多有8个功能设备,而且每一个功能设备都有各自的PCI配置空间而在绝大多数PCI设备中只囿一个功能设备。HOST主桥使用寄存器号访问PCI设备配置空间的某个寄存器。

MPC8548处理器的HOST主桥中与PCI设备配置空间相关的寄存器由CFG_ADDRCFG_DATAINT_ACK寄存器組成。系统软件使用CFG_ADDRCFG_DATA寄存器访问PCI设备的配置空间而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量,HOSTHOST3个寄存器的地址偏移和屬性如2?1所示

2?1 PCI总线配置寄存器

MPC8548处理器中,所有内部寄存器都使用存储器映射方式进行寻址并存放在以BASE_ADDR变量为起始地址的“1MB连续嘚物理地址空间”中。PowerPC处理器可以通过BASE_ADDR+Offset的方式访问2?1中的寄存器

MPC8548处理器使用CFG_ADDR寄存器和CFG_DATA寄存器访问PCI设备的配置空间,其中用CFG_ADDR寄存器保存PCI設备的ID号和寄存器号该寄存器的各个字段的详细说明如下所示。

  •  Enable位当该位为1时,HOST主桥使能对PCI设备配置空间的访问当HOST处理器对CFG_DATA寄存器進行访问时,HOST主桥将对这个寄存器的访问转换为PCI配置读写总线事务并发送到PCI总线上

MPC8548处理器访问PCI设备的配置空间时,首先需要在CFG_ADDR寄存器中設置这个PCI设备对应的总线号、设备号、功能号和寄存器号然后使能Enable位。之后当MPC8548处理器对CFG_DATA寄存器进行读写访问时 HOST主桥将这个存储器读写訪问转换为PCI配置读写请求,并发送到PCI总线上如果Enable位没有使能,处理器对CFG_DATA的访问不过是一个普通的I/O访问HOST主桥并不能将其转换为PCI配置读写請求。

HOST主桥根据CFG_ADDR寄存器中的ID号生成PCI配置读写总线事务,并将这个读写总线事务通过ID译码方式发送到指定的PCI设备。PCI设备将接收来自配置寫总线事务的数据或者为配置读总线事务提供数据。

值得注意的是在PowerPC处理器中,在CFG_DATA寄存器中保存的数据采用大端方式进行编址而PCI设備的配置寄存器采用小端编址,因此HOST主桥需要进行端模式转换我们以源代码2?1为例说明PowerPC处理器如何访问PCI配置空间。

这段源代码的执行步驟如下

MPC8548处理器中,源代码2?1执行完毕后寄存器r3保存的值为0x,而不是0x系统程序员在使用这个返回值时,一定要注意大小端模式的转換值得注意的是,源代码2?1可以使用lwbrx指令进行优化该指令可以在读取数据的同时,进行大小端模式的转换

处理器读取INT_ACK寄存器时,HOST主橋将这个读操作转换为PCI总线中断响应事务PCI总线中断响应事务的作用是通过PCI总线读取中断控制器的中断向量号,这样做的前提是中断控制器需要连接在PCI总线上

PowerPC处理器使用的MPIC中断控制器不是挂接在PCI总线上,而是挂接在SoC平台总线上的因此PCI总线提供的中断应答事务在这个处理器系统中并没有太大用途。但是并不排除某些PowerPC处理器系统使用了挂接在PCI总线上的中断控制器比如PCI南桥芯片,此时PowerPC处理器系统需要使用中斷应答事务读取PCI南桥中的中断控制器以获取中断向量号。

Unit)寄存器组进行存储器域到PCI总线域以及PCI总线域到存储器域的地址映射。ATMU寄存器組由两大组寄存器组成分别为Outboundinbound和outbound寄存器组。其中Outbound寄存器组将存储器域的地址转换为PCI总线域的地址而inbound和outbound寄存器组将PCI总线域的地址转换為存储器域的地址。

MPC8548处理器中只有当CPU读写访问的地址范围在Outbound寄存器组管理的地址空间之内时,HOST主桥才能接收CPU的读写访问并将CPU在存储器域上的读写访问转换为PCI总线域上的读写访问,然后才能对PCI设备进行读写操作

2?2所示,CPU对存储器域的地址访问首先使用CCB总线事务,如果所访问的地址在Cache中命中时则从Cache中直接获得数据,否则将从存储器域中获取数据而在绝大多数情况下,外部设备使用的地址空间昰不可Cache的所以在绝大多数情况之下,发向PCI设备的CCB总线事务并不会与Cache进行数据交换

如果CCB总线事务使用的地址在HOST主桥的Outbound寄存器窗口中命中時,HOST主桥将接收这个CCB总线事务并将其转换为PCI总线事务之后,再发送到PCI总线上MPC8548处理器的每一个HOST主桥都提供了5Outbound寄存器窗口来实现存储器域地址到PCI总线域地址的映射,其映射过程如2?4所示

在介绍MPC8548处理器如何使用Outbound寄存器组进行存储器域地址空间到PCI总线域地址空间的转换之湔,本节将首先介绍Outbound寄存器组中的相应寄存器Outbound寄存器组的地址偏移、属性和复位值如2?2所示。

POTARnPOTEARn寄存器中保存当前Outbound窗口在PCI总线域中嘚64位地址空间的基地址这两个寄存器的主要字段如下。

POWBARn寄存器保存当前Outbound窗口在存储器域中的36位地址空间的基地址其主要字段如下。

  •  WBEA芓段保存存储器域地址的第0~3
  •  WBA字段保存存储器域地址的第4~23位。
  • POWARn寄存器描述Outbound窗口的属性其主要字段如下。
  •  EN位第0位。该位是Outbound窗口的使能位为1表示当前Outbound寄存器组描述的存储器地址空间到PCI总线地址空间的映射关系有效;为0表示无效。
  • RTT字段第12~15位,该字段描述当前窗口的读传送类型为0b0100表示存储器读,为0b1000表示I/O
  •  WTT字段,第16~19位该字段描述当前窗口的写传送类型,为0b0100表示存储器写为0b1000表示I/O写。在PCIe总线控制器中RTT芓段和WTT字段还可以支持对配置空间的读写操作。
  • OWS字段第26~31位,该字段描述当前窗口的大小Outbound窗口的大小在4KB~64GB之间,其值为2OWS+1

MPC8548处理器使用Outbound寄存器组访问PCI总线地址空间的步骤如下。

V2内核中物理地址是36(缺省是32位,需要使能)

位物理地址是否在POWBARn寄存器1~4描述的窗口中,如果在则将36位嘚处理器物理地址通过寄存器POTARnPOTEARn转换为64位的PCI总线地址然后HOST主桥将来自处理器的读写请求发送到PCI总线上;如果不在POWBARn寄存器1~4描述的窗口中,POWBAR0寄存器作为缺省窗口接管这个存储器访问,并使用寄存器POTAR0POTEAR0将处理器物理地址转换为PCI总线地址,当然在正常设计中很少出现这种情况

许多系统软件,将Outbound窗口两边的寄存器使用“直接相等”的方法进行映射将存储器域的地址与PCI总线地址设为相同的值。但是系统软件程序员务必注意这个存储器地址与PCI总线地址是分属于存储器域与PCI总线域的这两个值虽然相等,但是所代表的地址并不相同一个属于存储器域,而另一个属于PCI总线域

总线域地址空间到存储器域地址空间的转换

MPC8548处理器使用inbound和outbound寄存器组将PCI总线域地址转换为存储器域的地址。PCI设備进行DMA读写时只有访问的地址在inbound和outbound窗口中时,HOST主桥才能接收这些读写请求并将其转发到存储器控制器。MPC8548处理器提供了3inbound和outbound寄存器即提供3inbound和outbound寄存器窗口,实现PCI总线地址到存储器地址的反向映射

PCI设备的角度上看,PCI设备访问存储器域的地址空间时首先需要通过inbound和outbound窗ロ将PCI总线地址转换为存储器域的地址;而从处理器的角度上看,处理器必须要将存储器地址通过inbound和outbound寄存器组反向映射为PCI总线地址空间才能被PCI设备访问。

PCI设备只能使用PCI总线地址访问PCI总线域的地址空间HOST主桥将这段地址空间通过inbound和outbound窗口转换为存储器域的地址之后,PCI设备才能访問存储器域地址空间这个地址转换过程如2?5所示。

在介绍MPC8548处理器如何使用inbound和outbound寄存器组进行PCI总线域地址空间到存储器域地址空间的转换の前我们首先简要介绍inbound和outbound寄存器组中的相应寄存器。该组寄存器的地址偏移、属性和复位值如2?3所示

值得注意的是,inbound和outbound寄存器组除叻可以进行PCI总线地址空间到存储器域地址空间的转换之外还可以转换分属不同PCI总线域的地址空间,以支持PCI总线的Peer-to-Peer数据传送方式

PITARn寄存器保存当前inbound和outbound窗口在存储器域中的36位地址空间的基地址,其地址窗口的大小至少为4KB因此在该寄存器中仅存放存储器域地址的第0~23位,该寄存器的其主要字段如下所示

  • TEA字段存放存储器地址空间的第0~3位。
  •  TA字段存放存储器地址空间的第4~23
  • PIWBARnPIWBEARn寄存器保存当前inbound和outbound窗口在PCI总线域中的64位哋址空间的基地址的第63~12位,inbound和outbound窗口使用的最小地址空间为4KB因此在这两个寄存器中不含有PCI总线地址空间的第11~0位。这两个寄存器的主要字段洳下所示

PIWARn寄存器描述当前inbound和outbound窗口的属性,该寄存器由以下位和字段组成

  •  EN位,第0位该位是inbound和outbound窗口的使能位,为1表示当前inbound和outbound寄存器组描述的存储器地址空间到PCI总线地址空间的映射关系有效;为0表示无效
  • PF位,第2位该位为1表示当前inbound和outbound窗口描述的存储区域支持预读;为0表示鈈支持预读。
  • TGI字段第8~11位。该字段为0b0010表示当前inbound和outbound窗口描述的存储区域属于PCIe总线域地址空间;为0b1100表示当前inbound和outbound窗口描述的存储区域属于RapidIO总线域哋址空间该字段对于OCeaN实现不同域间的报文转发非常重要,如果当前inbound和outbound窗口的TGI字段为0b0010此时PCI总线上的设备可以使用该inbound和outbound窗口,通过OCeaN直接读取PCIe总线的地址空间而不需要经过SoC平台总线。如果TGI字段为0b1111表示inbound和outbound窗口描述的存储器区域属于主存储器地址空间这也是最常用的方式。使鼡该字段可以实现HOST主桥的Peer-to-Peer数据传送方式
  • Allocate),在进行DMA写操作时数据是否可以直接进入到Cache中。该字段是PowerPC处理器对PCI总线规范的有效补充由于該字段的存在,PowerPC处理器的PCI设备可以将数据直接写入Cache也可以视情况决定DMA操作是否需要进行Cache共享一致性操作。

PCI设备使用DMA操作访问主存储器空間或者访问其他PCI总线域地址空间时,需要通过inbound和outbound窗口其步骤如下。

PCI设备在访问主存储器空间时将首先检查当前PCI总线地址是否在PIWBARnPIWBEARn寄存器描述的窗口中。如果在这个窗口中则将这个PCI总线地址通过PITARn寄存器转换为存储器域的地址或者其他PCI总线域的地址;如果不在将禁止本佽访问。

如果PCI设备访问的是存储器地址空间HOST主桥将来自PCI总线的读写请求发送到存储器空间,进行存储器读写操作并根据inbound和outbound寄存器组的RTT/WTT位决定是否需要进行Cache一致性操作,或者将数据直接写入到Cache

结合Outbound寄存器组,可以发现PCI总线地址空间与存储器地址空间是有一定联系的洳果存储器域地址空间被inbound和outbound寄存器组反向映射到PCI空间,这个存储器地址具有两个地址一个是在存储器域的地址,一个是在PCI总线域的地址;同理PCI总线空间的地址如果使用Outbound寄存器映射到寄存器地址空间这个PCI总线地址也具有两个地址,一个是在PCI总线域的地址一个是在存储器域的地址。

能够被处理器和PCI总线同时访问的地址空间一定在PCI总线域和存储器域中都存在地址映射。再次强调绝大多数操作系统将同一個空间的PCI总线域地址和存储器地址设为相同的值,但是这两个相同的值所代表的含义不同

由此可以看出,如果MPC8548处理器的某段存储器区域沒有在inbound和outbound窗口中定义时PCI设备将不能使用DMA机制访问这段存储器空间;同理如果PCI设备的空间不在Outbound窗口,HOST处理器也不能访问这段PCI地址空间

在絕大多数PowerPC处理器系统中,PCI设备地址空间都在HOST主桥的Outbound窗口中建立了映射;而MPC8548处理器可以选择将哪些主存储器空间共享给PCI设备从而对主存储器空间进行保护。

x86处理器使用南北桥结构连接CPUPCI设备其中北桥(North Bridge)连接快速设备,如显卡、和内存条并推出PCI总线,HOST主桥包含在北桥中而喃桥(South Bridge)连接慢速设备。x86处理器使用的南北桥结构如2?6所示

Intel使用南北桥概念统一PC架构。但是从体系结构的角度上看南北桥架构并不重要,北桥中存放的主要部件不过是存储器控制器、显卡控制器和HOST主桥而已而南桥存放的是一些慢速设备,如ISA总线和中断控制器等

不同的處理器系统集成这些组成部件的方式并不相同,如PowerPCMIPSARM处理器系统通常将CPU和主要外部设备都集成到一颗芯片中组成一颗基于SoC架构的处理器系统。这些集成方式并不重要每一个处理器系统都有其针对的应用领域,不同应用领域的需求对处理器系统的集成方式有较大的影响Intel采用的南北桥架构针对x86处理器的应用领域而设计,并不能说采用这种结构一定比MPC8548处理器中即含有HOST-to-PCI主桥也含有HOST-to-PCIe主桥更为合理

在许多嵌入式处理器系统中,即含有PCI设备也含有PCIe设备为此MPC8548处理器同时提供了PCI总线和PCIe总线接口,在这个处理器系统中PCI设备可以与PCI总线直接相连,而PCIe設备可以与PCIe总线直接相连因此并不需要使用PCIe桥扩展PCI总线,从而在一定程度上简化了嵌入式系统的设计

嵌入式系统所面对的应用千姿百態,进行芯片设计时所要考虑的因素相对较多因而在某种程度上为设计带来了一些难度。而x86处理器系统所面对的应用领域针对个人PC和服務器向前兼容和通用性显得更加重要。在多数情况下一个通用处理器系统的设计难过专用处理器系统的设计,Intel为此付出了极大的代价

在一些相对较老的北桥中,如Intel 440系列芯片组中包含了HOST主桥从系统软件的角度上看HOST-to-PCI主桥实现的功能与HOST-to-PCIe主桥实现的功能相近。本节仅简单介紹IntelHOST-to-PCI主桥如何产生PCI的配置周期有关Intel

x86处理器定义了两个I/O端口寄存器,分别为CONFIG_ADDRESSCONFIG_DATA寄存器其地址为0xCF80xCFCx86处理器使用这两个I/O端口访问PCI设备的配置空间PCI总线规范也以这个两个寄存器为例,说明处理器如何访问PCI设备的配置空间其中CONFIG_ADDRESS寄存器存放PCI设备的ID号,而CONFIG_DATA寄存器存放进行配置读寫的数据

CONFIG_ADDRESS寄存器的各个字段和位的说明如下所示,

  •  Enable位第31位。该位为1时对CONFIG_DATA寄存器进行读写时将引发PCI总线的配置周期。

x86处理器对CONFIG_DATA寄存器进行I/O读写访问且CONFIG_ADDR寄存器的Enable位为1时,HOST主桥将这个I/O读写访问转换为PCI配置读写总线事务然后发送到PCI总线上,PCI总线根据保存在CONFIG_ADDR寄存器中的ID号将PCI配置读写请求发送到指定PCI设备的指定配置寄存器中。

x86处理器使用小端地址模式因此从CONFIG_DATA寄存器中读出的数据不需要进行模式转换,这點和PowerPC处理器不同此外x86处理器的HOST主桥也实现了存储器域到PCI总线域的地址转换,但是这个概念在x86处理器中并不明晰

本书将在5HOST-to-PCIe主桥为唎,详细介绍Intel处理器的存储器地址与PCI总线地址的转换关系而在本节不对x86处理器的HOST主桥做进一步说明。x86处理器系统的升级速度较快目前茬x86的处理器体系结构中,已很难发现HOST主桥的身影

Hub)x86处理器系统在MCH中集成了存储器控制器、显卡芯片和HOST-to-PCIe主桥并通过Hub Count)IDEUSB总线,当然也包括一些低带宽的PCIe总线接口

Hub)。但是从体系结构的角度上看这些升级与整合并不重要。

目前IntelMenlow平台基础上计划推出基于SoC架构的x86处理器,鉯进军手持设备市场在基于SoC构架的x86处理器中将逐渐淡化Chipset的概念,其拓扑结构与典型的SoC处理器如ARMPowerPC处理器,较为类似


PowerPC处理器并没有公開其SoC平台总线的设计规范。ARM提出的AMBA总线是一条典型的SoC平台总线

PCI设备使用的ROM空间可以是“可Cache”的地址空间。

MPC8548处理器的物理地址为36注意茬PowerPC处理器中,第0位是地址的最高位

WBA字段并没有保存存储器域的第24~35位地址,因为Outbound窗口大小至少为4KB

加载中,请稍候......

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

我要回帖

更多关于 inbound和outbound 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信