摘要:为解决不同性能指标数据采集系统开发时间较长的问题,提出了一种将fpga软核技术应用于高速数据采集系统设计的方法。系统以xilinx公司的fpga为例设计软核,使用vhdl语言对软核进行模块化设计。介绍了数据采集系统的硬件电路、usb固件程序、usb驱动程序以及labview上位机的设计。该数据采集系统结构可移植性强,有利于缩短同类型系统设计研发周期。
数据采集在现代工业生产及科学研究中的重要地位日益突出,同时对实时采集、实时传输、实时处理的高速数据采集的要求也不断提高。此外,对于不同的场合,数据采集系统的数据采样参数要求也不同。工业生产与科研领域中对数据采集研发提出了以下的要求:(1)接口简单灵活且有较高的数据传输率;(2)采集器体积小、抗干扰能力强、能够对数据做出快速的存储,并及时进行分析和处理;(3)设计周期短,能快速适应市场需求。
usb2.0以其即插即用、支持热插拔的灵活性,以及高达480mb/s的传输速率,成为了高速数据传输接口的首选。而fpga以其工作频率和集成度高、稳定性良好、抗干扰能力强等优点,逐步成为各领域数据采集数字电路的首选。fpga集成软核有设计周期短、设计投入少等优越性,且不涉及具体的物理实现,可以方便移植到各种fpga硬件平台,极大提高了它的灵活性和适应性。
1 系统方案与结构
数据采集系统性能指标修改主要集中在a/d转换模块与fpga控制模块上,在usb2.0接口的硬件、固件、驱动程序的设计以及pc机应用软件的设计基本没有变化。而a/d转换模块的修改可以通过a/d转换芯片的选择及更改输入信号调理电路设计来实现。但更换不同的a/d转换芯片可能给a/d转换的启停控制、数字信号的缓存等方面带来较多的改动。而fpga软核的模块化设计可以极大地减少这方面的改动。
本文以ti公司的低功率高性能a/d转换芯片ads800为例介绍系统的设计。图1为本数据采集系统的结构框图。模拟信号经过ths4504全差分放大器进行信号差分放大后,输入到ads800进行a/d转换。为减少不同系统中fpga软核改动的工作量,fpga内部按功能设计了三个软核作为系统的控制单元。cy7c68013作为usb控制芯片设置为从属fifo模式(slave fifo mode),负责数字信号在采集系统与pc机间的传输;用户通过labview设计的pc机应用软件,在驱动程序的驱动下与数据采集系统进行命令以及数据的传输,以便对数据采集系统采集到的数据进行实时处理。
2 系统硬件设计
2.1 模数转换电路
数据采集系统采样参数调整的本质在于模数转换电路的改变,设计者只需要更换不同的a/d转换芯片、重新设计其硬件电路即可达到目标。本系统中模数转换电路由信号调理电路与高速a/d转换器组成。信号调理电路负责对待测模拟信号进行差分放大,高速a/d转换器负责模拟信号到数字信号的转换。
为了能精确检测微弱信号,数据采集系统的adc前加入了全差分放大器ths4504,采用ads800作为a/d转换芯片。ads800含12bit流水线型a/d转换内核,支持差分输入,最高转换速率高达40mhz[1],极好地满足了本系统采样频率的要求。
2.2 fpga芯片外围电路
本系统fpga采用xilinx公司的xc3s200an-4-ft256-c芯片。该芯片拥有20万门逻辑单元,内含16个18kb的块存储器(block ram)与30kb分布存储器(distributed ram),最高工作频率达到326mhz[2],可满足本系统的时序需求。
fpea芯片外围电路:
(1)fpga与a/d接口模块
ads800的控制信号由fpga生成,ads800的转换时钟设定为30mhz,由fpga的时钟分频获得。fpga与ads800的连接示意图如图2所示。本设计中,fpga通过adc_oe来控制ads800转换数据输出的启停;ads800的30mhz工作时钟由fpga的60mhz工作时钟经过二分频得到;ads800的数据由并口输出,fpga内部fifo控制单元将接收到的12bit数据转换成16bit数据存入fpga内的fifo中。
当更换不同的a/d转换芯片时,a/d转换芯片与fpga的连接有所不同。但对于并行输出、流水线型的a/d转换芯片,只需模仿上述连接方式,对输出位数、控制时序以及fpga时钟分频大小等做合适的修改即可。
(2)fpga与usb接口模块
本设计中使用cypress公司生产的ez-usb fx2lp系列的cy7c68013芯片作为usb2.0协议的微控制器芯片。由于该芯片支持480mb/s高速传输,为本设计数据传输提供了速率保证。fpga与cy7c68013的连接图如图3所示。
flaga、flagb脚可通过pinflgsab、pinflagscd寄存器来选择其工作在索引模式还是固定模式。本设计中被设置为固定模式。其中flaga表示ep2的空状态(fifo_empty),flagb表示ep6的满状态(fifo_full)。
2.3 usb接口外围芯片电路
本设计使用容量为16kb的eeprom芯片at24c016a存储,并设置cy7c68013的vid与pid。在cy7c68013上电并脱离复位状态后,内部逻辑会检查i2c端口上是否连接有串行eeprom。如果有,则判断连接上的eeprom第一个字节是0xc0还是0xc2。本设计中设置eeprom第一个字节为0xc0,设置vid=0x1234、pid=0x2211、did=0x0001。在这种情况下,由cy7c68013内核提供usb描述符,使用eeprom存储的vid/pid/did值替换cy7c68013内部的值,并设置renum=0。这样,在设备重新列举后,芯片内的程序代码会以全新的自定义设备来加以呈现。
3 fpga软核设计
fpga内部控制单元的功能分别由三个软核负责完成,分别为:adc接口控制单元、fifo控制单元以及usb接口控制单元。三个软核连接示意图如图4所示。
3.1 adc接口控制单元
adc接口控制单元控制数据采集的启停和传输。数据采集开始时,adc接口控制单元将时钟信号分频为30mhz供ads800作转换时钟adc_clk使用。此时控制单元内寄存器clk_cnt对adc_clk转换时钟进行周期计数,当经过7个时钟周期后(ads800转换延时为6.5个时钟周期,为了使转换数据稳定,本设计再延时半个时钟周期输出)即clk_cnt=8时,clk_cnt清零,fifo写时钟(fifo_wr_clk)输出,同时端口fifo_wr_en置高电平,经adc转换完成的数据在补齐16bit后,随时钟fifo_wr_clk上升沿存入fifo中。adc接口控制单元状态机工作过程如下:
(1)当fpga上电或者复位后,状态机进入空闲状态(idel)。
(2)在空闲状态下,当fifo不满(fifo_full=0)且adc_start=1时,状态机进入转换状态(convert),此时,adc_clk输出adc数据转换时钟。
(3)在转换状态下,当fifo_wr_en=1,即数据转换延时结束时,状态机进入写状态(write),此时clk_cnt清零,adc_oe和fifo_wr_en都置为高电平,fifo_wr_clk输出fifo写时钟。
(4)在任何状态下,如果fifo已经写满(fifo_full=1)或者adc_start=0时,自动跳转到空闲状态。
adc接口控制单元状态机示意图如图5所示。
3.2 fifo控制单元
本设计首先使用fpga内部block ram生成fifo。由于a/d接口控制单元输出数据宽度为16bit,因此,fifo宽度也设置为16bit,深度设置为4kb。fifo可以使用xilinx ise套件中的core generator生成器,由core generator生成的fifo软核配合控制部分构成fifo控制单元。fifo控制单元内部结构示意图如图6所示。
由于本设计中数据采集系统处于异步从属fifo模式,且usb接口芯片读数据的速度与adc数据写入fifo的速度不同。为解决因读写速度不同而可能带来的数据读写错误问题,fifo软核上的full与empty两信号线可以分别指示fifo满与空的状态。当fifo处于满状态时,fifo_full信号置高电平,由adc控制单元通知adc停止采集数据;当fifo处于空状态时,fifo_empty信号置为高电平,由usb接口控制单元通知usb接口芯片停止读fifo。fifo的读时钟信号(fifo_rd_clk)与读使能信号(fifo_rd_en)由usb接口控制单元提供,写时钟(fifo_wr_clk)与写使能信号(fifo_wr_en)由adc接口控制单元提供。fifo控制单元的工作有以下两种特殊情况:
(1)在没有来自pc机的控制命令情况下,如果fifo_rd_en=1,则fd[15:0]的数据传输方向为从fpga到usb接口芯片(图6表示为fd_out[15:0]),即数据从fifo输出至usb接口芯片;如果此时fifo_rd_en=0,则fd[15:0]呈高阻态。
(2)当有来自pc机的控制命令时,fd[15:0]的数据传输方向为从usb接口芯片到fpga(图6表示为fd_in[15:0]),即pc机的控制命令写入到usb接口芯片,再传输到fpga内部命令分析器中。此时,命令分析器会根据命令控制adc_start信号,进而控制adc数据采集的启停。
无论在上述哪种情况下,如果fifo_clear=0、 fifo_wr_en=1且fifo_full=0时,fifo_wr_clk都有相应的时钟信号输入,此时adc转换完成的数据随写时钟通过adc_data[11:0]写入fifo中。
3.3 usb接口控制单元
usb接口控制单元主要完成两种功能:(1)通过usb接口芯片实现把数据传输到pc机。此时fifo中的数据先写入ep6,当ep6写满时,usb接口芯片自动将数据打包传输到pc机。(2)协助fifo控制单元接收来自pc机的命令数据。此时命令数据从pc机通过usb接口传输到ep2,然后读取ep2的数据到fifo控制单元的命令分析器中。usb接口控制单元状态机工作如下:
(1)当fpga上电或者复位后,状态机进入空闲状态(idel)。
(2)在空闲状态下,当ep2不空(ep2_empty=0)时,进入读命令状态(read_command),此时令ep_addr[1:0]=00,fd[15:0]的传输方向由ep2指向fpga,控制单元从ep2中读出pc机传来的控制命令。
(3)随后进入存储命令状态(sotre_command),控制单元把传来的控制命令存储到fifo控制单元内部的指令分析器中。同时控制单元置fifo_clear=1,即把fifo控制单元内的fifo数据清空,以准备存储新的adc转换数据。任务完成后回到空闲状态。
(4)优先处理pc机通过ep2传来的命令,因此优先查看ep2的空状态。在空闲状态下,当ep2为空(ep2_empty=1)且fifo控制单元内fifo不为空(fifo_empty=0)且ep6不满(ep6_full=0)时,进入写数据状态(write_data)。在写数据状态下,ep_addr[1:0]=10,控制单元选中cy7c68013的ep6,fd[15:0]方向由fpga指向ep6,同时fifo_rd_clk产生一个周期时钟,fifo_rd_en置为高电平,一个数据从fifo控制单元内fifo中读出。
(5)随后进入传输数据状态(trans_data)。在该状态下,令slwr=0,数据从fifo控制单元内fifo写入cy7c68013的ep6中。任务完成后进入空闲状态。
usb接口控制单元状态机示意图如图7所示。
4 usb接口芯片程序设计
4.1 usb固件程序
固件程序是一种嵌入在硬件设备中的软件,通过执行固件程序,硬件设备可以完成各种特定的功能。在本设计中,cy7c68013芯片的固件程序是整个系统传输的控制核心,主要完成以下五种功能:(1)cy7c68013芯片的初始化;(2)辅助硬件完成设备的重新枚举;(3)中断处理;(4)数据接收与发送;(5)对外围电路进行控制。
cypress公司为提高用户的开发效率,提供了ez-usb fx2lp开发套件,其中包含了一个完整的固件程序架构[3]。该架构主要包含了ez-usb fx2lp芯片的设备初始化、处理标准usb设备请求与电源管理等服务功能。用户在开发时,只需使用keil uvision3在固件架构下提供相应的usb描述符以及编写外部设备功能程序代码。固件架构流程图如图8所示。
主函数是固件架构流程的具体实现。主函数首先对内部状态变量进行初始化,随即调用td_init()进行用户设备初始化,td_init()函数运行完成后,使能中断,随后进入主循环。
4.2 usb驱动程序设计
usb驱动程序位于固件程序与应用程序之间,是usb设备与pc机的通信接口。cypress公司为用户设计了一款通用驱动程序包(ezusb.sys),可以完成应用程序与usb接口的通信与控制任务。本设计即使用该通用驱动程序。
5 应用程序设计
应用程序通过usb驱动程序与usb接口进行通信。本设计使用labview设计应用程序。labview为用户提供了简单、直观、易学的图形编程法,相比于传统的编程语言,labview能大量地节省开发时间。用户通过labview应用程序可以进行对数据采集系统的控制,而且采集到的数据在控制界面中实时显示。
本文介绍了一款较为通用、基于usb2.0接口的高速数据采集系统设计方法,通过fpga软核在数据采集系统中的应用,解决了硬件电路设计繁琐复杂的问题,而且便于开发者对产品进行修改优化,可以大幅度地缩短产品的开发时间。本系统通过了硬软件的联合调试,系统工作正常,稳定性良好。
参考文献
[1] xilinx corporation. spartan-3an fpga family data sheet. 2009. [2] cypress semiconductor corporation.ez-usb fx2 cy7c68013 technical reference manual version2.2. 2003. [3] 钱峰.ez-usb fx2单片机原理、编程及应用[m].北京:北京航空航天大学出版社,2006.
半导体研究所赵德刚的科学家精神
瑞萨电子推出一体式ADAS全景环视解决方案套件
如何测量运算放大器输入电容以将噪声降至最低
腾讯云在印度新增数据中心
EMUI 11升级率将达到90%,鸿蒙系统用户超2亿
基于FPGA软核技术应用于高速数据采集系统设计的方法减少开发时间
RLHF实践中的框架使用与一些坑 (TRL, LMFlow)
三相异步电机的工作原理及基本结构
人工智能与无人机融合,前途无可限量
Vivado 2018.3这个Gadget你用了吗?
2017年,智慧交通的路该如何走?
华虹宏力“半导体结构及其形成方法”专利获授权
英创工控主板如何识别不同配置
APA600-PQG208M 特价渠道/原装现货/麦尔集团/庞小姐0755-88266578
快讯 可清洗智能织物传感器面世 意法半导体高集成度32通道超声波发射器
《故土》将于2019年发布EA版,网易与未来事务管理局推“共生共创计划”
中芯国际发布致股东的信和2020年财报
振华与中科英华合作进军锂电池
2018年全球智能手表出货量预计突破3600万块
对于区块链+外汇管理有怎样的期望