PLX9052 PCI板卡的开发
第一章 概述
由于PC机的发展,PCI总线已成为工业和商业PC机的主流。因此学习开发基于PCI总线的技术是许多工程技术人员以及大专院校的当务之急。
§1第一节PCI总线简介
PCI总线与早期的ISA总线有极大的不同,它与ISA总线技术也无任何连贯性。下面我们就将PCI总线与ISA总线作一些对比来简单的介绍PCI总线,让大家对PCI总线有一个比较全面的初步了解。
ISA总线由如下几个部份组成:
数据总线:D0~D15;
地址总线:A0~A23;
控制总线:MEMW、MEMR、IOW、IOR、IRQ3~7,9~12,14,15、IOCHCK、IOCHRDY、RESET、SYSCLK、DACK0~3、DACK5~7、AEN、REFRESH、T/C、SBHE、MASTER、DRQ0~3、DRQ5~7等;
电源:±12V、±5V、GND。
PCI总线由如下几个部份组成:
地址/数据复用总线:AD0~31;
系统引脚:CLK、RST#;
控制总线:C/BE[3:0]#、PAR、FRAME#、IRDY#、TRDY#、STOP#、LOCK#、IDSEL、 DEVSEL#;
仲裁引脚(仅主控):REQ#、GNT#;
错误状态引脚:PERR#>SERR#;
中断:INTA#、INTB#、INTC#、INTD#(一般仅用INTA#);
JTAG边界扫描信号:TD1、TD0、TDK、TMS、TRST#;
电源:±12V、VCC、GND。
从以上的列表可看出PCI总线和ISA总线的不同,ISA总线的地址与数据是独立的,而PCI总线的地址与数据是复用的。因此它不可能像ISA总线那样将应用电路的地址线与其直接连接。但是,如果应用电路的地址与数据总线也是复用的,那是不是就可以直接连接呢?答案是否定的。这是因为PCI总线实现即插即用(PNP),使用了一种软地址分配的方法,即特定的PCI总线上设备的地址,不是设备设计时确定的,而是系统通过软件来分配的。我们会在PCI配置一章中详细说明。
PCI总线与ISA总线除以上不同外,其他地方也均不相同,它没有IOR、IOW、MEMR、MEMW等对于应用电路而言必须要的信号。那么它又怎样来实现对目标设备的I/O空间、存储器空间的读写呢?就PCI总线而言,它主要是由C/BE[3:0]#信号来实现的。它们的具体实现方法见下面PCI总线引脚介绍一节。
§1.2 PCI接口芯片的选定
由上节可见PCI总线与ISA总线的不同,那么我们要设计一个PCI应用电路又该怎么办?其实实现PCI总线的应用设计的方法有许多种,下面我们一一介绍一下。
一种方法是可以使用专用PCI接口芯片,如PLX公司的PCI9052、PCI9054等和AMCC公司的S5933、S5920、S5930等。
另一种方法是使用CPLD或FPGA,通过购买PCI的IP宏来实现。不过这种方法一次性开销很大,一个IP一般要几千美金,并且其辅助软件工具的费用也相当昂贵。这比较适合于大批量的应用,若数量不大则最好不要采用此种方法。
在选定好用何种方式后,下面我们就要来确定使用哪种模式的芯片来设计PCI应用。PCI接口芯片一般有主控和从控两种模式。所谓“主控”就是PCI接口芯片可以让用户电路控制PC机资源(即主动对目标发读写信号)。“从控”就只能让PC机来控制用户电路工作,而用户电路只能被动接受,如ISA总线一样。
那么主控有什么好处呢?由于主控有很强的灵活性,所以在大量数据传输时,它非常的用。下面就一个视频处理应用来将主控和从控作一些比较。
若设某视频应用在PC机内有2块PCI卡,A块是做视频信号的采集工作,B块是做视频信号的压缩处理的。它们要做的工作是A将数据采集好后传给B块供其压缩,并也要传给PC机供其显示,而B块处理完后也要传给PC机供其存盘或送传到网络上。
那么在情况甲下,设A块为主控PCI卡。那么A采集完数据后可以先将数据传给PC机作显示处理,并在PC机作显示处理的同时将数据再传给B卡供其作压缩处理。由于PCI总线带宽足够宽,一般PC机显示还未完,B卡已经处理完,如此PC机又可实时进行存储或送传至网络。
那么在情况乙下,设A块为从控制。则它的数据流向就麻烦多了。首先A将采集好的数据传给PC机,PC机收到数据后马上将数据再传给B块(因为是从控所以不能直接传送)。传送完后再处理显示,等B块处理完后才开始从B块读出数据并作其它处理。以上甲乙两种情况可见下图所示,读者可以看出乙方案中PC机由于过多地卷入传送数据而比甲方案的效率要低一些,因此在做大量复杂的数据处理时最好采用主控方式。
A
PC机
B
硬盘
图1-1 主控模
硬盘
B
PC机
A
式
图1-2 从控模式
在确定主/从方式之后,下面就是要选定采用何种PCI芯片。对于PCI接口芯片而言其PCI总线接口都是一样的,不同就在于用户接口边的不同以及价格的差异。下面就不同产家芯片的用户接口作一个介绍,让读者有个全面的了解。
AMCC公司PCI接口芯片的用户接口如下:
S5933或S5920:Pass_Thru方式接口;
FIFO;
邮箱;
主控接口(仅S5933);SEEPROM或Flash Memory接口(24C01或29512)。
PLX的PCI9052或PCI9050:仿ISA接口(仅PCI9052);
C模式(非复用模式);
J模式(复用模式);
SEEPROM接口(93C46)。
其中S59XX系列的接口中Pass_Thru是从模式接口,其不如PCI905X系列的C模式或仿ISA接口使用方便,它是地址与数据复用的,它的分离处理比较复杂,用户在分离时还需考虑数据总线的宽度以及I/O、Memory空间是在S59XX系列的PCI配置空间的哪一些基地址寄存器中方可正确处理。而PCI905X则只要配置一些寄存器即可,而不用在其外部弄一个很复杂的电路来支持其工作。特别对于老的ISA板转PCI,PCI9052则更是首选,因为其内部集成有相关转换电路,用户不用考虑在外部对PCI信号作相关处理。
但在大量连续数据传输时S59XX可能有优势,因为它的FIFO接口可以让用户电路非常简单,(所谓FIFO就是先进去的数据先出来,不用地址信号,其内部电路会自动地指向下一个数据。)因为用户可以在接口芯片外部级联一个FIFO即可,不用任何地址线产生电路,对于一些DSP是相当有用的。
由上可见,用户在设计电路时要多方考虑,在作出对芯片的选择后方可进入实质的设计。
§1.3 PCI总线引脚描叙
PCI总线接口信号
地址和数据引脚——PCI局部总线
信号
类型
描叙
AD[31:00]
t/s
本地总线地址/数据线。地址与数据是复用的。每次总线操作的内容包括一个地十段和一个或多个数据段。当控制信号FRAME#有效时地址段被识别。在控制信号IRDY#和TRDY#都有效下的这些时钟周期期间产生数据传送。
C/BE[3:0]#
t/s
总线命令和字节允许。这是复用引脚。在总线操作的地址段期间,这些引脚提供总线命令,如下所示。在总线操作的数据段期间,这些引脚被用来当作字节允许,C/BE[0]#允许字节0(最低位字节)和C/BE[3]#允许字节3(最高位字节)。
C/BE[3:0]# 描叙(在数据段期间)
0 0 0 0 中断响应
0 0 0 1 特殊周期
0 0 1 0 110读
0 0 1 1 110写
0 1 0 0 保留
0 1 0 1 保留
0 1 1 0 存储器读
0 1 1 1 存储器写
1 0 0 0 保留
1 0 0 1 保留
C/BE[3:0]# 描叙(在数据段期间)
1 0 1 0 配置读
1 0 1 1 配置写
1 1 0 0 存储器读——多倍
1 1 0 1 双地址周期
1 1 1 0 存储器读线
1 1 1 1 存储器写和无效
PAR
t/s
奇偶
系统引脚——PCI局部总线
信号
类型
描叙
CLK
in
时钟,最大33MHz,最小DC(0Hz)
RST#
in
复位
接口控制引脚
信号
类型
描叙
FRAME#
s/t/s
此信号当前总线主控器驱动并且在总线操作开始和持续期间被识别。当FRAME#首先有效,它指示一个总线传送正在开始并且有效地址和一个相应总线命令被驱动在AD[31:0]和C/BE[3:0]线上。FRAME#维持有效在数据传送期间并且在最后一个数据申明无效。
IRDY#
s/t/s
发起者准备好。
TRDY#
s/t/s
目标准备好。
STOP#
s/t/s
停止
LOCK#
in
锁定。被提供用来独占资源。S5933可以被一个主控器当作目标锁定。S5933在它是主控器时不能锁定其它设备
IDSEL#
in
发起者设备选择
DEVSEL#
s/t/s
设备选择
仲裁引脚(仅总线主控器)——PCI局部总线(注:9052中不需要)
信号
类型
描叙
REQ#
out
请求成为总线主控者
GNT#
in
系统允许该槽的PCI设备成为主控者
错误报告引脚——PCI局部总线
信号
类型
描叙
PERR#
s/t/s
奇偶错
SERR#
o/d
系统错
中断引脚
信号
类型
描叙
INTA#
o/d
中断A
第二章 9052简介
§2.0 基本描叙
PCI9052提供了一个高性能的PCI总线目标(从)接口。9052被设计成连接大量针对PCI总线设计的局部总线(Local bus),并且也被允许相对慢速的设备被设计成满足在PCI总线上的132MB/sec的焠发传送。(焠发传送详见第三章)
PCI9052能被编程去直接连接复用或非复用的8位、16位或32位局部总线。8位和16位模式也能容易地转换成ISA转PCI的设计。
PCI9052包含读和写FIFO,用来将32位宽33MHz的PCI总线与有可能总线宽度要窄或慢的局部总线的速度进行匹配。最大5个局部地址空间和4个片选被支持。
§2.1 主要功能
PCI2.1版协议:PCI9052是支持从PCI2.1版协议的低值的从适配器。此芯片也允许转换ISA适配器到PCI。
直接从(目标)数据传送模式:PCI9052支持从PCI总线到局部总线的焠发存储器映射空间的传送和I/O访问。读和写FIFO允许在PCI和局部总线之间的高性能焠发。PCI总线被允许焠发,这样局部总线能被设置成焠发或持续单周期。
中断产生器:PCI9052能从两个局部总线中断输入端产生一个PCI中断。
时钟:PCI9052局部总线接口的运行需要一个局部时钟来产生所需的内部时钟。此时钟异步于PCI时钟,允许局部总线运行在一个独立于PCI时钟的速率。此PCI总线时钟(BCLKO)的缓冲可以连接到局部总线时钟端(LCLK)。
可编程的局部总线配置:PCI9052支持8位、16位或32位局部总线,它们可以是复用或非复用。PCI9052有4个字节允许(LBE[3:0]#)信号,26条地址线(LA[27:2]),和32位、16位、8位数据线(LAD[31:0])。
先读模式:PCI9052支持先读模式,CPU能从代替局部边的PCI9052内部FIFO预先读数据。地址必须是早先地址的接下来的地址,并且必须是32位边界(即下一个地址=当前地址+4)。
总线驱动:所有控制地址和数据信号由PCI9052产生直接驱动PCI和局部总线,不用外部驱动。
串行EEPROM接口:PCI9052包含一个SEEPROM接口,用来存储局部配置信息。
注:SEEPROM被用来配置PCI9052到ISA接口模式。
4个局部片选:PCI9052提供4个片选,每个片选的基地址和范围被编程成独立的由SEEPROM或主机。
5个局部地址空间:每个局部地址空间的基地址和范围被由SEEPROM或主机编程成唯一的。
大/小边界的字节交换:PCI9052支持大和小边界字节顺序。在16位或8位局部总线操作时PCI9052也支持大边界字节通路方式重定向到当前字/字节通路。
读/写选通延迟和写周期保持:读和写(RD#和WR#)信号能被从此周期的开始时延迟来支持早期遗留的接口(如ISA)。
局部总线等待状态:插入LRDY#(局部准备好输入信号)握手信号能产生几个等待状态,PCI9052也有一个内部等待状态产生器(R/W地址到数据,R/W数据到数据,和R/W数据到地址)。
可编程预取计数器:局部总线预取计数器能被编程为0(无预取)、4、8、16或持续(预取计数器关)的预取方式。预取数据能被用来当Cache数据,当然需要使用连续的地址(必须为长字边界)。
延迟读方式:PCI9052支持PCI协议2.1版延迟读。
·PCI读用写溢出方式
·PCI读没有溢出方式
·PCI读没有写方式
·PCI写方式
PCI读/写请求超时定时器:PCI9052有一个可编程的PCI目标延迟计时器,当其期满时产生一个RETRY到PCI总线。
ISA方式接口逻辑:PCI9052支持单周期读/写对于8位、16位从PCI总线访问ISA总线的存储空间或I/O空间。空间0和空间1被用来作存储空间和I/O空间的访问。参看“ISA接口方式”一章。
PCI时钟机制:PCI9052支持PCI目标LOCK序列。一个PCI主控能获得独占访问PCI9052设备由锁定PCI9052。
PCI总线转送直到132MB/sec。
低功耗CMOS 160pin QFP封装
图2-1 PCI9052信号接口
第三章 局部总线操作
§3.1 局部总线周期
§3.1.1 PCI9052不支持局部总线的设备的直接主控能力。PCI9052不能从局部总线读或写内部寄存器。内部寄存器能让主机的CPU通过PCI总线来访问。PCI9052对于局部总线是主控者。
§3.1.2 准备/等待状态控制
如果LRDYi#输入信号被禁止,外部的LRDYi#输入信号在局部总线访问的等待状态时是无效的。等待状态计数器控制在地址到数据、数据到数据和数据到地址周期之间产生的内部等待状态。在每个数据访问周期的开始时用它的配置寄存器的值去初始化等待状态计数器。
当LRDYi#输入信号被允许时,PCI9052在等待状态计数器到0之前是不会监测LRDYi#信号。此时LRDYi#输入信号控制几个附加的等待状态。(参见图3-1和3-2)。
BTERM#输入信号直到等待状态计数器为0时才被允许。
图3-1 PCI9052单周期写
图3-2 PCI9052单周期读
§3.3 焠发方式和持续焠发模式(Bterm“Burst Terminate”模式)
§3.1.1 焠发方式
所谓焠发即若有一块地址连续的数据要传送时,只在开始时只有数据块第一个数据段的地址会出现,接下来的数据将不会跟有地址周期,如此就极大地提高了传送速度,如下图所示:
图3-3 焠发方式示意图
如果PCI905的焠发被允许并且Bterm输入信号被允许,则PCI9052将焠发。其数据宽度如下表:
表3-1 焠发方式数据宽度
§3.1.2 持续焠发方式(Bterm “Burst Terminate”方式)
Bterm方式允许PCI9052执行超过4个长字(Lword)焠发的长焠发到设备。PCI9052产生一个地址周期,然后持续焠发数据。如果设备在某个地址段之后又请求新的地址,它可以申明BTERM#输入信号有效来引起PCI9052产生一个新的地址周期。BTERM#输入信号是一个准备好的输入信号,它用来响应当前数据传送和请求产生一个数据的地址(ADS#)周期。允许Bterm方式并且仅当在FIFO成空或满或传送完成时,PCI9052申明BLAST#信号。
部份长字访问:长字访问(不是所有字节允许有效)被打断成单地址和数据周期。
表3-2部份长字访问
总线区域描述寄存器位
结果(传送数)
焠发允许
Bterm允许
0
0
单周期(默认)
0
1
单周期
1
0
焠发方式——四个长字一次
1
1
持续焠发方式——焠发到Bterm有效
§3.1.3 恢复状态
在非复用模式,PCI9052使用在总线区域描叙寄存器中的NXDA(Data to Data的等待状态)值去决定有多少个恢复状态插在最后一个的数据传送周期或下一个地址周期之间。此值编程为0到3个时钟周期。
在复用方式,PCI9052在最后一个的数据传送和下一个地址周期之间插入一个恢复状态。加恢复状态只要编程大于1的值到总线区域描叙寄存器的NXDA中即可。
§3.1.4 直接从写访问8位、16位总线
对于直接从写/读,仅由PCI总线主控者来决定写/读来哪个指定的数。访问一个8位或16位总线引起PCI总线长字访问变成多个局部总线传送。对于每次传送,哪个字节被访问是通过对地位LA[1:0]译码来获取。
§3.1.5 局部总线小/大通路
PCI总线是一个小通路,即数据字节是按由高到低来排列。字节0出现在AD[7:0],字节1出现在AD[23:16],字节2出现在AD[31:24]。
PCI9052局部总线能被编程去操作在大通路方式。在大通路方式PCI9052调换了数据字节位置。即字节0出现在AD[31:24],字节1出现在AD[23:16]上,字节2出现在AD[15:8]上,字节3出现在AD[7:0]上。
数据传送如下:
32位局部总线
数据通路和焠发顺序被列在表3-3并且示例于图3-3
表3-3向上的字节通路传送
图3-3 Big/Little Endian—32 Bit Local Bus
16位局部总线
对于16位局部总线,PCI9052能编程成向上或向下字通路。字节通路和焠发顺序被列在表3-4和表3-5并且示例于图3-4
表3-4 Upper Word Lane Transfer
表3-5 Lower Word Lane Transfer
图3-4 Big/Little Endian—16 Bit Local Bus
8位局部总线:对于8位局部总线,PCI9052能被编程成向上或向下字节通路。字节通路和焠发顺序被列在表3-6和3-7并且示例于图3-5
表3-6 Upper Byte Lane Transfer
表3-7 Lower Byte Lane Transfer
图3-5 Big/Little Endian—8 Bit Local Bus
对于每个下面的传送类型,PCI9052局部总线能被独立编程去操作在小或大通路方式:
·直接PCI从访问局部空间0
·直接PCI从访问局部空间1
·直接PCI从访问局部空间2
·直接PCI从访问局部空间3
·直接PCI从访问外部ROM空间。
§3.2 片选X(CSX)基寄存器
PCI9052包含了提供4个片选控制信号到局部总线的能边。这就免除了附加地址译码电路在PCI卡上。使用此功能,用户必须配置好每个片选的地址空间。
有4个片选X基寄存器。这些寄存器控制4个片选引脚在PCI9052上。例如片选0基地址寄存器控制CS0#(引脚130),片选地址寄存器控制CS1#(引脚131),等等。
片选X基寄存器有3个服务目的:
1、允许或不允许片选功能在PCI9052中。如果允许,片选信号在地址线上的地址正好位于由相关基寄存器指定的范围时有效。如果不允许,片选信号将无效。
2、用来设置片选信号有效的地址范围。
3、用来设置地址的起始值。
对于编程片选X基寄存器,有3个规则必须遵守,如下所示:
1、范围必须是2的幂次方;
2、基地址必须是范围的整倍数;
3、如果多个片选X基寄存器被使用,相互之间不能覆盖。
表3-8 片选X基寄存器信号编程
当Y位用来允许和不允许片选信号。X位被用来决定长度和CS#引脚的基地址。对于编程基和长度,X位可以如下设置。
在Y位之上的第一个1为此设备的长度或范围。范围的大小是2的多少次幂,此指数决定了在基寄存器的哪位置1来表示范围。从Y位开始计,Y位为指数1,第2位为
















