|
随着DSP的性能不断提高,其应用领域也不断扩大。由于DSP的硬件结构对于数字信号处理特别适用,同时,PCI总线的高带宽,动态配置,大的地址空间等诸多特点,使得在PC上PCI总线完全取代ISA总线已经是大势所趋,目前新一代的主板上面已经几乎不提供ISA槽。为了科学研究以及实际应用的需要,我们开发了基于PCI总线的DSP数据运算系统,主机程序通过PCI总线与DSP交换数据,可以提供高速实时的数据运算能力。系统可以广泛的应用在语音处理,数字加密,图像处理,多路数据流复用等实际应用中。 基于PCI总线的DSP数据运算平台整个的运作流程是这样的:PC端运行服务器程序,与DSP上运行的客户机程序通过PCI总线进行数据交换,通信由程序中设计的信号灯或者硬件中断。PC端的服务器程序通过PCI总线有访问整个DSP内部的存储器内容的能力,将所需要运算的数据送给DSP运算,设置信号灯,当DSP运算完成后则取消信号灯或者中断主机,主机将运算完的数据取回。所需要解决的问题主要有: * PCI接口芯片的选择; * PCI与DSP的接口设计; *DSP系统的自举装入(BootLoad); * 主机与DSP通信驱动软件的编制。 目前PCI接口卡的设计一般有两种方法,第一种是基于将PCI接口完全集成到ASIC中,这样做的好处是集成度高,量产的生产成本低,直接用成熟的IP核,但是对于普通的开发者来说购买现成的PCI控制器的IP的价格昂贵,难以接受。当然也可以自己根据PCI协议在FPGA中实现PCI总线接口控制器,但是由于PCI总线协议自身的复杂性,要想在短期内做到操作稳定,难度很大。所以一般开发PCI接口卡的时候都使用现成的PCI接口芯片。目前市场上面的PCI接口芯片有不同公司的多种型号产品,不同的产品价位相差很大,而且功能与使用的复杂性也有很大不同。我们在设计前,要广泛的调研,根据项目需求选择合适的PCI接口芯片来设计系统,就会事半功倍。 目前市场上常见的有AMCC,PLX,CYPRESS等公司的桥芯片,各个型号的PCI接口芯片的比较如表1所示: 综合项目需求,成本以及开发难易等几个问题来考虑,选择了PLX的9030芯片作为本设计的PCI运算板的接口芯片。 TMS320VC5402是TI公司的5000平台中力推的一款芯片,主频可达100MHz,批量价格仅5美元,片上资源有40位ALU,17×17乘法器,4K×16位ROM,16K×16bitSARAM,8位扩展主机接口(HPI),6路DMA控制器,两个多通道带缓存串口(MCBSP),两个16位定时器。称得上价格低廉,性能优异,在嵌入式领域,无线设备,数字运算等领域得到了广泛的应用。 VC5402的引脚大多数有内部的斯密特触发器以及上拉电阻,对于设计者来说外部电路设计相对简单,不用作特别的处理,但是中断源输入必须从外部接上拉电阻。 DSP与主机的数据交互是PCI运算平台的设计关键。主机可以通过VC5402的主机接口中的三个HPI寄存器访问DSP芯片内16K的DRAM。三个HPI寄存器的具体定义如下: * HPIA:HPI地址寄存器,存放当前所访问的DSP的内存地址; * HPIC:HPI控制寄存器,包括HPI的控制与状态位; * HPID:HPI数据寄存器,当前HPIA所在地址的数据; 主机要读取DSP中某个地址的数据时,首先向HPIA中送入所需访问的地址,然后读取HPID的内容即可;同样,主机要向DSP中某个地址写入数据的话,首先向HPIA中送入所需访问的地址,然后将数据写入HPID就可以了。 HPI寄存器由HDS1, HDS2地址线选择,结合HRW,HAS只要很少的逻辑就可与主机接口。主机通过PCI总线接口芯片访问DSP,只需要做一些有效电平的转换即可。单个VC5402与PLX9030接口芯片通过HPI连接的示意图如图1所示。 图中PLD内部的VHDL的核心部分代码如下: hcs <=not lad7; has <='1'; hds1 <=wr; hds2 <=rd; hrw <=not lwr; hcntl0 <=lad6; hcntl1 <=lad5; hbil <=lad4; 读者可以从这段代码看出,PLD主要的功能仅仅是地址译码以及电平的转换。 由于一般的PCI接口芯片都提供了大量的局部端地址线(lad,Local Address and Data),所以多片DSP与主机接口也是很容易实现的,只要用PCI接口芯片的不同的局部端地址线来选通不同的DSP。多个VC5402与PLX9030接口芯片通过HPI连接的示意图如图2所示。 所谓自举,就是系统上电后程序指针自动跳到程序起始处开始执行。 VC5402内部4K的ROM只有在量产的时候做掩膜才是经济上可行的,而且用户程序一旦超过4K,就必须将程序存在外部掉电非易失的器件里面,如EEPROM,Flash或者通过主机下载程序。VC5402上电后调用片内ROM里面出厂时已经固化的BootLoad程序,从外部读入用户程序然后执行之。下文介绍两种常用的的系统自举装入的方法。 由于主机通过HPI口可以访问DSP的片内SRAM资源,故而也可以在系统上电的时刻将程序由主机载入DSP,具体做法与第三节所讲的主机与DSP通信流程相同。在硬件上需要将DSP的INT2与HPI的中断输出HINT直接相连以选中HPI自举模式。HPI方式简单方便,不必外接掉电非易失的器件,对于基于主机的DSP信号处理板不失为一种理想的自举装入方式。 在非基于主机的DSP系统中,或者当程序的二进制代码大小超过DSP的片内的SRAM的容量的时候,这时候只能选择将程序固化外部掉电非易失的器件中。由于Flash(闪速存储器)容量大,价格便宜,可以在线编程以动态的更新数据,一般选择Flash作为固化程序的器件。由于Flash的种类很多,在选择Flash的时候可根据系统工作电压,容量,在线编程的难易等几个指标来选择器件。 如果直接通过DDK来访问PCI设备,对于硬件开发者来说需要了解大量的Windows底层的知识,不利于项目的快速进展,而对于专业的软件开发者来说,又不熟悉具体的硬件系统,对于驱动程序的操作对象不了解。为了解决这个问题,PLX公司专门推出了软件开发包(SDK),利用这个工具能够方便快速的开发出基于PLX的PCI接口芯片设备的Windows驱动程序。利用PLX SDK开发设备驱动程序,不需要熟悉操作系统的内核知识,整个驱动程序中的所有API应用程序接口函数都是工作在用户态下的,通过与SDK的PLXSDK.DLL,PLX.SYS文件的交互来达到驱动硬件的目的。 PCI设备的驱动程序的流程为: * 列举设备; * 找到所需设备; * 列举该设备所有资源; * 锁定设备资源; * 访问设备资源; * 解锁设备资源,释放设备。 PLX SDK用API函数来实现以上的功能,通过下面一个简单的程序就可以访问DSP片内SRAM,并且介绍一些常用函数的使用。 1.列举设备,找到所有使用PLX接口芯片的设备。 2.选择设备,根据设备号选中欲操作的设备。 device.BusNumber =MINUS_ONE_LONG; device.SlotNumber =MINUS_ONE_LONG; device.DeviceId =MINUS_ONE_LONG; device.VendorId =MINUS_ONE_LONG; device.SerialNumber[0]='\0'; rc=PlxPciDeviceFind(&device, &j); //J为在人机界面中选中的设备的串号。 3.通过HPI访问DSP片内的SRAM的功能模块。 以下函数调用实现了完整的一次访问DSP的内部SRAM的功能。即首先写入DSP,将要访问的DSP的地址写入到HPIA寄存器,然后将要写入指定位置的SRAM的内容写入到HPID中去。然后读出DSP片内SRAM的内容,先读出HPIA的地址,然后读出HPID的内容,以验证写入是否正确。 //hpial,hpiah,hpidl,hpidh为预先定义的宏函数,分别指向HPI的地址与数据寄存器的高位与低位 //dhpiadl,dhpiadh,dhpidl,dhpidh为预先已经赋值的变量,表示要写入HPI相应寄存器的值。Data 1,2,3,4为读出HPI寄存器所得到的值 //写入HPIA要访问的DSP地址的低8位,程序为 PlxBusIopWrite(myPlxDevice,IopSpace0,hpial,TRUE,(PU32)(&dhpiadl),4,BitSize32); //写入HPIA要访问的DSP地址的高8位 //写入HPID要送入DSP地址处的低8位数据 //写入HPIA要送入DSP地址处的高8位数据 //读出HPI中相应寄存器的值,验证写入的正确性,例如低8位程序为 PlxBusIopRead(myPlxDevice,IopSpace0,hpial,TRUE,(PU32)(&data1),4,BitSize32); 基于PCI总线,可以方便的开发与多个DSP接口的高速运算平台,本系统目前工作正常,达到了设计的要求。■ 参考文献 1.Texas Instruments TMS320VC5409/21 DSP to PCI Bus, PLX TECNOLOGY CORPORATION。 2.PCI9030 DATA BOOK,PLX TECNOLOGY CORPORATION。 () |