关键词:精简指令集计算机(RISC);PowerPC440GP;VxWorks BSP;BootROM
1 引言
PowerPC440GP是IBM公司推出的高性能32位RISC嵌入式处理器,片上集成了PowerPC440内核及各种丰富的外围设备接口资源,最高速度可达500 MHz,适合应用在嵌入式产品诸如交换机、路由器、网络服务器等台式设备中。本文针对该处理器的特点提出一种针对网络服务器的较为通用的应用系统设计方案,并对此方案的关键软硬件技术进行讨论。
2 PowerPC440GP的特点与性能
128位处理器局部总线(PLB)可提供峰值为4.2GB/s的读写能力,用来访问PCI,DDR SDRAM等高性能设备,采用36位地址路径,能提供64 GB内存寻址能力。
32位片上外围设备总线(0PB)连接串口、以太网口、外部总线控制器、I2C口等低性能设备,以提高PLB总线利用率。
10位寻址的DCR总线访问PLB总线上各种主从设备的状态与控制寄存器。
拥有64位片上双倍速率DDR SDRAM控制器,最多可提供4个设备片选信号。
拥有最高频率133MHz的64位PCI接口。
可支持8个外设的32位外部总线控制器。
2个10 MB/s/100 MB/s片上以太网控制器。
2个串口和2个I2C口。
32个通用输入输出口GPIO。
13个外部中断和45个内部中断资源。
CPU工作频率可在400 MHz、466 MHz、500MHz频率下通过初始化配置选择,一般功耗小于4W。
电源:逻辑电压为1.8 V,DDR SDRAM接口电压为2.5V,I/O口电压为3.3V。
3 应用系统设计方案
该网络服务器平台以PowerPC440GP为核心,进行了必要的扩展,系统结构框图如图1所示。
系统包含PowerPC440GP处理器及其上电复位电路、电源电路、系统时钟电路、DDR内存及扩展电路、程序存储及启动调试Flash电路,1个连接在I2C总线上提供启动配置的EEPROM,用于ICE调试的JTAG口,以及以太网口、串口等通信接口。
3.1 电源电路设计
本系统共需1.8 V和2.5 V、3.3 V 3种电源,其中由开关电源为系统提供统一的3.3 V电源和地平面,选用LP3963ES-2.5型LDO提供2.5 V电压,该电路的最大负载电流可达3 A,能满足系统需要。以2.5 V为输入,选用的TPS77518型DC/DC转换器提供1.8 V电压,可有效减少二次电源的功率损耗。
3.2 CPU时钟电路设计
本系统采用一个33.33 MHz的外部晶体振荡器连接到CPU的Sysclk引脚作为外部输入的低频时钟源,然后通过初始化配置片内锁相环(PLL)将外部输入的低频时钟源倍频,为系统提供高频系统时钟。
3.3 DDR SDRAM电路设计
由于PowerPC440GP的DDR SDRAM接口具有最高64位数据总线和8位ECC纠错位,所以选用5个HY5DU281622ETP-M作为板上内存模块,该电路结构为8 Mxl6 bits,5个内存电路共用1个bankSel0片选空间,其中4个内存电路构成数据总线为64位的数据存储区,内存容量为64 M字节,另外1个内存电路的低8位用作ECC。还可扩展1个184针的DIMM(必须采用72位的ECC内存条)。内存模块各电路及DIMM的时钟由PowerPC440GP的Memclkout0引脚提供(其频率等于PLB总线时钟,一般为100 MHz或133 MHz)。为了保证各器件时钟同步.引入CY2309时钟匹配器件,该器件拥有内部时钟锁相环,可以将引脚输出的时钟信号分成9条相位频率完全相同的时钟信号(5条供给芯片,4条供给DIMM),并且可以避免任一时钟信号反射对其他时钟造成的影响。DDRSDRAM模块采用SSTL-2信号标准,工作电压为2.5 V。进行布板设计时要重点考虑Data/DM/DQS等信号线的走线及长度、信号线的端接方法及符合SSTL-2信号要求的端接电压VTT和输入参考电压信号VREF的电路设计。Data/DM/DQS等信号线应尽量采用相同的走线结构并严格保持等长。信号线末端的端接推荐使用串并联方式,如图2所示。这里串联端接电阻器的阻值一般为22 Ω,并联端接电阻器阻值一般为25 Ω,位置应尽量靠近信号接收端引脚,可有效减少信号反射和电磁干扰,适应更高的时钟率。对于端接电压VTT和参考电压VREF,采用内存厂商推荐的ML6554来提供。另外,由于DDRSDRAM电路时序操作的复杂性,结合控制器内部时序寄存器的配置对这部分电路进行板级仿真是非常重要的。
3.4 程序存储电路设计
由于PowerPC440GP的EBC总线具有32位数据线,选择2个MX29LVl60BTC型Flash器件用以存放BSP、实时操作系统VxWorks和用户应用程序。将Flash的BYTE引脚设置为高电平,使Flash工作于x16模式。这样2个Flash共用1个CS0片选空间,构成EBC数据总线同步访问的高16位和低16位,容量为4M字节。由于PowePC440GP采用PowerPC内核,即440GP的A31是LSB,A0是MSB,数据总线亦然,而Flash的A0和DO皆是LSB,连线时要注意引脚次序。另外,由于Flash是4字节同步读取操作,连线时应将CPU的地址线左移2位,即最低位A0和Al不用。
为了便于系统调试,可增加1个512 KB的SST39SF040用于BootROM启动,通过跳线与2个Flash互选CS0片选,这样系统启动时会自动从CSO的设备上读取启动代码。程序存储模块如图3所示。
3.5 以太网接口电路设计
用RTL8201BL型网口电路实现Power-PC440GP与100MHz以太网的接口,使用外部25MHz晶体振荡器,通过16PT8515型网络滤波器连接以太网,如图4所示。由于PowerPC440GP带有100 MHz以太网MAC,所以能够实现和RTL820lBL的无缝连接。RTL8201BL有2种接口:SNI和MII,本系统采用MII。接口的选择可以通过设置MII/SNIB引脚为高电平、正确设置ANE、SPEED和DUPLEX引脚来实现。MII能够运行在25 MHz和2.5 MHz频率,分别为100 MHz以太网和lO MHz以太网支持。数据传输时,MAC首先判定THEN信号并将8位数据改为4位数据,再通过TXD[0:3]传到物理层上,在TXEN信号有效期间,PHY通过传输时钟信号TXCLK对TXD[0:3]上的数据进行同步采样;接收数据时,PHY判定接收使能信号来接收RXD[0:3]上的数据。
3.6 系统启动配置
PowerPC440GP有1个I2C总线启动配置控制器。当引脚UARTO-DCD#被置为高电平时使能该控制器。选用1个保存有启动配置信息的AT24C32连接到I2CO接口作为从设备。当系统上电或者复位时,该控制器能够从位于I2C0接口的从设备中连续读取16个字节。这16个字节数据被保存在4个上电配置寄存器CPC0-STRPO:3中,用来初始化PLL设置、片内各总线时钟率、启动位置、启动宽度及一些用户定义的配置等。如果读取数据失败或者引脚UART0-DCD#被置于低电平,则这些配置将全部使用默认值。另一配置引脚UART0-DSR#置高电平或低电平决定了I2C总线从设备7位地址是0xA0还是0xA8。
4 VxWorks的开发与移植
本系统选用Windriver公司推出的嵌入式实时操作系统VxWorks及其集成开发工具Tornado。系统开发调试工具采用Windriver公司生产的Vision-Ice仿真器。仿真器一端连接PC网口,另一端连接PowerPC440GP的JTAG接口。开发时首先调试PowerPC内核和外部DDR SDRAM,一旦工作正常,就可以通过仿真器下载RTOS到内存来辅助硬件调试。然后调试网口,如果网口工作正常,就可以脱离仿真器,利用Tornado提供的工具软件(例如WDB),通过网口线建立电路板与PC的通信机制,调试其他模块和开发应用程序。开发程序完成后,将正确的启动代码烧制到BootROM中,由BootROM引导程序通过ftp将VxWorks内核与应用程序下载烧制到Flash中。
VxWorks广泛流行的重要原因是它的可移植性,通过板级支持包BSP,VxWorks操作系统的应用代码可独立于硬件。系统移植时只需根据硬件平台修改BSP,不需要改变操作系统和应用程序。
5 VxWorks BSP文件结构与开发流程
在VxWorks中,BSP由一组与特定目标系统相关的文件组成。这些文件包括编译文件makefile、ROM初始化文件romInit.s、系统初始化文件sysAlib.s、配置文件config.h、目标板定义文件bspname.h、网络配置文件configNet.h、系统库文件sysLib.c、用户配置文件usrConfig.c、引导配置文件bootConfig.c、引导初始化文件bootlnit.C、串口文件sysSerial.c、以太网接口文件ibmEmacEnd.c等,BSP启动流程如图5所示。
5.1 建立开发环境
主要以开发板CPU的BSP文件为模板,在\tornado\target\config目录下创建用户的BSP目录bspname,把\tornado\target\config\all下的文件和BSP模板文件拷贝到该目录下。
5.2 修改模板文件
5.2.1 makefile
该文件通过命令行方式对创建映像文件进行控制,必须定义下列宏:
CPU:PowerPC440GP;
TOOL:GNU;
TGT_DIR:目标板目录的路径,使用默认;
TARGET_DIR:BSP目录名,自定义;
VENDOR:目标生产商名,IBM;
BOARD:目标板名,自定义;
ROM_TEXT_ADRS:启动ROM的入口地址,本系统设为O×fff80100;
ROM_SIZE:ROM大小,本系统为512 KB;
RAM_LOW_ADRS:加载VxWorks的目标地址,本系统设为0x00010000;
RAM_HIGH_ADRS:将引导ROM映像复制到RAM中的目标地址,本系统设为0x00C00000。
5.2.2 bspname.h
该文件根据PowerPC440GP设置串行接口、时钟及I/O设备等,必须包含以下内容:
中断向量/优先级别;
I/0设备地址;
设备寄存器各位的含义;
系统和附加时钟参数(最大和最小速率)。
5.2.3 config.h
该文件包含定义所有与PowerPC440GP目标板相关的组件。
设置缺省启动行:使用网络启动;
RAM地址和大小:地址从0开始,64 MB大小设置ECC:使能;
设置是否支持MMU和Cache:支持Cache;
定时器是否使用外部时钟:否;
串口时钟定义:使用外部时钟;
串口默认通道:使用通道1;
包含网口:支持以太网接口;
WDB默认通信方式:网口。
另外,注意ROM_TEXT_ADRS,ROM_SIZE,RAM_LOW_ADRS,RAM_HIGH_ADRS必须与makefile中的定义保持一致。
5.2.4 romInit.s
该文件是一端汇编语言的初始化代码,其中的romInit()函数是BootROM和基于ROM的Vx-Works映像的入口。需要做的工作有:
将相关寄存器清零和置位;
屏蔽中断:通过设置MSR寄存器中的CE位与EE位;
关闭数据、指令Cache;
初始化EBC总线寄存器:通过对bank寄存器的设置为EBC总线上的各种设备分配片选信号与地址空间;
初始化内存:对DDR SDRAM接口各寄存器进行配置,为板载内存与DIMM分配片选信号与地址空间。注意时序寄存器SDRAM0_TRl,SDRAM0_WRDTR等的配置应与内存模块的布线仿真结合起来;
初始化堆栈指针;
计算romStart()函数地址,然后跳转到该函数执行C语言代码,并不再返回。
5.2.5 用户配置文件usrConfig.c
其中的代码是VxWorks映像的主要初始化代码,而引导配置文件bootConfig.c中的代码是bootrom映像的主要初始化代码。bootInit.c是ROM初始化的第2阶段,RomInit()完成后跳转到此文件中的romStart(),该函数完成ROM映像所需要的解压缩和重定位工作。以上3个文件一般无须用户直接修改。
5.2.6 系统库文件syslib.c
该文件包含与特定目标系统相关的库函数,这些函数为操作系统和应用程序提供板级接口,使这些程序与硬件系统无关。该文件至少包含下列函数:sysModel,sysBspRev,sysHwInit,sysHwInit2和sys MemTop等,其中sysHwInit是本文件的核心,大部分硬件初始化工作都在这部分完成,本系统也可选择将包括串口,网口等硬件设备的初始化入口程序添加到该函数中,相关设备的驱动程序可作为子文件引入syslib.c。
5.3 创建VxWorks映像
根据具体需要在命令行环境下利用makefile创建各种镜像,也可以在Tornado集成环境下在Build菜单里选择Build Boot Rom来创建各种类型的BootROM。
6 结束语
介绍了一种新型高性能嵌入式处理器,并对以这种处理器为核心构建的网络服务器的硬件设计和软件开发流程做了详细说明。鉴于不同处理器的嵌入式系统设计具有一定的共性,本文可为其他类型的嵌入式系统开发提供一定的参考。