FPGA和USB的双通道数据采集测试系统
2014-08-27黄远望严济鸿
黄远望,严济鸿
(电子科技大学电子工程学院,成都611731)
引 言
数据采集系统是信号与信息处理系统不可缺少的组成部分,其广泛应用于微电子技术、计算机技术和通信技术等领域。本文所述系统充分利用了现场可编程门阵列的灵活性[1]和通用串行总线(USB)体积小、即插即用、速度高等优点[2],可实现多种频率信号的双通道触发采集。给出了该系统的硬件方案和电路原理,做了详细说明,同时介绍了FPGA 内部逻辑的设计,最后搭建实验平台对该系统的功能做了验证。
1 系统总体概述
硬件系统中包括差分接口电路、高速SRAM、时钟选择电路、FPGA 和USB 接口电路。输入的数据通过差分接口电路输入到FPGA 中,而数据的随路时钟则进入到时钟选择电路中做延时处理。当上位机发送采集命令后,FPGA 开始采集数据并存入到SRAM 中,当达到预定缓存区长度时,再由SRAM 将数据读出,通过USB 总线上传到计算机中。其中系统的整体结构如图1所示。
图1 数据采集系统框图
2 板级电路设计
2.1 主要器件选型
作为采集系统硬件核心的FPGA 选取Cyclone系列EP1C12Q240C6[3]芯片。该芯片采用全铜SRAM 工艺,封装为PQFQ240,保证了较低的焊接成本,同时具有高达175个用户I/O 口,能够充分满足本系统对I/O 口数量的需求。其内部集成了2个PLL锁相环,12 060个LE逻辑单元,存储资源达到239 616位,可以很好地支撑硬件资源的开销。与该芯片配套的还有Altera公司的专用配置芯片EPCS4,该芯片能够提供4 Mb的程序空间,它与FPGA 芯片之间采用专门的AS-JTAG 兼容配置电路连接。
数据缓存为高速SRAM 存储器CY7C1061AV33,其最大具有1 M×16位的存储空间,最高支持100 MHz的读写速度。
USB芯片采用的是CYPRESS公司使用广泛的EZUSB FX2LP系列CY7C68013A。该芯片支持USB2.0传输协议,内部集成了智能串行接口引擎和8051微处理器内核,其在低功耗的前提下可以实现数据传输的无缝连接,其数据传输速度可达到48 MHz。
差分接口芯片则为TI公司的SN65LVDS386,该芯片可将LVDS数据和时钟信号转换为LVTTL 格式的单端信号。要使其正常工作,需要在输入差分对信号之间串联一个100Ω 的电阻。
2.2 USB接口方案
USB 方案采用CY7C68013A 的SLAVE FIFO[4]模式,通过读写其内部的4个端点FIFO 的方式来实现数据的无缝连接。其硬件连接示意图如图2所示。
图2 SLAVE FIFO 方案硬件连接框图
其中FIFOADDR[1:0]为端点的地址线,FPGA 通过该地址线控制USB端点FIFO的选择;FD[15∶0]为双向数据总线;FLAGA/B/C为可编程状态指示信号,可以通过固件编程使其表示端点FIFO 的空满状态信息;SLCS#为USB芯片片选信号;SLOE、SLWR、SLRD为读写端点FIFO的控制信号,低有效;PKTEND是数据包结束信号,IFCLK 为接口同步时钟,由USB芯片提供,频率为48MHz。
2.3 存储方案
由于FPGA 中资源量较小,而对于数据缓存最大容量为每一路数据为1M,采用FPGA 内部RAM 资源达不到其数据存储的要求,则采用外部存储的方式。为简化设计,对于存储器的选择采用了读写时序比较简单的SRAM。为了方便同时对两路数据存储,本系统中运用两片SRAM 分别完成两路数据通道的缓存。其中电路连接框图如图3所示。
其中,ADDR[19∶0]为地址总线,DATA[15:0]为双向数据总线,WEN、CEN、OEN 为读写使能信号,BHEN和BLEN 为高低字节有效信号。
图3 存储方案硬件连接框图
2.4 时钟方案
采用外部随路时钟进行采样,每一个数据通道对应一路时钟。每路时钟通过外部延时芯片,其延时量可通过FPGA 控制。其电路图如图4所示。
图4 外部时钟延时选择方案原理图
其中DS1100为延时芯片,其输出TAP1~TAP5 为输入时钟延时20~100ns的时钟信号。延时之后的时钟输出到8 路选择器74AC151中,输出控制端ADELAY_SEL0~2连接到FPGA。通过这种方式,可以灵活地对输入时钟做适当延时,以保持时钟和数据之间的建立时间和保持时间关系,防止采样到亚稳态的情况。
2.5 电源方案
整个数据采集系统硬件所需要的供电电平有5 V、3.3V 和1.5V 三种情况,其中通过初步功率分析,3.3V和1.5V 提供的电流总量不超过1.5A,其可以通过线性电源芯片LM1086来实现,而5V 可由外围供电接口直接供电。其电路图如图5所示。
图5 电源模块原理图
LM1086-3.3直接提供5V到3.3V的电压转换,而1.5V电压是LM1086-ADJ输出端串接两个精密电阻(R1和R2)分压电路来实现的,其中两个电阻值之比为5:1。
3 FPGA程序设计
FPGA 的内部程序为本系统的核心内容,本设计采用模块化的设计思路,将系统分为各个子模块来完成相应的功能,最后集成为一个整体。下文中给出了每个功能模块的具体说明。
3.1 数据通道采样模块
在本系统中每个数据通道的输入位宽为16位,伴随数据的还有一个同步时钟输入。每个通道数据格式为IQ,两路数据相互交错输入,时钟上升沿为I,下降沿为Q。针对这样的数据格式,本设计采用两个并联的异步FIFO 的方式来实现数据的采集和时钟域的转换。两个FIFO 中一个接输入时钟,另外一个接输入时钟的反相时钟,通过这种方式来同时采样上升沿和下降沿的数据。为了保证数据采样过程中写入数据的连续性,必须保证在异步FIFO 之后的读取数据速度大于写数据的时钟速率,故在读时钟端采用48MHz时钟,使速率低于48Mbps的输入数据都能够被有效、连续地采集下来。
3.2 SRAM 读写模块
该模块完成外围存储芯片的读写操作,其读写速度达到48 Mbps。针对CY7C1061AV33 存储芯片的读时序,必须在一个地址稳定有效时间段内使得WEN 信号经历一个负脉冲的过程,才能保证数据正确地写入SRAM 中。读过程中,一直保持OEN 信号为低,输入待读取数据的地址,即可将存储器中相应位置的数据成功读取出来。在整个读写过程中,CEN 都保持为低,当该模块空闲状态时,该信号置高。
3.3 通道连接选择模块
此部分负责数据通道的选择。由于在采集前端是两路数据同时采集,而上传到PC 机上只有一路数据总线,故这里需要将传输到USB的数据通道根据主控程序的控制在A 通道和B通道之间切换。根据上位机参数设置指令可以指定采集的通道,可为A 通道、B通道或者AB 通道同时选择。当同时选择AB通道时,数据选择模块先将A 通道接到USB接口模块,A 通道传输完毕之后再将B通道接入。
3.4 USB接口模块
该模块为与外围USB芯片的接口程序主要完成接收并返回上位机的指令,并将采集的数据传输给上位机,实现FPGA和USB芯片之间的交互。数据和命令采用分离传输方式,即数据命令不能在同一时刻传输。上传数据时FPGA选择6端点[5],通过FLAGB和FLAGC来检测数据端点的空满状态,当端点FIFO 为非空时启动数据传输,为满时暂停数据传输。另一方面,控制命令的传输需要通过端点2实现,主机向端点2发送命令,当FPGA检测到端点2所对应的FIFO非空时即可通过读FIFO 操作接收命令,通过这种方式FPGA能够获取上位机设置的命令参数,之后底层硬件便可以按照上位机的要求进行相应的操作。
3.5 主控状态机
主控模块作为FPGA 内部逻辑的控制核心,负责对上位机指令译码并作出相关操作,同时监测和控制各个子模块的工作状态。
指令的下传主要由上位机经过USB芯片传输到FPGA 的I/O 口上。USB接口程序接收到指令之后,将接收到的指令传给主控模块,在主控模块中对指令进行译码操作。上位机下传给硬件系统的命令包括板卡检测、硬件自检、参数设置、采集开始这4类,每一条指令长度为16位。其中又以参数设置指令最为重要,其包含了通道选择、缓冲区长度设置、外部时钟延时选择、触发模式选择等相关信息。主控模块的工作状态图如图6所示。
图6 主控模块内部状态图
由图6可知,针对上位机不同的指令对应不同的操作,操作完成之后状态机会重新进入到等待命令的状态。
4 系统测试结果
结合CYPRESS公司官方提供的USB接口调试软件Cyconsol EZ-USB来实现发送命令,并接收硬件上传数据。通过软硬件联合调试,搭建实验平台,对本次设计做了功能测试。
利用安捷伦E4430B 信号源产生频率为26KHz、幅度为0dB 的正弦信号,通过ADC500芯片做A/D 转换,采样率为1 MHz,采样得到信号经过差分转换之后接入本数据采集系统,得到的结果如图7所示。可以看到,该数据采集系统能够正确、稳定地采集数据并将数据传输到上位机中,验证了系统的正确性。
结 语
本文从工程应用的角度出发,介绍了基于FPGA、SRAM 和USB的系统构架的数据采集系统。实践证明,该系统能够实现数据稳定有效的采集,具有较高的实用价值,可以适用于多种速度的数据采集需求,具可有扩展性。
图7 测试软件界面图
[1]邵磊,倪明.基于FPGA 的高速数据采集系统设计与实现[J].计算机工程,2011,27(19):221-223.
[2]曾一,李鹏,毛乐山.一种USB 接口便携式多模式多通道A/D 数据采集系统[J].电测与仪表,2008,45(7):44-46.
[3]Altera Corporation.Cyclone Device Handbook,2008.
[4]Cypress.EZ-USB Technical Reference Manual,2002.
[5]Cypress.Cypress CyAPI Programmer's Reference,2011.