DIY编程器网
标题:
基于PCI总线的DSP数据运算平台设计
[打印本页]
作者:
liyf
时间:
2014-10-5 11:43
标题:
基于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[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。
作者:
李小路
时间:
2021-6-30 10:15
谢谢分享!
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2