高速PCI总线接口卡的开发
扫描二维码
随时随地手机看文章
摘要:从系统的角度介绍高速PCI总线接口卡开发的整个过程,其中包括硬件电路的设计制作和软件驱动的开发。介绍一些从实际设计过程中得出的应该注意的细节等。
PCI总线技术已经应用于形形色色的微机接口中。同在声卡、网卡甚至有些显示都是基于PCI总线技术的,一些高速数据传输系统中也需要用到PCI总线技术。PCI总线技术的出现是为了解决由于微机总线的低速度和微处理器的高速度而造成的数据传输瓶劲问题,PCI局部总线是在ISA总线和CPU总线之间增加的一级总线。由于独立于CPU的结构,该总线增加了一种独特的中间缓冲器的设计,从而与CPU及时钟频率无关,用户可以将一些高速外设直接挂到CPU总线上,使之与其相匹配。PCI局部总线使得PC系列微机结构也随之升级为现在的基于PCI总线的三级总线结构。PC机的三级总线结构如图1所示。
1 PCI总线接口卡的开发
PCI局部总线最显著的特征是速度快。ISA总线的传输速率为5MB/s,EISA总线的传输速率为33MB/s,PCI1.0标准定义的总线传输速率为132MB/s,PCI2.0标准定义的总线传输速率为264MB/s,PCI2.1和PCI2.2标准定义的总线传输速率为512MB/s。而新一代PCI-X技术则在原有PCI总线技术的基础上增加了许多新的技术特征,利用PCI-X技术可以为千兆以太网卡、基于Ultra SCSI320的磁盘阵列控制器等高数据吞吐量的设备提供足够的宽带。1999年PCISIG(PCI特别兴趣小组发布的PCI-X1.0标准最高可提供1GB/s的传输速率,而2003年推出的PCI-X2.0标准则最高可提供4.3GB/s的传输速率。
目前,PCI总线接口电路的选择主要有两种方案。一种是选用可编辑逻辑器件(PLD)。使用PLD,用户可以灵活地开发出适合自己需要的具有特定功能的芯片,但PCI总线协议比较复杂,设计PCI控制接口难度较大,对于一般的工程项目来说,成本较大。现在有许多生产可编程逻辑器件的厂商都提供经过严格测试的PCI接口功能模块,用户只需进行组合即可。另一种是选用PCI专用芯片组(又称桥接电路),通过专用芯片来实现完整的PCI主控模块和目标模块的功能,将复杂的PCI总线接口转换为相对简单的用户接口,用户只需设计转换后的总线接口。本设计中选用PCI总线专用接口芯片来开发接口卡。
1.1 接口芯片介绍
PCI总线接口电路又分为主控设备和目标设备。主控设备可以控制总线,驱动地址、数据和控制信号;目标设备不能启动总线操作,只能依赖于主控设备从其中读取数据或向其传送数据。主控设备芯片价格比较高,目标设备芯片价格则比较便宜,而且目标设备芯片比较简单、易于操作。
目前两大PCI专用接口芯片生产商是AMCC公司和PLX公司。AMCC公司的PCI接口芯片有S5920、S5933、S5935等。S5920是目标设备芯片;S5933既可以设置为主控设备芯片,又可以设置为目标设备芯片;S5935是S5933的改进版,同样既可以设置为主控设备芯片,也可以设置为目标设备芯片。PLX公司在PCI接口芯片的设置生产中首屈一指,其目标设备芯片产品主要有PCI9030、PCI9052和PCI9050,PCI9050和PCI9052可以运用于ISA卡转接PCI的设计中,PCI9030是专门为嵌入式系统设计的;主控设备芯片产品主要有PCI9054、PCI9080和PCI9060,PCI9060是最早的32位主控设备芯片,PCI9080是PCI9060的后继产品,而PCI9054则是一种性价比很高的芯片,其性能比PCI9080、PCI9052更优越。
由于主控设备芯片比较复杂,而且价格昂贵,所以对处理速度和传输速度要求不是特别高的场合应尽量选用目标设备芯片。本设计中选用PLX公司的PCI9052目标设备芯片来设计PCI接口电路。
1.2 PCI9052介绍
PCI9052是PLX公司继PCI9050之后推出的低成本、低功耗、32位PCI总线接口芯片,利用它可以使局部总线快速转换到PCI总线上。
PCI9052芯片的设计符合PCI2.1规范。它支持低成本从属适配器,其局部总线可根据需要配置成复用或非复用模式的8、16或32位的局部总线。PCI总线侧的时钟频率范围为0~33MHz,局部总线与PCI总线的时钟相互独立,局部总线的时钟频率范围为0~40MHz,两种总线的异步运行方便了高低速设备的相互兼容。PCI9052芯片内部有一个64字节的写FIFO和一个32字节的读FIFO,通过读写FIFO,可实现高性能的突发式数据传输,也可以进行连续的单周期操作。
1.3 硬件设计
由于PCI9052属于目标设备芯片,只能依赖于主控设备从其中读取数据或向其传送数据,所以需要一个微处理器对通过PCI9052从PCI总线发送到局部总线的命令作出处理响应,或者把用户想要传送的数据以中断的方式通知PCI总线来读取。本设计中微处理器选用TI公司的C2000系列的16位DSP芯片TMS320LF2407。
TMS320LF2407是TI公司推出的定点DSP处理器,是一款性价比较高的芯片。它采用高性能静态CMOS技术,供电电压为3.3V,指令周期可达25ns,片内有高达32K字的FLASH程序存储器、1.5K字的数据/程序 RAM、544字双口RAM(DARAM)和2K字的单口RAM(SARAM),可以分别扩展64K字外部程序存储器、64K字外部数据存储器和64K字I/O寻址空间;片内还集成了包括CAN控制器在内的多个外围模块及存储器,可以运用于电机及逆变电路的控制中;10位16通道的A/D转换器最小转换时间为500ns;内部自带看门狗定时器模块(WDT)和16位的串行外设接口模块(SPI)。另外,该芯片有高达40个可单独编程或复用的通用输入/输出引脚、一个串行通信接口(SCI)、一个并口和5个外部中断。目前投入市场试用的C2000系列的32位DSP芯片TMS320LF2812采用的是150MHz的时钟速率,其指令周期只为6.7ns,存储器可以扩展到1M,速度更快,功能更强大。
PCI接口卡硬件总体设计如图2所示。图中,DB代表数据总线,AB代表地址总线,CB代表控制总线。
图2
PCI9052的PCI总线直接与金手指连接,局部总线与DSP之间的数据传输在双端口RAM中实现。双端口RAM采用两片CYPRESS公司的双端口RAM芯片CY7C131,组成16位存储转接电路PCI9052和CY7C131供电电压均为5V,而TMS320LF2407供电电压为3.3V,所以接口电平不匹配,需要加总线电平转换电路,这里选用16位总线传送接收器74FCT64245来实现。PCI9052的控制信号和TMS320LF2407的控制信号之间的逻辑转换用一片ALTERA公司的PFGA芯片EPM7032LC44来实现。
TMS320LF2407的外围电路可以根据需要扩展。由于TMS320LF2407内部自带32K字的FLASH程序存储器,程序调试完毕后可以烧写进去,但程序调试过程中需要频繁修改程序,所以可展一片存储器,调试程序时当作程序存储器用,程序调试完毕后再作为数据存储器用,这样既方便又实用。TMS320LF2407有一个串行通信接口和一个16位并行通信接口,串口可以做成RS485、RS232、RS422、SDI总线接口等,并行通信接口可以做成16位并行输入输出接口。
1.4 电路板制作
(1)在连线上只要将对应的引脚连在总线上就可以了。由于信号用的是反射波信号,所以驱动的信号只用了要求电压的一半,另一半靠反射来提升,所以对信号线的长度有要求:CLK信号线的长度为2500mil±100mil。如果长度不够可以画蛇行线,另外 ,CLK信号线要用地线屏蔽。
(2)PCI总线规范要求布四层线,也可以只布两层线。布两层线时,走线难度增大,要做好电源退耦。每个Vcc引脚必须有退耦电容,且容量的平均值至少为0.01μF,从引脚根部到电容焊盘的走线长度不大于250mil,线宽至少为20mil,多个引脚可以并用一个电容,并且参与共用的引脚数不受限制,但必须满足以上条件。
(3)PCI总线信号PRSNT1#的PRSNT2#中必须有一个接地。如果都不接地,系统找不到开发板。它们接地有两个用途,其一,用来表明槽位上实际存在一块板;其二,提供该板对电源要求的有关信息。表1给出了PRSNT#引脚的设备情况。
表1 PRSNT#引脚的设置情况
PESNT1# | PRSNT2# |
扩展板配置 |
开路 | 开路 | 不存在扩展板 |
地 | 开路 | 有扩展板,最大功耗为25W |
开路 | 地 | 有扩展板,最大功耗为15W |
地 | 地 | 有扩展板,最大功耗为7.5W |
(4)对于不实现JTAG边界扫描的板子,必须把引脚TDI和TDO连接起来,以使扫描链不至于断开。
(5)PCI连接器上的3.3V引脚(即使实际使用中未提供电流)在母板上必须连到一起,最好连到一个3.3V的电源平面上。而且,对3.3V引脚应提供一个交流回路,这时对地去耦应符合高频信号技术的要求。为此,应在3.3V平面上均匀排列12个高速电容,容易为0.01μF。
(6)为了稳定性,局部总线除了少数有特殊要求外,所有的信号线都应加上拉电阻(5kΩ~10 kΩ)或下拉电阻(一般选150kΩ)。
(7)为防止干扰,局部总线时钟也应对地屏蔽。
(8)串行EEPROM提供PCI总线和局部总线的部分重要配置信息,EEPROM一定要选支持串行传输方式的,如NM93CS46或者与之兼容的存储器。NM93C46不支持串行读写,所以不能选取。NM93CS46的CS、SK、SDI、SDO和PE端都要接10kΩ的上拉电阻,而PRE端要接150kΩ的下拉电阻。EEPROM的配置至关重要,EEPROM配置不正确可能导致操作系统无法运行。系统启动时自动检测EEPROM的开始48拉是否全为“1”,若全为“1”,则载入PCI9052的默认配置;否则则装载EEPROM中的内容,为板卡分配资源。串行EEPROM可以通过PCI总线直接写入,也可以用编程器直接烧写。
1.5 程序调试
1.5.1 FPGA程序的开发
可编程器件的设计软件种类很多,各大器件厂家及一些软件公司都开发了一些设计软件。软件的设计根据逻辑功能的描述方法可分为语言描述设计和原理图描述设计两个类。常见的如DATA I/O公司的ABEL语言、四通公司ASIC事业部开发的针对GAL器件的FM(Fast MAP)软件等属于语言描述类设计软件;而DATA I/O公司的Synario软件、Orcad公司的PLD等软件属于电路图描述或电路图描述与语言描述相结合设计的软件。
本设计中FPGA的编程只涉及到信号逻辑转换,所以只需选用语言描述类设计软件,这里选用DATA I/O公司的ABEL语言描述设计软件。程序调试结束后用编程器写入FPGA芯片即可。
1.5.2 DSP程序开发
TI公司提供了DSP专用仿真器和仿真开发系统,C2000系列的开发系统最新版本为CCS2.2。对于不同的仿真器,只要安装驱动程序即可使用该开发系统进行仿真。仿真器选用最新款的带USB接口的ICETEK51000USBV2.0仿真器。由于该仿真器使用USB接口,所以不需外接供电电源,实用又方便。
由于硬件设计时扩展了可转换的存储器,进行仿真时把存储器接成程序存储器,程序可以直接转载到扩展的存储器中进行调试,免去了往FLASH中烧写的麻烦,程序调试完毕后再固化到FLASH中。
2 PCI总线接口卡的软件驱动开发
PCI卡的硬件调试需要结合软件程序的调试来完成。PCI卡的驱动程序开发有多种途径,驱动开发工具也有多种选择。
2.1 驱动开发工具的选取
(1)DDK(Driver Device Kit)
许多VMM服务都使用寄存器的调用方式,使用起来不是很方便,没有4深厚的汇编语言及硬件基础很难在短时间内开发出设备驱动程序。Micorosoft公司提供了设备驱动程序工具箱(DDK),它是基于汇编语言的编程方式的,DDK的优点是可以开发核心态的真正意义上的驱动程序,开发出来的驱动程序效率是最高的。
(2)DS(Driver Studio)
DS是一个驱动程序集成开发包,其中包括了DriverAgent、VtoolsD、DriverWorks、SoftICE Driver Edition、BoundsChecker Driver Edition、DriverWorkbenc、FieldAgent for Drivers等。几中常见的DS驱动开发工具介绍如下:
·Drivergent为Win32应用程序提供了访问硬件的接口。
·VtoolsD支持Windows95和Windows98的驱动程序开发(VxD)。VtoolsD包括代码生成器、实时接口库和可以作为开发一类驱动程序的例子程序。
·DriverWorks包括为Windows NT和Win32 Driver Model(WDM)开发驱动程序的完整的开发框架,同时也支持Windows98和Windows2000下驱动程序的开发。DriverWorks包含一个复杂的代码生成工具(Driver Wizard),其中含有支持C++下编程的类库和例子程序。
(3) WinDriver
WinDriver是KRF-Tech公司的一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法和思路,极大地简化了驱动程序的编制;同时又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包,特别适合专业硬件人员使用。
利用WinDriver开发驱动程序不需要熟悉操作系统的内核,整个驱动程序中的所有函数都是工作在用户态下的,通过与WinDriver的.Vxd或者.Sys文件交互可达到驱动硬件的目的。由于是一个用户态程序,效率的高低也就成了人们选择WinDriver时关心的问题。大量实践数据表明,WinDriver并没有通过牺牲系统性能来换取驱动程序的快速开发。本设计中选用WinDriver来开发驱动程序。
2.2 WinDriver开发驱动程序
在WinDriver的体系结构中,WinDriver Kernet处于中心位置,它提供的用户态库函数(API)实际就是对WinDriver Kernel中实现的功能进行调用。几乎所有用户同硬件的交互都是通过WinDriverKernel来实现的,这样就极大地解放了开发人员。用户的主要任务就是利用WinDriver提供的用户动态函数库(API函数库)在用户态实现自己的驱动程序代码,完成硬件驱动的功能。
基于WinDriver的设备驱动程序主要分为驱动程序和应用程序两部分。利用DriverWizard生成.inf驱动程序,安装该驱动程序后,系统就根据EEPROM中的配置信息给板卡分配资源,接下来就可以进行应用程序的开发了。利用DriverWizard生成应用程序框架后,用户把生成的框架整理到自己的程序中,再添加实际应用中需要的功能就完成了软件的开发。
PCI总线是计算机总线的枢纽,其速度是一般总线望尘莫及的,其应用也十分广泛。利用本文介绍的方法开发出的板卡可以运用于各种高速数据传输场合中,发雷达系统仿真控制、工业总线控制、高速数据采集、图像采集等。本设计在对芯片的选型时本着经济实用的原则,开发出的板卡性价比较高。