分布式多DSP系统的CPCI总线接口设计和驱动开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分布式多DSP系统的CPCI总线接口设计和驱动开发
全英汇;王宏现;邢孟道
【摘要】针对多DSP分布式互连的信号处理板卡,介绍基于PCI9054和FPGA的CPCI总线接口设计,分析通用WDM总线驱动程序的开发.接口设计引入数据包存储-转发的方法,这种方法在分布式系统中可扩展性好、效率高.另外驱动程序采用DriverWorks进行开发,具有很好的通用性和可移植性.
【期刊名称】《现代电子技术》
【年(卷),期】2006(029)020
【总页数】3页(P91-93)
【关键词】CPCI;分布式;数据包;存储-转发;WDM
【作者】全英汇;王宏现;邢孟道
【作者单位】西安电子科技大学,雷达信号处理国家重点实验室,陕西,西安,710071;西安电子科技大学,雷达信号处理国家重点实验室,陕西,西安,710071;西安电子科技大学,雷达信号处理国家重点实验室,陕西,西安,710071
【正文语种】中文
【中图分类】TP3
雷达成像信号处理的特点是运算复杂,数据量大,要求系统在进行快速运算的同时能进行大数据量的快速传输和存储。
随着处理器能力的提升以及处理单元的增加,运算和I/O的平衡越发显得重要。
CPCI总线是工业控制领域先进的总线标准,具
有高速、高可靠性、坚固耐用、通用性强的特点。
在电气逻辑和软件功能方面,CPCI与PCI标准完全兼容。
本文将详细讨论基于CPCI总线的分布式并行信号处
理板卡的数据传输设计,主要包括CPCI与板卡上多个相互独立的DSP之间的接
口设计以及总线驱动程序的开发。
1 基于CPCI总线的并行数字信号处理机介绍
本系统是一个通用的基于CPCI总线的雷达成像数字信号处理机,板卡结构见图1,DSP之间没有共享总线,而是通过高速链路口环状连接,每个DSP的数据线挂接到FPGA进行互连,构成一个分布式系统,具体实现见第 2节分析。
数据处理由
6片ADI公司的TigerSHARC201流水并行完成;DSP之间相互独立并且各挂接
了512 M容量的SDRAM。
本CPCI板卡遵从6U的Eurocard工业标准,J1为CPCI接口,主要实现主机对各个DSP的数据交换,方便系统的调试。
J3~J5采
用自定义总线,应用LVDS技术通过自制底板以实现高速板间数据通信,主要用
于对数据传输率要求更高的实时处理场合。
J3用于接收高速A/D板采样数据来进行实时处理,每个DSP分别有2个链路口连到J4和J5,当一块板卡不能满足实
时处理的要求时,可以很方便地用J4和J5对板卡进行扩展。
图1 板卡结构框图
为了降低开发成本,节约开发时间,本系统采用专门的桥接芯片PCI9054实现PCI接口协议,把重点集中在PCI9054局部端和多个相互独立的DSP之间的接口设计上。
2 分布式多DSP系统的CPCI总线接口设计
2.1 分布式互连及数据通信方法
系统DSP的互连方式影响了CPCI总线接口的设计方法,一种传统的多DSP互连方式是采用共享总线。
多处理器共享总线结构的优点是提供全局物理地址空间,可以从任何处理器对等访问全部主存。
TigerSHARC系列DSP对多处理器空间进行
统一编址,这样通过PCI9054和FPGA可以把多DSP的地址空间映射到主机的内存空间或I/O空间进行统一访问。
但是共享总线的缺点也是明显的,当处理器数目增加且处理器间数据交换频繁时,总线竞争会造成数据通信的总线瓶颈。
采用分布式系统可以减轻通讯竞争并且带来了可扩展性好等优点。
本雷达信号处理系统正是采用分布式设计,见图1。
首先应用DSP的高速链路口实现DSP的环状连接,当内核工作在500 M时,TS201的单个链路口双工传输数据率高达1 GB/s,实现了点对点的高速传输。
另外,每个DSP的低32位数据线连接到FPGA上进行互连。
在这里引入类似以太网IP包交换的方法进行数据通信。
主机和每个DSP均作为交换节点,节点间的数据传输分若干包进行,每个数据包由包头和数据组成,FPGA充当一个类似交换机的角色,实现通信源与目的节点对之间的动态连接。
当源节点和目的节点不冲突的前提下,可实现3对节点之间同时通信。
经测试DSP外部口可工作在100 M,这样通过FPGA交换的最高数据率可超过1 GB/s。
由于采用了数据包的交换方法,系统省去了PCI9054和DSP的地址线。
采用分布式系统的另一个好处是可以进行数据的广播通信,如主机可以同时向多个DSP广播数据。
综合考虑,分布式系统有较高的数据传输率,较好的灵活性和可扩展性。
2.2 接口设计原理与实现
系统CPCI接口的设计是基于PCI9054和FPGA的。
PCI9054实现了PCI总线协议并提供了较为简单的局部端接口,PCI9054局部端和多DSP之间的数据分发及时序控制由一片FPGA完成。
基于系统DSP分布式互连的特点,主机和各DSP之间采用数据包的形式进行数据交换。
设计原理见图2。
图2 设计原理
在FPGA中,给每一个节点分配一个读FIFO和一个写FIFO,用于数据收发缓冲
存储,同时交换模块对数据包进行源、目的地址译码并实现转发,这样就构成了一个简单有效的存储-转发系统。
本系统实现了任意节点之间的相互访问,而且当增
加节点时,不用改变设计,具有很好的可扩展性。
由于连接FPGA的所有节点均采用数据包进行交换,所以应该定义统一的数据包
格式供节点和FPGA来译码。
数据包定义见图3。
64位的包头含有源节点、目的
节点、读写数据块大小和起始地址等信息。
FPGA根据数据包的大小进行周期性的译码,给不同的源节点和目的节点建立连接并给相应的DSP发中断,节点则通过
译码数据包头获取读写的起始地址和传输大小。
图3 数据包定义
基于上述的设计,主机访问各个DSP就变得简单了,相当于多节点间相互访问的
一个特例----单节点访问多节点,包括主机访问某个DSP以及同时向多个DSP广播数据。
如果是主机写,那么主机先把数据装入数据包,然后通过CPCI总线发往PCI9054,PCI9054收到数据后发起局部端总线传输把数据存入主机的写FIFO;交换模块先读取数据包头进行译码解析,然后建立与对应DSP读FIFO的连接,并向对应DSP发出中断,数据流向对应DSP的读FIFO供DSP读取;DSP收到中断后进入服务程序读取数据包头进行解析,然后读取真正的数据存入目的地址。
如果是主机读,那么主机会先写一个含读请求的数据包头,然后发起读(此时DSP
未发出数据,主机将阻塞自己,等待数据到来);DSP收到数据包头后解析出主机要读取的数据地址和数据块大小,从相应地址取数并进行打包,然后发往DSP的
写FIFO;同样交换模块读取数据包头进行译码,然后连接主机的读FIFO,数据流向主机的读FIFO供主机读取;主机读取数据包后对数据进行还原。
3 PCI驱动程序开发
3.1 WDM驱动程序的工作原理
在Windows2000下,应用程序直接访问硬件设备是受限制的。
为了对硬件资源
进行存取,我们开发了工作在内核模式下的PCI驱动程序。
WDM(Windows Driver Model)将是Windows平台的主流驱动模式。
选用Numega公司的DriverWorks来开发运行在Windows2000下的WDM模式
PCI设备驱动程序。
DriverWorks对Windows DDK的类进行了很好的封装,开
发人员可以在较短的时间内开发出效率较高的驱动程序。
当要访问硬件时,首先用户模式应用程序调用Win32API函数访问设备,Windows操作系统的I/O管理器接收到Win32API函数的I/O请求后创建一个IRP(I/O Requst Packet),接着将此IRP传递给驱动程序。
驱动程序收到IRP后根据其主功能代码和其他信息执行相应的分发例程并把结果返回。
在开发WDM驱动程序时,DriverWorks向导已经产生驱动框架,我们的主要任
务是为驱动选择合适的例程。
这样当操作系统发来一个IRP时,驱动就调用相应
的例程来对IRP进行服务来完成所需的功能。
3.2 驱动开发实例
3.2.1 普通读写过程
应用程序可以用标准的Win32API函数与驱动程序建立通信。
在应用程序中首先
用设备GUID接口或符号链接名打开设备,实际上应用程序调用了Win32API函
数CreateFile。
若成功打开将返回设备的有效句柄,应用程序获得有效句柄后就可以和驱动程序交换数据。
打开设备后应用程序可以用函数DeviceIoControl与驱动程序通信,这个函数包
括从驱动程序读数据和写数据。
完成硬件操作后用CloseHandle函数关闭该设备。
读写过程中的关键在于驱动程序如何获取应用程序数据缓冲区,这个问题在下一小节详细讨论。
3.2.2 驱动程序获取应用程序数据缓冲区的方式
当应用程序发起读或写时,将给出一个用户模式虚拟地址和长度。
内核驱动程序一般不使用用户虚拟地址访问内存。
Windows 2000为驱动程序访问用户模式数据
缓冲区提供了3种方法:Buffered方式、Direct方式和Neither方式。
在开发中选用了Direct方式,他的优点是更少地涉及数据复制。
其过程如图4所示。
图4 寻址数据缓冲区
I/O管理器锁定了用户模式缓冲区的物理内存页,并创建一个称为MDL(内存描述符表)的数据结构来描述锁定页,因此驱动程序使用MDL就可以访问应用程序的
数据缓冲区了。
函数DeviceIoControl向驱动程序提供输出缓冲区和输入缓冲区。
对于驱动程序,输出缓冲区地址由上述方法获得,而输入缓冲区地址则可由KIrp::IoctlBuffer函数直接获得。
这里说的输入和输出是指输入驱动程序和从驱动程序输出。
3.2.3 DMA模式
上面介绍的普通读写方式传输速率很低,写只达到
20 MB,若读还要降低1~2倍,为了提高传输速率,采用DMA方式进行读写。
PCI9054自带DMA控制器,支持基于分散/集中的总线主控DMA。
PCI9054提
供了2个独立的DMA通道用于从主机到设备和从设备到主机的数据传输。
每一
个通道由一个DMA控制器和专门的FIFO组成。
所开发的DMA传输采用BlockDMA方式,由于篇幅所限,只对驱动程序中关键
几步进行介绍。
(1) 添加所需的资源,如中断和DMA适配器等。
(2) 在OnStartDevice例程中初始化硬件中断并连接到相应的中断服务程序,建立延迟过程调用,并允许PCI相应通道中断,根据需要用KCommonDmaBuffer类开辟物理连续公共缓冲区。
(3) 在读写例程中设置PCI9054中有关DMA和中断的寄存器,启动DMA。
(4) 传输完毕将自行产生中断,在中断服务程序中判断是否为本设备产生的中断,是则清除中断,启动延迟调用。
(5) 如果是DMA读,则把数据从公共缓冲区拷贝到用户缓冲区。
4 结语
针对本系统的分布式并行多DSP系统结构,设计了一种基于数据包的存储-转发模式CPCI接口,这种设计方法具有延时小、传输效率高、扩展性好等优点。
另外用DriverWorks所开发的DMA模式PCI驱动程序具有通用性。
在两者的结合下很
好地实现了主机应用程序对硬件板卡上各个相互独立的DSP数据的快速存取。
参考文献
[1] PCI9054 DataBook[Z].PLX Technology,Inc,1998.
[2] ADSP-TS201 TigerSHARC Processor Hardware Reference[Z].Anolog Device,Inc,December 2004.
[3] 武安河,邰铭,于洪涛.Windows 2000/X PWDM设备驱动程序开发[M].北京:电子工业出版社,2003.
[4] Waler Oney.Programming the Windows Driver Model[M].微软出版社,1999.
[5] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.。