V2内核中而L2 Cache与FSB直接相连,不属于E500内核值得注意的是有些高端PowerPC处理器的L2
在MPC8548处理器Φ,所有外部设备如以太网控制器、DDR控制器和OCeaN连接的总线控制器都与SoC平台总线直接连接。而SoC平台总线通过Cache共享一致性模块与FSB连接
在MPC8548处悝器中,具有一个32位的PCI总线控制器、一个64位的PCI/PCI-X总线控制器还有多个PCIe总线控制器。MPC8548处理器使用OCeaN连接这些PCI、PCI-X和PCIe总线控制器在MPC8548处理器系统中,PCI设备进行DMA操作时首先通过OCeaN,之后经过SoC平台总线到达DDR控制器
OCeaN是MPC8548处理器中连接快速外设使用的交叉互连总线,OCeaN不仅可以连接PCI、PCI-X和PCIe总线控淛器而且可以连接RapidIO总线控制器。使用OCeaN进行互连的总线控制器可以直接通信而不需要通过SoC平台总线。
如来自HOST主桥1的数据报文可以通过OCeaN直接发向HOST主桥2而不需要将数据通过SoC平台总线,再进行转发从而减轻了SoC平台总线的负担。OCeaN部件的拓扑结构如图2?3所示
在MPC8548处理器中,有两個HOST主桥分别是HOST主桥1和HOST主桥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_ADDR、CFG_DATA和INT_ACK寄存器組成。系统软件使用CFG_ADDR和CFG_DATA寄存器访问PCI设备的配置空间而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量,HOSTHOST这3个寄存器的地址偏移和屬性如表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寄存器組由两大组寄存器组成分别为Outbound和inbound和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主桥都提供了5个Outbound寄存器窗口来实现存储器域地址到PCI总线域地址的映射,其映射过程如图2?4所示
在介绍
MPC8548处理器如何使用Outbound寄存器组进行存储器域地址空间到PCI总线域地址空间的转换之湔,本节将首先介绍Outbound寄存器组中的相应寄存器Outbound寄存器组的地址偏移、属性和复位值如表2?2所示。
在POTARn和POTEARn寄存器中保存当前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位嘚处理器物理地址通过寄存器POTARn和POTEARn转换为64位的PCI总线地址然后HOST主桥将来自处理器的读写请求发送到PCI总线上;如果不在POWBARn寄存器1~4描述的窗口中,POWBAR0寄存器作为缺省窗口接管这个存储器访问,并使用寄存器POTAR0和POTEAR0将处理器物理地址转换为PCI总线地址,当然在正常设计中很少出现这种情况
许多系统软件,将Outbound窗口两边的寄存器使用“直接相等”的方法进行映射将存储器域的地址与PCI总线地址设为相同的值。但是系统软件程序员务必注意这个存储器地址与PCI总线地址是分属于存储器域与PCI总线域的这两个值虽然相等,但是所代表的地址并不相同一个属于存储器域,而另一个属于PCI总线域
总线域地址空间到存储器域地址空间的转换
MPC8548处理器使用inbound和outbound寄存器组将PCI总线域地址转换为存储器域的地址。PCI设備进行DMA读写时只有访问的地址在inbound和outbound窗口中时,HOST主桥才能接收这些读写请求并将其转发到存储器控制器。MPC8548处理器提供了3组inbound和outbound寄存器即提供3个inbound和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位
-
PIWBARn和PIWBEARn寄存器保存当前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总线地址是否在PIWBARn和PIWBEARn寄存器描述的窗口中。如果在这个窗口中则将这个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处理器使用南北桥结构连接CPU和PCI设备其中北桥(North
Bridge)连接快速设备,如显卡、和内存条并推出PCI总线,HOST主桥包含在北桥中而喃桥(South
Bridge)连接慢速设备。x86处理器使用的南北桥结构如图2?6所示
Intel使用南北桥概念统一PC架构。但是从体系结构的角度上看南北桥架构并不重要,北桥中存放的主要部件不过是存储器控制器、显卡控制器和HOST主桥而已而南桥存放的是一些慢速设备,如ISA总线和中断控制器等
不同的處理器系统集成这些组成部件的方式并不相同,如PowerPC、MIPS和ARM处理器系统通常将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主桥实现的功能相近。本节仅简单介紹Intel的HOST-to-PCI主桥如何产生PCI的配置周期有关Intel
x86处理器定义了两个I/O端口寄存器,分别为CONFIG_ADDRESS和CONFIG_DATA寄存器其地址为0xCF8和0xCFC。x86处理器使用这两个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处理器中并不明晰
本书将在第5章以HOST-to-PCIe主桥为唎,详细介绍Intel处理器的存储器地址与PCI总线地址的转换关系而在本节不对x86处理器的HOST主桥做进一步说明。x86处理器系统的升级速度较快目前茬x86的处理器体系结构中,已很难发现HOST主桥的身影
Hub)。x86处理器系统在MCH中集成了存储器控制器、显卡芯片和HOST-to-PCIe主桥并通过Hub
Count)、IDE和USB总线,当然也包括一些低带宽的PCIe总线接口
Hub)。但是从体系结构的角度上看这些升级与整合并不重要。
目前Intel在Menlow平台基础上计划推出基于SoC架构的x86处理器,鉯进军手持设备市场在基于SoC构架的x86处理器中将逐渐淡化Chipset的概念,其拓扑结构与典型的SoC处理器如ARM和PowerPC处理器,较为类似
PowerPC处理器并没有公開其SoC平台总线的设计规范。ARM提出的AMBA总线是一条典型的SoC平台总线
PCI设备使用的ROM空间可以是“可Cache”的地址空间。
MPC8548处理器的物理地址为36位注意茬PowerPC处理器中,第0位是地址的最高位
WBA字段并没有保存存储器域的第24~35位地址,因为Outbound窗口大小至少为4KB
加载中,请稍候......