1. 引言
PCI总线是目前应用最广泛、最流行的一种高速同步总线,具有32bit总线宽度,总线时钟频率为0~33MHZ,最大传输速率可以达到132Mbyte/s,远远大于ISA总线5Mbyte/s的速度。而且,它不象ISA总线那样把地址寻址和数据读写控制信号都交给微处理器来处理,而是独立于处理器,所以它可以支持突发传送。PCI总线与CPU无关,与时钟频率也无关,因此它可以应用于各种平台,支持多处理器和并发工作。
PCI总线协议比较复杂,因此它的接口电路实现起来也比较困难。它不但有着严格的同步时序要求,而且为了实现即插即用和自动配置,PCI接口还要求有许多的配置寄存器。对于一般的设计者来说,为了缩短开发周期,没有必要自己去设计所有的接口逻辑,只要利用通用PCI接口芯片就能很好的进行设计开发,大大减小了工作的难度。现在使用较多的是AMCC公司S59XX系列和PLX公司推出的PLX系列。下面将主要介绍PLX公司的PCI9050接口芯片。
2. PCI9050概述
PCI9050是PLX公司为扩展适配板卡推出的能提供一种混合的高性能PCI总线目标模式的接口芯片,可提供用于适配卡的小型高性能PCI总线目标接口。
它的主要特点有下面这些:
l 符合PCI2.1规范,支持开发低成本的从模式适配器。该芯片支持从ISA适配器向PCI适配器转换。
l 带有五个局域总线地址空间和四个片选。
l 支持突发存储器映射和I/O映射方式在PCI总线和局部总线存取数据。双向FIFO可以用于零等待状态突发操作。PCI总线总是工作在突发方式,局部总线可以设置成突发方式或者连续单周期方式。
l 可以从两个局部总线中断输入生成一个PCI中断。
l 局部时钟与PCI时钟异步工作,允许局部总线独立于PCI时钟工作。
l 支持多路复用和非多路复用的8位、16位和32位通用局部总线。
l 总线驱动。PCI9050直接生成所有的控制、地址和数据信号,用于驱动PCI总线,不需要额外驱动电路。
3. PCI9050的功能描述
PCI9050为非PCI设备和PCI总线提供数据通道。
(1)初始化
在上电时,PCI9050的内部寄存器由PCI总线的RST#信号复位,在局部总线上输出LRESET#信号并检查EEPROM是否存在数值。若是存在且前48位不全为1,则PCI9050用EEPROM中的值来配置片内寄存器,否则设为缺省值。PCI配置寄存器只能通过EEPROM或PCI主机CPU来进行设置。在串行EEPROM初始化时,PCI9050反馈给PCI总线RETBY信号。
(2)复位
PCI总线的RST#信号有效将引起整个PCI9050复位,输出LRESET#局部复位信号。PCI总线上的主控设备也可以通过设置寄存器中的软件复位比特来对PCI9050进行复位,但是主控设备只能访问配置寄存器,而不能访问局部总线。PCI9050会一直保持这种复位状态直到PCI主控设备清除软件复位比特。
(3)串行存储器接口(EEPROM)
复位后,PCI9050开始读串行EEPROM。START为0表示EEPROM存在,PCI9050用它来进行配置。若读出的第一个字不是FFFF,那么就认为EEPROM是非空的,继续进行操作。串行EEPROM是按重要性顺序先后配置信息的。
PCI总线上的主机可以对EEPROM进行读写,寄存器位[29:24]控制着PCI9050的管脚,对EEPROM位进行读写。将重载配置寄存器位CNTRL[29]置1可以用串行EEPROM重新配置PCI9050。
(4)访问内部寄存器
PCI9050提供一系列的内部寄存器来为总线接口设计与实现提供最大的灵活性。寄存器分为两类:PCI配置寄存器和局部配置寄存器。主要有以下几种:
l 设备与厂商寄存器,它用来标识设备类别及生产厂家。
l 状态寄存器,它包含与PCI总线有关的事件。
l 命令寄存器,控制设备对PCI访问的响应。
l 分类码元寄存器,它用来标识设备的一般功能。
l 局部配置寄存器存储器访问的PCI基地址寄存器:系统BIOS利用此寄存器为PCI9050局部配置寄存器的存储器访问分配一段PCI地址空间,范围为128字节,初始化时,主机对寄存器写入FFFFFFFF,读回FFFFFF70,以确定其占用空间为128字节。
l 局部配置寄存器I/O访问的PCI基地址寄存器:系统BIOS利用此寄存器为PCI9050局部配置寄存器的I/O访问分配一段PCI地址空间,范围为128字节,初始化时,主机对寄存器写入FFFFFFFF,读回FFFFFF71,以确定其占用空间为128字节。
l 局部地址空间0(地址空间1,2,3类似)访问的PCI基地址寄存器:系统BIOS利用此寄存器为PCI9050局部地址空间0的访问分配一段PCI地址空间。初始化时,主机对寄存器写入FFFFFFFF,读回数值来确定它的范围。
对PCI9050寄存器进行读写操作的单位可以是字节,字,长字。PCI9050的存储器访问可以是突发的或非突发的。
(5)直接数据转换操作
PCI主控设备能够直接对局部总线上的设备进行读写操作。PCI9050内的配置寄存器控制局部地址空间的重新映射。双向FIFO引起局部和PCI总线上高性能的突发。
直接从操作:PCI9050支持突发式内存映射传输和单周期的内存或I/O映射传输。映射在PCI内存和I/O空间中的地址由PCI基址寄存器设置。而且,局部映射寄存器允许将PCI地址空间转换为局部地址空间。
4. PCI9050使用时应该注意的问题
9050内部的寄存器是通过外部串行EEPROM上电加载的。9050会自动根据该EEPROM的状态来决定其内部寄存器的值。如果EEPROM内部没有烧写为有效值,应保证其开始48位全为“1”,否则,系统上电时会出错。
9050有5个本地空间,用户可根据实际的需要来进行配置,并不是要用到所有的。当将本地空间配置成I/O时,对该空间的读写只能单次进行。如果配置成存储器模式,用户会有多种接入模式,大大提高了速度。
突发模式是为了提高本地总线操作速度而设计的。在该模式期间,9050只提供一次传输开始和终止信号。开始信号有效时,地址将以本地时钟的频率递增,可以利用BTERM#引脚是否有效来中止突发操作。
还有一点需要说明的是,Pentium系列的CPU,不支持突发读操作,只可能产生单次读操作。用户如果需要在PCI总线上实现突发操作,应该选用支持DMA传输的芯片,比如PCI9054。但是PCI9050会把PCI总线上的多次单次读操作转化为突发操作。
5. 基于PCI9050的PCI接口设计
下面给出的是一个利用PCI9050做接口的PCI插卡。在用户电路上,采用MT90820做交换,实现数字电路的转接和复接。具体电路如下图所示。
(1)硬件设计:
接口芯片PCI9050主要包括PCI总线信号接口和局部总线接口。硬件电路分为三个部分。第一部分是9050和PCI插槽间的连接信号线。这些信号包括地址数据复用信号AD[31:0],总线命令信号C/BE[3:0]#和PCI协议控制信号PAR、FRAME#、IRDY#、TRDY#、STOP#、 IDSEL、DEVSEL#、PERR#、SERR#。第二部分是与串行EEPROM的连线。这里有四根信号线:EESK、EEDO、EEDI、 EECS,串行EEPROM的数据可以提前烧好,也可以在线烧写。第三部分就是9050与应用电路的连接。在这个例子里,它和MT90820相连,包括 LA地址总线,LAD数据总线,LBE#字节使能信号,LW/R读写信号等。
(2)软件设计:
程序主要分为两个部分。一部分为PCI9050各个配置寄存器赋值并初始化,还有一部分为主程序,任务就是把PCM链路上的信号经过MT90820交换矩阵后,再通过PCI9050送到CPU。
6. 结束语
由于PCI总线数据吞吐量大,传输速率高,所以现在PCI总线已经慢慢取代了ISA总线成为主流。当然,PCI总线协议要复杂的多,接口设计难度也就增大了。目前,设计PCI接口有两种方法。一种是使用ALTERA,XILINX等公司的FPGA系列并使用他们的元件库,这种方式需要用户直接面对复杂的PCI协议,开发周期长,难度大;还有一种就是利用我们上面介绍的PCI接口芯片,设计起来就要简单的多,因此得到了广泛的应用。