-
0 引言
-
PowerPC(performance optimization with enhanced RISC-performance computing,简称PPC)是一种精简指令集(RISC)架构的中央处理器(CPU),其基本的设计源自IBM(国际商用机器公司)的POWER(performance optimized with enhanced RISC)。PowerPC芯片凭借其出色的性能和高度整合技术先进特性广泛应用于网络通信、工业控制、家用数字化、网络存储、军工以及电力系统控制等领域。
-
PowerPC的E500是飞思卡尔(FreeScale)基于Power Architecture的32位微处理器核心。E500系列核心有三个版本,即E500v1,E500v2的E500mc。64位版本的E500mc演变为E5500核心,并于2010年推出。E500提供32位有效地址和8位、16位和32位整数数据类型,它还为SPE APU和嵌入式向量浮点APU提供双元素64位数据类型,其中包括对由两个32位元素组成的操作数进行操作的指令。
-
PCI总线是一种高速串行总线标准,可用于连接计算机系统中的各种设备,例如:图形卡、网络适配器、存储控制器等。PCIE总线提供比传统的并行总线更高的数据传输速率和更低的传输延迟,因此在计算机系统中得到广泛的应用。PCI使用中一项重要内容就是CPU对PCI设备空间的访问,本文主要介绍CPU对PCI设备空间的访问原理,以及在PPC处理器系统中的具体实现。
-
1 PCI设备的空间配置
-
PCI设备的空间配置是PCI协议中的重要组成部分,它定义了在PCI系统中各个设备所使用的不同地址空间范围。PCI设备空间分为三个类型:配置空间、IO空间和内存空间。PCI设备的配置空间包含设备的ID、制造商信息、中断信息以及BAR空间配置信息等。IO空间用于IO操作,例如读写外部设备。内存空间用于主机和PCIE设备之间的数据交换。每个PCI设备都有一个唯一的Bus号、Dev号以及Func号,用于标识其在PCI总线上的位置。通过这些编号系统就可以访问每个设备的配置空间。通过设备的配置空间,可以进一步配置PCI设备的IO空间和内存空间[1-2]。PCI设备的配置空间所包含的信息如图1所示。
-
图1 PCI设备配置空间信息
-
PCI设备的IO空间和内存空间都是通过图1中的Base Address Registers(BAR寄存器)进行配置。BAR地址寄存器的第0位如果是1,就表示该段地址空间为IO地址空间;如果是0,就表示该段地址空间为内存空间。每一个PCI设备的配置空间中,都含有该设备在PCI地址空间内所使用的基地址,系统软件可以动态地配置该基地址,但是要确保各个PCI设备的物理地址互不冲突。当PCI设备的配置空间被系统软件初始化之后,该PCI设备在PCI总线树上将拥有自己的PCI总线地址空间,即BAR寄存器所描述的地址空间。在每个PCI设备的配置空间中,都有6个BAR寄存器。每一个BAR寄存器都与该PCI设备所使用的一段PCI地址空间相对应。
-
配置PCI设备IO空间和内存空间时,最容易混淆的两个概念就是PCI地址空间和CPU地址空间。以32位地址空间为例,PCI地址空间和CPU地址空间的范围都是0x00000000—0xFFFFFFFF。主机端只能发起/响应CPU地址空间的地址访问操作,PCI设备也只能发起/响应对于PCI地址空间的访问请求,因此,在PCI地址空间和CPU地址空间之间就存在一层映射关系,如图2所示。
-
图2 CPU地址空间和PCI地址空间之间的映射
-
以图2的地址空间映射为例,当CPU需要访问PCI地址空间0xF0000000—0xFFFFFFFF这段地址时,根据图2中的映射关系,CPU需要发出对0x90000000—0x9FFFFFFF这段地址空间中相应地址的访问请求。当CPU发出对0xF0000008地址的访问请求时,实际访问的则是CPU地址空间的0xF0000008地址,并不能访问到PCI地址空间的0xF0000008地址。只有当CPU发出对0x90000008地址的访问请求时,才能真正访问到PCI地址空间的0xF0000008地址。反之亦然,当PCI设备需要访问CPU地址空间0x00000000—0x7FFFFFFF这段地址时,PCI设备实际发出的是对PCI地址空间0x30000000—0xAFFFFFFF这段地址空间的访问操作。
-
由于在CPU地址空间和PCI地址空间需要进行地址映射,因此就需要一个具有地址转换功能的角色,该角色就是PCI的HOST主桥。以CPU访问PCI设备为例,当CPU需要发起对某一个PCI设备的访问时,会发出对相应CPU地址空间的访问请求,然后由HOST主桥将该CPU地址空间转换为对应的PCI地址空间,然后再由对应的PCI设备对该访问请求进行响应。因此,任何一个PCI设备只有在CPU地址空间具有相应的映像地址时,才能被CPU所访问[3-4]。
-
由以上分析可知,HOST主桥负责隔离CPU地址空间和PCI地址空间,并完成CPU与PCI设备之间的地址映射和数据交换。CPU与PCI设备之间的数据交换则主要由CPU访问PCI设备的地址空间”和PCI设备通过DMA机制访问主机端的RAM”两部分组成。HOST主桥的具体实现,在不同的处理器系统会有较大差异,下面以集成了E500核的PPC处理器系统为例,具体介绍PCI的配置过程。
-
2 PPC处理器系统中PCI的配置
-
在集成了E500核的PPC处理器系统中,对于PCI的配置全部通过寄存器完成。由于集成了E500核的PPC处理器系统没有IO端口的概念,所以,对寄存器都是通过内存映射的方式进行访问,即所有寄存器在CPU地址空间都有自己的地址。因此,为了完成对PCI的配置,首先必须找到对应的寄存器地址值。在集成了E500核的PPC处理器系统中,PCI配置相关的寄存器隶属于系统配置/控制/状态寄存器(CCSR)空间。CCSR空间的基地址则通过CCSRBAR寄存器进行配置。与PCI配置相关的寄存器则属于CCSR空间的General Utilities部分[5]。在集成了E500核的PPC处理器系统中,典型的内存空间及CCSR空间划分如图3所示。
-
图3 CCSR空间映射示意图
-
由图3可知,在CCSR空间的General Utilities中,为PCI配置分配了三段独立的寄存器空间,起始偏移地址依次为:0x8000、0x9000、0xA000。这三段寄存器地址空间分别对应三个独立的PCI总线控制器,在这三段地址空间内,寄存器的分布情况则完全相同,具体结构如图4所示。
-
图4中与CPU地址空间和PCI地址空间地址映射相关的配置寄存器隶属于ATMU寄存器段,该段寄存器地址偏移从0xC00开始,共包含5组outbound寄存器和3组inbound寄存器。其中,outbound寄存器组负责CPU地址空间到PCI地址空间的映射配置;inbound寄存器组则负责PCI地址空间到CPU地址空间的映射配置。以图2为例,只有在outbound寄存器组中配置了相关的映射关系之后,CPU发出的对0x90000000—0x9FFFFFFF地址段的访问,才能够被成功转换成对PCI地址空间0xF0000000—0xFFFFFFFF地址段的访问;同样地,也只有在inbound寄存器组中配置了相关的映射关系之后,PCI设备发出的对0x30000000—0xAFFFFFFF地址段的访问,才能够被成功转换成对CPU地址空间0x00000000—0x7FFFFFFF地址段的访问。
-
图4 PCI配置空间寄存器
-
在集成了E500核的PPC处理器系统中访问PCI地址空间,除了配置上述的映射关系以外,还需要在Local Access Window(LAW)寄存器中,对映射关系中的CPU地址空间进行访问配置,将CPU对于该段地址空间的访问处理指派给PCI总线控制器[6]。实际上,在集成了E500核的PPC处理器系统中,所有的地址空间的访问都需要在LAW寄存器中进行配置,以决定该段地址空间的访问目标。由图3可知,LAW寄存器组位于CCSR寄存器空间的起始位置(偏移为0),大小为0x1000。
-
LAW寄存器组共包含12组LAWBAR和LAWAR寄存器,每组[LAWBAR,LAWAR]寄存器配套使用。其中,LAWBAR寄存器负责配置地址空间的起始地址,LAWAR寄存器负责配置地址空间的大小、目标以及使能位,如图5所示。
-
图5 LAW寄存器
-
图5中,LAWAR寄存器的TRGT域负责指定该段地址空间所访问的实际目标。与三路PCI总线控制器对应的TRGT值分别为:0、1、2。
-
根据以上介绍,在集成了E500核的PPC处理器系统中对PCI进行配置的过程可以归纳为以下几个主要步骤。
-
第一步:配置CCSRBAR寄存器,为CCSR空间的寄存器分配起始地址,假设将CCSRBAR设置为0x70000000。
-
第二步:通过CCSRBAR寄存器以及LAW配置寄存器的偏移,获取LAW配置寄存器的起始地址为0x70000000。
-
第三步:选取一组未使用的[LAWBAR,LAWAR]寄存器,为访问PCI设备的CPU地址空间配置本地访问窗口。
-
第四步:通过CCSRBAR寄存器以及PCI配置寄存器的偏移,获取PCI配置空间寄存器的起始地址。以第一路PCI控制器(偏移0x8000)为例,其配置寄存器的起始地址为0x70008000。
-
第五步:通过PCI控制器的配置寄存器起始地址,计算ATMU配置寄存器的起始地址。以第一路PCI控制器为例,其ATMU配置寄存器的起始地址为0x70008C00。
-
第六步:通过访问ATMU配置寄存器的内存地址,对ATMU寄存器(包括outbound寄存器组和inbound寄存器组)进行地址空间映射相关的配置。
-
第七步:在设备的BAR空间寄存器中,配置该设备需要使用的BAR空间。
-
通过以上七个步骤,就可以对CPU地址空间和PCI地址空间的映射关系进行配置。配置完成之后,主机CPU和PCI设备之间就可以通过配置好的映射关系进行数据交换。
-
PPC处理器系统中PCI配置的示例代码如图6所示。
-
图6 LAW寄存器
-
3 结论
-
PCI总线作为目前使用最为广泛的局部总线,在各大厂家处理器的体系结构中占据着重要的地位。对PCI设备总线空间的配置是软件使用PCI的重中之重。本文通过对PCI空间配置原理的详细分析,以及结合具体的PPC处理器架构实现,给出了详细的软件配置示例代码,对于理解其它处理器架构下PCI设备空间的配置有一定借鉴意义。
-
参考文献
-
[1] GUO J Y,HE Z W.Design of general data-processing board based on embedded PowerPC platform[J].Advanced Materials Research,2011,403-408:1981-1984.
-
[2] LIU W,LIU Y F,QIAO L Y.Development of dual-channel high-speed data acquisition card based on PCI bus[C]//2013 IEEE AUTOTESTCON,September 16-19,2013,Schaumburg,IL,USA.[S.l.]:IEEE,2013.
-
[3] 刘红甫,樊双丽,曲道奎.基于PowerPC的单板计算机的设计[J].微计算机信息,2008,24(29):60-62.
-
[4] WILSON T.PowerPC-PCI bridging in embedded applications[J].Electronic product design,1998,19(6):25-26,28.
-
[5] HOU J B.Study on PCI bus and ISA bus conversion design[J].Computer Applications and Software,2013.DOI:10.4156/jdcta.vol7.issue4.55.
-
[6] 刘博,颜丰琳,程小芩.PowerPC8270数据处理模块的异步总线接口设计[J].长江信息通信,2019(6):75-76.
-
[7] 李智慧,张双,刘帜琦,等.PowerPC多核处理模块性能测试方法研究[J].长江信息通信,2023,36(4):121-123.
-
[8] 王志强,何洋,黄子露.PowerPC755模块常见故障分类及排除[J].电子世界,2021(8):178-179.
-
[9] 范坤.航空电子设备的一种多核高速处理平台设计[J].单片机与嵌入式系统应用,2023,23(5):73-77.
-
[10] 边庆,白晨,田征戈.基于P2010处理器的嵌入式系统硬件平台设计[J].信息技术与信息化,2022(4):163-166.
-
摘要
PCI总线属于处理器系统的局部总线范畴,作为系统总线的延伸,PCI总线的主要目的是为了连接处理器与外部设备。自从PCI总线规范提出以后,迅速得到了广大厂商的认可与推广,进而在处理器体系结构中始终占据着重要的位置。从软件使用的角度来看,PCI总线的空间配置属于一项重要内容。通过分析PCI总线空间配置的基本原理,并且结合PPC处理器架构下PCI设备空间配置的具体要求,详细介绍了软件使用层面的PCI配置原理及技术实现细节,并且给出了相关的示例代码。
Abstract
Peripheral component interconnect(PCI) bus belongs to the local bus category of the processor system, as an extension of the system bus, the main purpose of PCI bus is to connect the processor and external devices. Since the PCI bus specification was proposed, it has been rapidly recognized and promoted by the majority of manufacturers, and has always occupied an important position in the processor architecture. From the perspective of software use, the spatial configuration of PCI bus is an important content. By analyzing the basic principle of PCI bus space configuration, and combining with the specific requirements of PCI device space configuration under PPC processor architecture, this paper introduces the PCI configuration principle and technical implementation details at the software use level in detail, and gives the relevant example code.
Keywords
PCI bus ; PCI space configuration ; PPC processor architecture