基于PCI总线的DSP数据运算平台设计
基于PCI总线的DSP数据运算平台设计随着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=‘ ‘;
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。 谢谢分享!:D
页:
[1]