如何设计基于FPGA和USB2.0的高精度数据采集系统?
现代电子侦查技术要求能够对外部模拟信号进行精确提取和分析,从而对数据采集的精度提出了很高的要求,本文提出了一种以FPGA 作为主控制器的高精度500M 数据采集系统设计方法,详细地阐述了各硬件平台的具体构成。最后利用QUARTUS 内部的嵌入式逻辑分析仪(SignalTap ii)可以观察到被采集到的信号并且对数据的有效位数及性能进行简略分析。
0 引言
随着数字通信技术的逐步发展,高速数据采集系统已经逐步取代传统的数据采集系统,其广泛应用在众多场合。新一代可编程逻辑器件FPGA 都拥有较多的IO 端口以及强大的数据处理能力,这也为高速高精度数据采集系统的研发提供了基础条件。
1 工作原理
本文设计的数据采集卡硬件原理框图1 如下所示。
如图1 所示,前端模拟电路将外界的模拟信号转化成为ADC能够接收到的数据格式;高速时钟电路提供500MHz 的高速时钟,ADC 在此时钟作用下,进行ADC 变换。在整个数据采集卡中,FPGA 是进行采集控制,以及数据接收的核心。FPGA 按照1 :4 的比率对将接收到的500MHz 的LVDS 差分数据流进行分流和降速。
数据分流之后由于数据速率与USB 接口数据传输速度不同,所以还要进行FIFO 缓冲。FIFO 的写时钟与串行收发器保持同步,当FIFO 缓冲器被写满之后,由FPGA 读取FIFO 缓冲器中的数据,并且将数据通过USB 接口芯片传输到上位机中进行显示或者存储。
2 系统设计
数据采集卡主要包括高速A/D 转换模块、FPGA 主控模块和USB 接口电路三个模块。
2.1 高速A/D 转换模块
ADC 芯片作为模数转换的核心,设计采用TI 公司推出的ADS5463,其采用流水线型结构,最高采样速度500MSPS,精度12位,拥有高速差分数字接口LVDS.
对于高速ADC 采样电路,模拟信号输入接口的设计不仅要保证足够的传输带宽而且要完成将单端的输入信号变成差分信号的功能。本设计使用射频变压器将单端输入转换为差分输入,并通过TI 公司生产的可级联中频放大器THS9001 芯片实现中频信号放大的功能。
在A/D 转换模块中,采样始终的质量非常重要。在本文的设计中,采用了锁相环芯片CDCM61001 生成采样时钟,并利用FPGA内部PLL 资源倍频生成采样时钟作为备用的采样时钟。本设计是用25M 的时钟倍频20 倍生成500M 以LVPECL 格式的差分电平形式。
高速A/D 转换模块的原理图如图2 所示:
2.2 FPGA 主控模块
FPGA 是整个采集模块的控制核心,其主要的功能是接收数据,并且对数据进行降速、分流以及缓冲,并且将数据传通过USB接口传输给上位机。在本文的设计设计中,选择Cyclone II 系列的EP2C35F672C6,它属于一款中等密度的FPGA,相比较于ASIC低得多的成本在单片机上实现复杂的数字系统。
设计使用FPGA 的Bank3 和Bank4 接收来自ADS5463 输出的高速LVDS 数据,包括DRY(数据输出准备好)以及OVR(数据溢出位)。Bank5 和Bank6 用于USB 接口芯片的控制,其余BANK 留作扩展之用。
在FPGA 主控模块中,AD 输出信号和时钟信号被传输到FPGA 中的DIFFIO_RX p/n 通道上。其中p 表示正差分通道信号,而n 表示负差分通道信号。在这部分的软件设计中,使用altvds模块接收ADC 的输出数字信号、始终信号,并且利用DMUX 对数据流进行串行- 并行转换,以方便对输入信号的后续操作。
数据流在DMUX 模块的仿真结果如图3 所示。
如图3 所示,Data_in 是一路500MHz 的数据流,而dout1,2,3,4 为Data_in 通过DMUX 进行降速和分流之后的结果。从图中可以看出,500MHz 的高速数据流经过DMUX 降速、分流之后的输出较干净、平滑,在高速状态下,达到这种结果是比较理想的,对系统设计上也是很有利的。
经过DMUX 降速之后的数据流已经达到了FPGA 的处理要求,但是由于FPGA 的处理速度和与上位机相连的USB 接口速率不匹配,为此需要采用FIFO 来进行缓冲。在本文的设计中,采用两个容量为4K,宽度为32 位的FIFO 来来作为FPGA 与USB 接口之间的数据缓冲。FPGA 接收高速DMUX 降速后的数据流,并且写入到FIFO 中,当FIFO 写满8K 之后,启动读始终,将FIFO 中的数据通过USB 接口分批读取到上位机中。
2.3 USB 接口电路设计
USB 接口的主要功能是将FPGA 缓冲区中的数据读取到上位机中。在本文的设计中,USB 接口电路采用CYPRESS 公司CY7C68013A 芯片。CY7C68013A 芯片集成了串行接口引擎来方便读取FPGA 中的数据。芯片采用2MHz 的时钟信号,同时使用外部EEPROM 存储固件程序。在USB 接口电路的初始化过程中,首先需要从EEPROM 中读取固件程序。FPGA 通过USB 接口与上位机进行数据传送的流程图如图4 所示。
如图4 所示,EZ-USB FX2 芯片中包含有GPIF 和SlavFIFO 两种接口方式,可以满足不同数据流速度以及用户对数据处理实时性的要求。在CY7C68013A 芯片中,其接口时钟与FPGA中的IFCLK 引脚连接,从而在FPGA 中的FIFO 缓冲写满时,FPGA可以控制USB 接口电路开始从FIFO 缓冲区中读取数据。
USB 接口的主要工作室实现对FIFO 缓冲区中数据的读取,因此其设计的逻辑也主要是对FIFO 读、写状态机的监控,其实现的流程如下:在接收到数据读指令之后,分成8 次读取FIFO中的128 位数据,并且将这些数据一起存放到FPGA 控制寄存器组中;将FPGA 的FIFO 中的数据读出,并且写入到EP6 端点缓冲区中。状态机先由空闲状态进入等待状态;当EP2 不为空时,进入读状态EP2 ;当读命令有效时,那么就进行数据的读取并且发送相应的命令,之后回到空闲状态;在等待状态下,当EP2 为空,EP6 不满时,开始写EP6,写满后也回到空闲状态。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码