• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > RFID和物联网 > RFID > 多路高速信号并行采样及实时存储解决方案

多路高速信号并行采样及实时存储解决方案

录入:edatop.com     点击:
前言

在高端测量系统当中,通常需要同时采集许多路模拟信号,且这些信号的带宽、采样精度、有效时间等都各不相同。此时,如果采用基于MCU的方案,则由于必须同时面对多个不同的ADC而耗费掉MCU的大量资源。再者,当存在高速信号时,数据量将急剧增大,几乎无法实现。

高端测量系统的主要难题是,繁多的控制对象和庞大的数据量,究其根本就是 实时 性问题。解决这个问题的方法通常是选用高性能的MCU甚至DSP,或采用DMA技术。如基于混合信号MCU的DTC(Direct Transfer Control) 解决方案 。本文改变了基于MCU的分时控制和延时存储这一思路。提出一种采用FPGA的 解决方案 ,通过FPGA+ADC实现多路并行采样,通过FPGA+SRAM实现高速 实时 存储,从而在根本上解决了上述问题,同时衍生出便于调整、易于扩展的优点。

总体方案

本方案的总体设计思路是:尽可能地减少MCU的负担,让采样和存储全部自主完成。为行文方便,我们称这个基于FPGA的采样和存储模块为信号采集控制器(Signal Collecting Controller),缩写为SCC,把信号采样和存储合称为信号采集。下文将以一个实际例子说明SCC的设计方案。该例子的原型应用于粒子测量系统中,共有5个信号通道,其中3个通道的采样率为1MSPS,数据宽度为12位;一个通道为10MSPS,数据宽度为12位;一个通道采样率为20MSPS,数据宽度为10位。总体方案如图1所示。需要说明的是,本文旨在阐述一种思路和方案,并非提供可照搬的详细设计。故对原型进行了抽象和删改,也未给出器件的具体型号。

图1中虚线框内是FPGA实现部分,即SCC,虚线框外是与SCC连接的片外元器件。ADC0~4为5个ADC,分别对应5个信号通道,下文简写为ADCx;ZBT-SRAM为零总线延时SRAM。AD_CTRL0~4分别为5个ADC的控制器,简写为AD_CTRLx;SRAM_CTRL为ZBT-SRAM的控制器;MCU_IF为SRAM与MCU接口的转换器。clk、dq为控制ADC的接口,dq是转换数据,可以是串行的,也可以是并行的,根据实际的ADC型号而定;mclk、w/r、addr、dio是SCC与ZBT-SRAM的接口;bus是SCC与MCU连接的控制、地址和数据总线。wr0~4分别为AD_CTRL0~4输出的数据有效信号,简写为wrx;d0~4为AD_CTRL0~4输出的并行数据,简写为dx;set、index、din、dout用以完成MCU对SRAM_CTRL模块的参数设置和查询,称为控制口;irq、den、data用以读取SRAM中的数据,称为数据口。

下面简略地描述一下SCC的工作过程,更具体的内容在SRAM_CTRL模块中介绍。AD_CTRLx从ADCx中获得数据,锁存在dx上,同时输出wrx信号。SRAM_CTRL扫描AD_CTRLx,当发现wrx有效时,读入数据dx。各路dx在SRAM_CTRL内部被按照ZBT-SRAM的数据宽度进行调整,SRAM_CTRL根据各路数据的地址空间分配产生寻址信号addr,同时输出控制信号w_r,输出相应数据dio,在mclk的驱动下,数据被写到SRAM中。MCU可从MCU_IF读取SRAM中的数据,首先通过控制口设置欲读取的数据通道号,然后发送开始读命令(注:需事先制定控制协议),SRAM_CTRL即把对应通道的数据陆续送到数据口,并输出数据有效信号den,MCU_IF根据den把data存进FIFO中。其中irq为中断申请信号,用以通知MCU存储器空或满,可根据实际情况选用,本例未使用。

如此,整个信号采集的过程已经彻底脱离了MCU的控制,可以完全自主地进行,即MCU对于信号采集是不可见的。反过来,还要求信号采集对MCU读数据不产生任何干预,让MCU就像读取一块独占的存储器一样,即信号采集对于MCU是透明的。这些都需通过SRAM控制器来实现。

SRAM控制器

SRAM_CTRL模块是SCC设计的核心,它需解决的关键问题是:如何糅合不同速率的5路数据,并确保在不与MCU读操作产生冲突的情况下写入SRAM。

首先简要介绍一下ZBT-SRAM。它具有同步接口,数据、地址和控制信号严格按照时钟同步操作。ZBT是零总线延时的含义,它与一般的总线接口不同,写操作的数据要在地址和控制信号的下一个时钟周期给出,这样,当读写操作交替产生时,就不会出现无效的时钟周期,从而提高了读写速度。对于FPGA设计来说,这种接口的优点不仅在于速度的提高,而且大大简化了传统异步I/O接口的逻辑复杂度,尤其在本文需要复杂读写操作的SRAM扩展设计中,更是提供了很大的方便。

在设计读写SRAM时序之前,应对各通道数据在SRAM中的存储格式进行定义。读写数据必须按同一格式进行,才能确保MCU正确解释获得的数据。格式定义需要注意两个问题。①数据拼接。因为ADC的数据宽度一般与SRAM的数据宽度不等,如本例12位的通道,每行有6位空间浪费。一个可行的办法是,在单个通道内把先后采样到的数据拼接起来,如可以用2行18位的SRAM空间存储3个12位的ADC数据,MCU读取后再进行分拆。这种做法稍微增加了SRAM_CTRL的设计难度,同时也需牺牲MCU的解码时间,应根据实际资源进行权衡取舍。本例为简明起见,约定每行只存一个ADC数据,低位对齐,高位补零。②数据分区。同时存储不相关的多路数据,设计时应根据实际通道数和每个通道的数据量,将SRAM分区,SRAM_CTRL内部应定义一些寄存器,用以记录各分区的首尾地址。为拓展适用范围,应允许上位机设置这些地址寄存器。本例为简明起见,约定把SRAM分为5个相等空间的数据区。

本文糅合多路数据的方法主要是基于时分复用的思路。本例中,考虑最坏的情况,总共有6个设备可能并发访问SRAM,其中5个是AD_CTRLx的写操作,速率分别为:CH0~CH2为1MHz,CH3为10MHz,CH4为20MHz;还有一个设备是MCU的读操作,最高为40MHz。把这6个设备的速率相加为73MHz,可选择SRAM的时钟为80MHz。基于时分复用的思路,让SRAM_CTRL在80MHz的频率下采用轮询的方式访问6个设备的读写标记。拟把一个循环分为24个时隙,CH0~CH2各占用1个时隙,CH3占用3个时隙,CH4占用6个时隙,MCU读操作(简称RD)占用12个时隙。如此便能保证各个设备都以最高速率进行访问。具体时隙划分如图2所示。

应注意每个设备的时隙必须均匀分布,以保证各设备得到匀速的查询,不至于漏掉数据。因此,时隙总数一定是设备数目的整数倍。

时隙划分图是SRAM_CTRL状态机设计的根据和基础。我们按照一个时隙对应一个状态的原则进行状态分配,前面增加初始化状态,最后增加结束状态,以完成准备和收尾工作。状态机示意图如图3所示,其中, ready是预备工作状态,quit是收尾工作状态,状态rd_0~b对应12个RD时隙,状态ch4_0~5对应6个CH4时隙,状态ch3_0~2对应3个CH3时隙,状态ch2、ch1、ch0分别对应1个CH2、CH1、CH0时隙。状态机主要由一个读写循环构成,在复位后,处于空闲状态idle。循环的进入或退出由MCU控制,需在24个读写状态中任意挑选一个进入循环状态,一个退出循环状态。也可定义任何一个读写状态都允许退出循环,这样可避免由于延时而产生误操作。本例定义由rd_0状态进入循环,从ch0状态退出循环。

对于同一个存储空间,同时进行读写必然会产生两种冲突,除了上文解决的时序冲突,还有地址冲突,即读写不能发生在同一个地址,另外还有写满和读空的问题。本文通过在SRAM_CTRL内构造一个循环队列来解决这个问题。在每个数据区内定义两个地址指针,一个指向当前写地址,一个指向当前读地址,再定义一个满标记和一个空标记。读写一个数据后指针自动加1;当写指针加1等于读指针时,输出满标记,余下的写操作将不受影响;同理,当读指针加1等于写指针时,输出空标记,余下的读操作将不受影响。其中细节均按照循环队列的规范设计就可以了,限于篇幅,不再赘述。

设计实例及建议

本方案已经在一种测量粒子的产品上实现并投入使用。实际情况如上文所述,共5个通道,采样率分别是1MHz/1MHz/1MHz/10MHz/20MHz ,采样精度有12位和10位,均扩展为16位存储和读取,MCU的总线速率是40MHz。这种情况如果用MCU来控制采样,是根本无法实现的,不过即使是把采样任务分离出去,如果存储任务没有剥离,仍然存在问题。原先的方案是使用一个FIFO来缓冲数据,当FIFO半满时申请中断。结果MCU被频繁地中断,而且读取数据后还需区分是属于哪一通道,然后再分别存到相应的内存块中,从而没有时间顾及人机接口,使得操作界面非常迟钝,严重影响使用。实际上,人机接口的特点是处理时间很短,但要求响应迅速。改进为本方案后,MCU的负担大大减轻,其主要时间用以处理人机接口、液晶显示和网络通信等工作,根据闲忙情况突发式地批量读取数据,对于数据量少的通道,可等到采样结束后再行读取。从而很好地解决了原来的问题。

下面给出在具体设计时积累的一些经验和建议,以供参考。

1.当前FPGA设计通常是采用同步时序逻辑,故易于扩展同步接口。建议选择有同步接口的ADC,RAM应选择ZBT-SRAM。目前,ZBT-SRAM的最大容量已达到72Mb,基本能胜任超大数据量的应用。选型时注意ZBT是属于IDT公司的商标,在Cypress被称为NoBL,ISSI称其为NO WAIT,其实际含义是一样的,相应的芯片封装和接口也都完全兼容。

2.对于读写操作不需要同步进行的系统,建议去掉读时隙,另外单独设计一个读循环,这样可大幅降低状态机的速度,从而降低功耗,也减少辐射。

3.通常对ADC得到的数据需要进行一些处理,可根据需要方便地在AD_CTRLx和SRAM_CTRL之间插入数据处理模块(DSP),以减少MCU的计算负担。

4.MCU_IF模块是为MCU与ZBT-SRAM的粘合逻辑,应根据具体MCU的总线结构和时序要求进行设计。更具模块化的设计方法是,把MCU_IF改为连接一种标准总线的控制器,如LPC、SPI等,这样更增加了独立性和灵活性,成为一个通用的信号采集模块。

结语

采用FPGA实现的信号采集控制器具有适应能力强、便于调整和易于扩展的优点,其缺点是成本较高、设计工作量和难度较大。本文提出的方案适用于高端的复杂测量系统,是从根本上解决 实时 性问题的一种方法。不过,对于简单的测量系统,采用基于单片机的方案可能是更好的选择。

参考文献
1. Mark Buccini;Using direct data transfer to maximize data acquisition throughput;TI Analog Application Journal;3Q, 2002
2. Cypress Semiconductor Corporation;CY7C1357C 9-Mbit Flow-Through SRAM with NoBL Architecture;Data Sheet;May, 2005

13.56MHz NFC天线,13.56MHz RFID天线设计培训课程套装,让天线设计不再难

上一篇:新解决方案加速UWB物理层验证
下一篇:如何确保蓝牙+Wi-Fi的服务质量

13.56MHz 线圈天线设计详情>>
手机天线设计培训教程详情>>

手机天线设计培训教程 国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..

  网站地图