摘要:通过分析920T核ARM 处理器的高速片上系统总线AHB时序及其静态存储控制器SMC接口模型,研究IBM PC/AT和IEEE PC/104总线规范,提出一种在ARM 平台上实现兼容PC/104总线的方案.深入探讨两种平台体系在存储器结构、指令系统及总线时序等方面的巨大差异,给出了克服这些差异并实现总线功能兼容的方法.该兼容总线解决了在ARM 平台上无法使用标准PC/104模板的难题,采用该方案有利于在嵌入式系统的设计中兼取ARM 处理器和PC/AT体系的优势.
引 言
PC/104 是一种专门为嵌入式应用而定义的工业控制总线规范.以IBM PC/AT总线规范为基础的个人计算机及其外围设备在应用上取得了巨大的成就,IEEE一996称之为ISA(工业标准架构:Industry Standard Architecture)总线.PC/104是ISA标准的延伸,定义在IEEE-P996.1中,称为兼容PC嵌入式模块标准.PC/104实质上是一种紧凑型的ISA,其信号定义和Pc/AT基本一致,但电气和机械规范却完全不同,是一种优化、小型、堆叠式结构的嵌入式总线系统.PC/104总线来自于实践发展的需要,同时得益于PC技术的迅速发展,由于其开发环境友好、兼容芯片丰富、标准支持广泛等优势,受到了众多从事嵌入式产品生产商和系统集成商的欢迎,尽管现在ISA设备已不常见,但PC/104在嵌入式系统领域却仍是通行的标准.
ARM是当前嵌入式系统应用中的热门技术.由于ARM处理器的卓越性能、较低的价格以及业内半导体厂商的广泛支持,在嵌入式环境中有广泛的应用.ARM 公司创造了CHIPLESS模式,该公司通过将高效的ARM 内核授权给半导体公司,由半导体公司根据实际的应用情况加上各种外围的功能电路来构成一块完整的芯片,这种模式使半导体厂商得以有能力生产功能强大的各种专用处理器芯片.AR M在设计上基于SoC思想,优先考虑对每一个具体应用使用最大可能集成周边设备的单一芯片,但在板极扩展方面仍然缺乏能被广泛接受的新工业标准.
1 PC/AT模型和PC/104总线
1.1 总线信号
PC/104_4 ]是一种16位总线,但可向前兼容8位XT模式,典型总线时钟为8 MHz,4个时钟脉冲可完成一次完整的总线访问,必要时可插入一个额外的等待周期以适应低速外设.在嵌入式系统开发中常用以下信号.
1.1.1 地址和数据信号线
BALE总线地址锁存使能信号线,由平台CPU驱动.当ISA扩展卡或DMA控制器占用总线时,它也被置为逻辑1.
SA~19:O>:低2O根地址信号线,由当前总线的拥用者驱动.
LAd 23:17> :锁存地址信号线,用来访问16MB的存储器地址空间.由当前总线拥有者或DMA控制器驱动.
SD<15:0> :数据信号线.
1.1.2 总线周期控制信号线
MEMR#:存储器读信号线.
MEMW #:存储器写信号线.
IOR#:I/O I/O读信号线.
IOW #:I/O I/O写信号线.
1.1.3 中断和DMA(Direct Memory Access)信号线
IRQx:中断请求信号线.
DRQx:DMA请求信号线.
DACKx#:DMA应答信号线.
1.2 地址空间
PC/AT系统使用不同的指令访问存储器空间和IO端I:1空间,访问存储器空间时PC/104总线驱动MEMR#和MEMW#信号,访问存储器空间时PC/104总线驱动IOR#和IOW #信号.两个空间使用同一套地址线,但是由于端口空间只有64K有效,所以进行IO 端口访问时地址线上只有SA<15:O>是有效的.
PC/AT系统有专门的端口访问指令用于实现端口访问,Linux用户程序只需以root权限调用ioperm()指定需操作的端口地址范围,之后即可自由访问这些端口.由于用于访问端口的一组宏实际上直接对应CPU的端口访问指令,所以存取效率很高.
1.3 PC/104总线周期
PC/104总线周期分为CPU驱动和DMA控制器驱动两大类,在嵌入式应用中较常用的是CPU驱动的IO读/IO写周期.
图1中采用8 MHz时钟的标准PC/104总线£Rd大于300 ns,tAF应大于250 ns,tRDpw约为500 ns。
2 EP9315(ARM920T)体系
2.1 存储器结构和地址空间
EP9315是Cirrus Logic公司生产的典型ARM 920 TDM I(Thumb,Debug,M ultiply,Em—bedded ICE macrocel1)32位哈佛结构处理器.EP9315有一个通用存储器访问接口,支持SDRAM,SRAM,ROM,及FLASH(包括N0R FLASH)等不同形式的存储器,各种存储器访问均共享数据总线DA[3l:O]和地址总线AD[Z5:o],使用统一的访问控制逻辑 。
与X86模型不同,ARM 平台只实现一个物理地址空间,在Bo0T成功后只拥有一个唯一的虚地址空间,CPU不设立专门的外设I/O指令,访问外设I/O端口和内存单元使用相同的指令.
引脚CSn[7:6]和CSn[3:O]用于存储器芯片的选通,除发生时间略有差异之外(图2),基本上可视为地址总线的高位线.
2.2 AHB总线时序和SRAM 接口
AHB(Advanced High-Speed Bus)是EP93 1 5内部920T核与存储器、DMA,存储器等设备实现高速互联的系统总线.EP9315的AHB具有完善的多主控冲突仲裁能力,其典型工作频率可达100 MH。
静态存储控制器SMC(Static Memory Controller)与920T核心通过AHB互联,支持存储器的8/16/32位访问方式.SMC最多可提供8个组,每个组均可支持SRAM,ROM,FLASH EPROM 等存储器的访问,各组可以对数据总线宽度和速度等参数独立配置.图2描述了SRAM 读操作时序.
图中f删为CSn到RDn的延迟,最大值为3 ns;tDAs是RDn无效前的数据总线建立时间,最小值为12+tHcI tRDD 是RDn有效时间,典型值为t HcI K×(W ST1+ 2)。
HCLK是AHB总线的工作频率,该频率的高低直接影响系统全局性能,因此通常配置为上限100 MHz,此时相应周期£胁 为10 ns.WSTI用于控制sMc对SRAM/R0M 的访问速度,寄存器SMCBCR0—3, SMCBCR6-7 (地址0x80080000—0x8008001C)的第5-9位分别为相应各组的WST1.WST1的默认值为0xlF,即默认情况下SMC使用
最低的访问速度,显然fRDD 为330 ns,小于PC/104总线中的500 ns(图1).
3 PC/104总线实现
3.1 总线驱动
在EP9315支持的各类总线接口逻辑中,SMC提供的SRAM/ROM 时序与PC/104总线最为接近.将外部设备所需的PC端口空间和存储器空间均映射至统一的虚拟空间中即可实现访问.
注意到PC/104总线使用标准TTL逻辑电平,而EP9315的处理器是3.3 V器件,在极端负载情况下无法保证系统稳定工作.TI的双电源总线收发器1T45,2T45,16T245等可用于实现电平转换,图3是1T45的引脚逻辑图.
地址总线及访问控制信号均由CPU驱动,外部设备始终处于被动接收状态,正确设定数据流向即可.
数据总线信号是时分双向传输的,为遍免出现总线冲突,必须保证除非CPU 透过该收发器对外设进行读访问,否则收发器的CPU 侧应始终处于高阻状态.为此,16T245等具有输出使能端的器件只需使输出无效即可,而对于无使能端的收发器则应使CPU侧处于输入状态(高阻).
确认CPU 已向兼容PC/104总线发起读操作的有效方法是检查RDn的下降沿是否发生.一旦RDn下降,应立即将收发器置成从外设流向CPU方向,且输出使能有效,并至少保持至RDn上升沿之后,以保证可靠读取.
3.2 端口映射
SMC的存储器分组片选信号CSn可作为高位地址线参加这址译码.任取CSi和CSj组用于兼容总线,即可分别实现O-0x3FFFFFF的独立存储器地址和IO端口地址.可用地址数量已经远超出XT系统中的1 M(存储器)和1 K(IO端口).
在Linux系统中,io.h文件中声明了函数iore—map(),用于将兼容总线上外部资源的物理地址映射到核心虚地址空间中.iounmap()函数用于取消ioremap()所做的映射.上述操作都应在设备驱动程序中执行.在外部资源成功映射到核心虚地址后,使用指向核心虚地址的指针就可访问相应设备资源,但显然这种访问方式与在X86平台下差异较大.
将兼容总线视为一个独立的字符设备,为其编写驱动程序,实现对指定偏移地址的读写函数,此处的偏移地址即对应PC/104总线中的物理地址 .
对inb(),outb()等X86平台下的常见的底层端口操作函数,可用宏替换的方式转由驱动中的相应读写函数实现.
3.3 总线时序控制
综合前文所述,尽管SMC的SRAM 访问时序非常接近PC/lO4总线,但是要实现高兼容性的PC/lO4,仍有两方面问题需要解决,一是SMC驱动的SRAM 读写速度远高于PC/104总线,二是为解决电平兼容问题引入的总线收发器,其数据流向和输出使能需要适当的控制.
以下VHDL代码根据SMC输出的RDn和WRn设置EIOR和EIOW 时序,并适时输出信号EXIDR,EXOE控制收发器数据流向和输出使能.
ECLK是频率为27 MHz是时钟脉冲.
If ECLK’EVENT and ECLK一‘1’then
if(⋯ )then __地址无效
EXoE< 一:1’;
EXDlR< 一‘1’;
EIOR< 一‘1’;
rdreg< 一0;
else
if rdreg< 1 l then
rdreg< 一rdreg+ 1;
EXOE< 一‘0’;
else
rdreg< 一0;
EXDIR< 一‘1’;
EXoE< 一‘1’;
end if;
if rdreg< 2 or rdreg> 6 then
EIOR< 一‘1’;
EIOW < 一‘1’;
elsif rdreg一2 or rdreg= 3 then
if RDn一‘1’then
EIOR< 一‘1’;
EXDIR< 一‘1’;
elsif W Rn一‘1’then
EIOW < 一‘0’;
EXDIR< 一‘1’;
end if;
end if;
上述代码适当延迟了关闭双电源收发器的输出使能和数据流向重设时间,保证数据总线稳定,使CPU 和外设有足够的时间进行输入输出操作.
图4中曲线2是兼容PC/104地址空间内任意地址信号经收发器缓冲后的译码结果,曲线1和曲线3是对该地址进行读操作时的RDn和IOR信号.
图4中RDn由EP9315直接驱动,原始逻辑电平为3.3 V,实验电路对该信号电平进行了无时延的处理.
目前主流元器件在速度上都已能兼容PCI总线,因此尽管SMC驱动的SRAM 读写速度高于标准PC/104总线,但只要保证各控制信号问关系清晰(图4b),是不会造成总线访问失败的.
4 结束语
利用ARM 系统成本较低,功耗更小,启动速度快,指令效率高的的特点,兼取PC/AT系统和PC/104总线设备在产业化基础方面的优势,在ARM平台上构建PC/104总线,有助于利用现有资源,保护已有投资.由于ARM 与PC/AT模型在处理器架构上有本质性的差异,在ARM 平台上构建的PC/104总线在所有的具体应用中要做到与标准PC/104规范完全兼容几乎是不可能,但是在特定的应用需求及确定的操作系统下这种努力是完全可行并且有效的。对于特定的应用而言,通常只需顾及PC/104总线时序的一个子集,这就大大降低了系统现实的难度。兼容PC/104总线在使用遵守ISAPnP(Plug and Play)规范的设备时有较多的困难。另外在使用包含中断请求和DMA需求的设备时也需要专门的考虑。