《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于DMA的并行数字信号高速采集系统
基于DMA的并行数字信号高速采集系统
王 俊,郑 焱,王 红,杨士元
清华大学 自动化系,北京100084
摘要: 本系统采用基于FPGA的DMA技术高速缓存多路并行数据,通过数据重组将数据有序发送给处理系统,用于数据的显示与分析。系统采用了嵌入式技术,达到了便携效果,从而更好地适应设备的工作环境。并行数字信号采集实验结果表明,系统能以5 MHz、2.5 MHz、500 kHz、50 Hz 4档采样频率进行62路并行数字信号采集,各路采集结果正确,并保存了各路之间的同步信息。
中图分类号: TP391.5
文献标识码: B
DMA-based high-speed parallel acquisition system of digital signals
WANG Jun,ZHENG Yan,WANG Hong,YANG Shi Yuan
Department of Automation, Tsinghua University, Beijing 100084,China
Abstract: The proposed FPGA-based system uses DMA technology to cache multi-channel parallel data, and to send data to processing system orderly after data re-organization for display and analysis. Embedded technology is used to make system portable for operation environment of electronic equipment. Parallel digital signal acquisition experiment result shows that this system can acquire 62 channel digital signals correctly and synchronously at four gear sampling frequency of 5 MHz, 2.5 MHz, 500 kHz, and 50 Hz.
Key words : DMA;high-speed parallel acquisition;FPGA;embedded system


    随着数字电子技术的发展,大型电子设备中数字电路的比例越来越大[1]。为便于故障诊断,一些电子设备(如雷达系统)预留了大量的数字信号检测口[2]。采用示波器采集此类测试接口的信号时,由于示波器采集通道数的限制,无法保留同步信息;采用逻辑分析仪或ATE设备不但价格昂贵,而且不便于携带,不适宜广泛使用。因此,设计一款便携式并行数字信号高速同步采集系统,为大型电子设备的维护提供支持是十分必要的。
    此类检测口信号采集中多通路、高采样率的特性要求瞬时大量数据的高速缓存实现方法。文献[3]以硬盘为存储介质,采用DMA技术实现了接近6 MB/s的存储速率。文献[4],文献[5],基于SoPC技术采用SDRAM作为存储介质,相对硬盘存储速度有了很大的提高。但是当通道数超过SDRAM数据位数时,SoPC的处理速度就会影响数据的存储速度,适用于多通路同步采集。本文采用读写速度最高的SRAM作为存储介质,并利用虚拟多个DMA通道的技术极大地提高了数据存储速度,实现多路并行数字信号的高速同步采集。
1 系统整体设计
    采集系统采用了嵌入式技术达到便携性的目的,由FPGA子系统和ARM子系统两部分组成,如图1所示。

    FPGA子系统接收ARM子系统的指令,完成数据的采集、缓存和发送功能。数字信号缓冲电路用于数字信号的电平转换和驱动。输入数字信号可能是TTL或CMOS电平,采用缓冲电路一方面减小对原电路的影响,另一方面将电平转换为FPGA输入所需的CMOS电平。FPGA子系统以Altera公司EP1C12Q240C6芯片为核心,EP1C12Q240C6拥有12 060个逻辑单元以及173个用户可使用IO,能充分满足开发及调试中的要求。FPGA搭配SRAM采用DMA的方式实现数据的高速缓存,选用SRAM容量为1 MB,访问时间为10 ns,利用SRAM访问速度快的特点,可达到200 MB/s的数据访问速率。同时,FPGA还实现了与ARM的通信接口,完成缓存数据的打包发送功能。
    ARM子系统实现数据的存储和人机交互界面。采集到的数据可以通过ARM子系统以类似于逻辑分析仪的方式图形化地呈现给用户,方便用户管理数据采集过程。
2 DMA高速数据缓存
    由于ARM系统通信速度的限制,要想避免数据的溢出,采集的数据需要先缓存到FPGA子系统的SRAM中。对于62路并行数据信号进行同步采集,采集频率为5 MHz时,数据量达310 Mb/s,因而选用了DMA的方式来高速地缓存采集数据。基于FPGA系统,数字信号首先在采样时刻被存放到FPGA的寄存器中,并在2个连续采样时刻之间的采样间隔内将FPGA寄存器中的数据通过多个虚拟的DMA通道存储到SRAM中。DMA高速数据缓存结构如图2所示。

    采集系统选用了1片16 bit的SRAM,62路数字信号需要分为4组缓存入SRAM中,因而构建了4个DMA通道分时与SRAM连接。由于SRAM的访问时钟是FPGA系统中的最高时钟,所以SRAM的访问时钟选用了系统时钟。SRAM的访问时间为10 ns,系统时钟必须低于100 MHz,才能保证每次能将数据完整正确地写入SRAM中。本FPGA系统选用了50 MHz的系统时钟,这样采样时钟频率最高为5 MHz,一个采样周期内的数据有10个系统时钟周期的时间来处理。在FPGA系统的控制下,一个采样周期内的10个系统时钟有1个用于等待数据写入FPGA寄存器,4个用于向SRAM写入数据。数字信号并行采集的数据缓存时序如图3所示。

    图3中‘0’时刻为采样时钟上升沿,此时刻FPGA系统将并行的62路数字信号缓存入62 bit寄存器中。由于传输延时时间受系统布线和FPGA内部布局的影响,系统时钟和采样时钟上升沿不一定是同步的,图中‘0’时刻到‘2’时刻之间可能有1~2个系统时钟周期,这段时间内,系统不动作等待采集信号可靠地写入寄存器,这样可以避免‘0’和‘1’时间间隔过小,采集的数据未完全写入寄存器的情况。在之后的‘2’时刻至下一周期‘0’时刻,系统完成写入SRAM的工作。其中‘2’时刻至‘3’时刻为第一写入周期,系统将寄存器中的0 bit~15 bit写入SRAM中;‘3’时刻至‘4’时刻为第二写入周期,系统将寄存器中的16 bit~31 bit写入SRAM中;‘4’时刻至‘5’时刻为第三写入周期,系统将寄存器中的32 bit~47 bit写入SRAM中;‘5’时刻至下一周期‘0’时刻为第四写入周期,系统将寄存器中的48 bit~61 bit写入SRAM中。这样,同一采样时刻的62通路的数字信号被分时地写入SRAM中,信号保持真实的同步信息。此时,系统的数据缓存速率达310 Mb/s。
    上述方法中,‘5’时刻至下一周期‘0’时刻只进行了一次写入,实际上这段时间可以容纳6个写入周期,时间并没有被充分地利用。对其进一步扩展,将系统时钟周期充分地利用,可以同时采集更多通路的信号,将第六到第十个系统时钟周期也用于信号缓存,则可以同时缓存16×9=144路数字信号。这种情况下,系统的数据缓存速率可达720 Mb/s。
    考虑采用SRAM的极限访问速率的情况,可以选用100 MHz的系统时钟,这时系统的数据缓存速率可达1 520 Mb/s。
    选用的SRAM的数据写入极限速率为1 600 Mb/s,此种方法的数据缓存速率达SRAM数据缓存极限的95%,实现了高速的数据缓存。
3 缓存数据重组织
    按照上述数据缓存的方法,同一通道的数据不是连续地存储在SRAM中。SRAM中的数据存储顺序如图4所示。图中第一列表示SRAM地址,offset为数据存储的初始地址偏移;第一行表示数据位,选用的SRAM中一个地址对应2字节数据,有16个数据位;剩余每个方格表示一个数据存储单元,方格里的数字表示该单元用于存储第几通道的数据。

    定位一个通道的一位数据需要知道其对应的SRAM地址和位号。假设通道m的第i位数据由[addr(m,i),bit(m,i)]定位。分析SRAM中的数据存储顺序可知:
    addr(m,i)=offset+1+[(m-1)/16]+(i-1)×4;
    bit(m,i)=(m-1)%16。
    其中m=1,2,3,…,64;i=1,2,3,4,…。
    FPGA系统向ARM系统发送数据时,将同一通路的数据抽取出来,以一个字节为单位连续发送,所以需要对存储的数据进行重组织。在FPGA系统中,使用6 bit变量dch[5:0]表示通道号,其中000000(b)表示通道1(m=1),000001(b)表示通道2(m=2),依此类推。数据位计数i使用N位变量bitcnt[N-1:0]来表示,其中N由存储的总数据量决定,与通道号类似,全零表示i=1情况,1(b)表示i=2情况,依此类推。因而有:
    [(m-1)/16]=dch[5:4];
    (i-1)×4={bitcnt[N-1:0],00(b)};
    (m-1)%16=dch[3:0]。
    数据由FPGA中的变量定位表示为:
    addr=offset+1+{bitcnt[N-1:0],dch[5:4]};
    bit=dch[3:0]。
    FPGA系统根据以上公式将各个通道数据逐位地从SRAM中读出,并移入移位寄存器中,从而把同一通路的数据以字节为单位连续地组织起来。
4 采集实验结果
    为了进行测试,基于FPGA设计了专用信号发生器,产生62路数字信号用于测试。62路数字信号中包括4.07 kHz~520.8 kHz(50 MHz的96分频)的TTL信号及恒高、恒低电平信号。
    由于数字信号通道数较多,这里以其中不包含恒高和恒低的9~12通道来说明采集精度,采集结果如表1。

    依此可知,各通道采集结果与输入信号对应,说明个通道采集结果正确,本采集系统可靠。
    以某型雷达做为被测对象,系统进行了实际工作测试。采集性能如表2所示。

    本文介绍基于嵌入式技术的并行数字信号采集系统的设计,系统采用DMA技术实现了62路数字信号同步采集,用于某型雷达预留测试接口信号的采集,整体采集速率达310 Ms/s。利用本设计中提出的DMA方法,系统可以进一步扩展,从而实现128路数字信号同步采集,并使整体采集速率达1 520 Ms/s,此时SRAM的写入速度已成为主要的限制。

参考文献
[1] 唐玉兰,陶伟,于宗光.一种实现数模混合电路中的DAC测试的BIST结构[J].电子器件,2006,29(1):231-234.
[2] 张开德.1553B数据总线技术在某艇作战系统中的应用[J].舰船科学技术,1994,(003):48-51.
[3] 詹艳艳.数据采集系统并行存储的实现[J].科技资讯,2009(4).
[4] 奚素霞.基于SOPC的高速数据采集系统的分析与设计[J].电子元器件应用,2009,11(4).
[5] 冯萍,李秀华.基于FPGA的高速高精度数据采集系统的研究[J].中国科技信息,2008,(021):105-106.

此内容为AET网站原创,未经授权禁止转载。