DIY编程器网
标题:
适于底层协议栈开发的数据采集与仿真系统
[打印本页]
作者:
liyf
时间:
2012-1-16 17:26
标题:
适于底层协议栈开发的数据采集与仿真系统
随着软件无线电思想与技术的发展,现代数字通信系统中,越来越多地使用DSP等数字信号处理器结合高速AD、DA转换器进行OSI 7层通信体系模型中物理层(信号的调制、解调)和数据链路层(信道编、解码)部分的数据处理工作。近年来,数字信号处理理论发展迅猛,数字信号处理器工作频率及能力不断提高,数字通信系统中越来越多的工作能够通过DSP来完成,因而DSP本身的程序结构也越来越复杂。由于通信信号(尤其是无线通信)本身具有很强的实时性、随机性的特点,造成DSP的输入数据缺乏规律性,一闪即逝,从而导致相应的处理程序出现了问题不易复现,且问题难于追踪、捕捉,这就给DSP的程序设计与调试带来了较大困难。针对这一问题,本文根据一般底层通信协议栈的数据处理方法,设计了一套适合于对底层协议栈进行开发和调试的数据采集与仿真系统,以达到追踪、再现问题并查找程序缺陷的目的。
1 数据采集系统
数据采集系统主要完成从正在工作中的通信终端中采集数据的任务。
1.1 采集点的选择
整个通信系统中有多个数据采集切入点可选,可以对中频信号直接采样,也可以对基带信号采样,还可以通过模拟系统中的AD数据接收时序,直接接收AD输出数据。但前两种采集点不能确保采集到的信号数据与DSP输入数据完全一致,而模拟AD数据时序的方式则可能影响DSP与AD之间的主从关系,影响DSP协议栈的正常运行,而且各种外部中断的采集也比较困难。因而最为稳妥的方式是DSP通过数据总线输出其接收到的数据。这种方法的缺点是需要占用DSP少量资源,但这与协议栈运行相比,完全可以忽略不计,不计不会影响协议栈本身的运行。
1.2 硬件连接
参考文献[1]对各种数据采集系统进行了分析比较,并指出USB总线为数据采集卡与PC机较理想的接口,因此选用CY68013A作为USB接口芯片。采用1片FPGA进行DSP与CY68013A之间数据格式的转换,CY68013A固件程序存放在E2PROM中,通过I2C总线连接,连接方式如图1所示。
考虑到DSP输出数据时钟可能较CY68013A GPIF采集时钟快,因而FPGA需要设计内置的FIFO存储器,用于缓存DSP输出的数据。
1.4 USB固件设计
由于CY68013A内置的8051内核时钟周期较慢,不适于高速传输,因而采集程序中仅使用8051进行初始化配置,而不干预数据传输过程。CY68013A通过外部GPIF读取数据存入FIFO中,FIFO满时通过USB传入PC机。采用Cypress公司提供的通用程序框架以及图形化GPIF设计工具,参照图2(b)的时序,编辑GPIF波形。USB总线选择传输大量数据时比较常用的Bulk传输模式,硬件配置程序采用Cypress公司提供的程序模板,参考文献[3]对该模板进行了详细说明,这里不再赘述,程序框架与参考文献[4、5]类似。
1.5 PC机接收程序
USB接口驱动程序可直接使用CyprESS公司提供的ez-usb驱动。由于ez-usb驱动没有提供高级的文件操作IO方式,因而需要调用比较底层的DeviceIoControl函数来处理。考虑到Bulk传输方式完全是由主机端(PC机)发起读操作,从机端(采集板)只能被动地等待,而当CY68013A内置的FIFO写满之后,如果主机不能及时地发起读操作,则FIFO不再接收数据写入操作,因而会有少量的数据丢失。对于底层协议栈调试,这种少量的数据丢失可能引起程序流程错误,是不能接受的。因此PC机端接收程序应采用多线程处理方式,将接收USB数据的工作列为单独的线程,并将其优先级设置为实时性最高的THREAD_PRIORITY_TIME_CRITICAL,防止接收数据过程被系统中其他进程打断,以确保每次读操作能够及时发出。同时也要保证负责数据采集的PC机操作系统中同时运行的进程尽量少,关掉不必要的后台进程。
PC机接收到的数据先存入临时文件中,以备后续解析、仿真程序使用。临时文件以字(16 bit)为单位存储,每个数据用2个字来表示,低字节在前,与FPGA转换后的数据格式一致,如表1所示。
由于底层协议栈需要兼顾外围硬件控制,各种外部中断比较多,很可能会打断数据输出,因而在解析数据时,需要考虑各种数据之间的嵌套。为此,可以对每种数据采用单独的缓冲区,待解析到1条完整数据之后再存入文件中,同时还要保证文件中各种非AD/DA数据按照发生时间的先后顺序排列。其流程如图3所示。
本文设计了一种专门用于底层协议栈开发的数据采集与仿真系统,利用USB高速传输特点以及物理连接的便利性,采用CY68013A进行数据传递,充分利用其GPIF资源,使用FPGA进行格式转换。文中对仿真系统的整体框架和数据转换细节进行了详细说明。该系统可用于各种类型协议栈调试,便于追踪、再现问题。经过实验验证,系统可承受100 Mb/s的实时数据流,在数字集群手持终端开发中进行了广泛应用,不仅降低了协议栈的开发难度,而且缩短了开发周期,有很高的实用性。(电子技术应用 作者:黄建尧 刘开华 李 琨 )
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2