周晨曦,曾国强
(成都理工大学 核技术与自动化工程学院,成都 610051)
随着高速数据采集技术的不断发展,对采集数据的传输速度的要求也越来越高。高速数据传输方式纷繁复杂,其所能达到的最大传输速率也不尽相同。目前使用较多的高速数据传输方式主要有PXIE,光纤,PCIE,PCI等,但这些方式几乎都有布线复杂、程序编写复杂以及功耗较高,体积庞大等缺点,使得在开发时,由于其布线复杂,程序编写复杂,在对于电路设计要求较高的同时也不利于后期调试,从而延迟开发周期;在使用时,由于功耗较大,导致能源利用率不高,器件还会发热,导致接口寿命降低,同时由于体积庞大,在某些狭窄环境下使用不便。而 USB 3.0作为新晋的高速数据传输方式,以其布线经济、安装简单、高达5 Gbit/s的带宽、可支持热插拔、与更多计算平台之间存在兼容性等优点,在与计算机交换数据的过程中获得广泛应用[1]。但因为各种USB 3.0接口设计所使用的的USB 3.0芯片的不同,使得数据传输速率参差不齐,其稳定性也不尽人意,所以在USB 3.0接口设计中,其芯片选型至关重要。
通过调研发现无论是市面上已经开发成功的产品还是各种文献中提出的设计方法几乎都采用了CYPRESS公司生产的USB 3.0芯片进行开发。其中使用较多的是CYBUS3014芯片,该芯片采用BAG封装,在芯片内部集成了ARM9内核,使得功能较为全面。但在硬件设计上,特别是在PCB(Printed Circuit Board.印刷电路板)布线阶段由于过孔较多,造成整体结构复杂,从而使得布线较难,大大增加了前期设计与后期调试的工作量与难度。而在信号的传输方面,因为其复杂的结构,在信号传递过程中会降低信号质量,影响数据的传输速度[2-4]。
FTDI公司生产的FT601芯片是一片USB 3.0和FIFO的桥接芯片。在电路设计方面,FT601使用QFN封装,可以减少其布板时的过孔量,对于PCB布线,硬件调试以及后期的开发的难度都有显著的降低[3],同时其内部集成了100 MHz的时钟芯片,在无需提供外部时钟的同时,还能为主控芯片提供时钟,保证了主控芯片与FT601的时钟一致性,从而保证了信号传输的质量。在FPGA内部程序编写上,由于其只有6根主要控制线,大大简化了有限状态机的设计,降低程序编写难度。在性能上,能在保证数据传输的质量与速度,对于绝大多数场合来说,其性能能完全满足需求。
本设计采用FT601芯片作为与PC机通信的芯片,以Intel公司生产的cyclone IV系列的 FPGA芯片作为主控芯片,实现USB 3.0接口设计。
本设计的硬件电路主要由FT601外围电路、电源电路以及FPGA控制电路构成,其整体结构如图1所示。
图1 USB 3.0接口结构图
其中FPGA作为控制芯片,其主要由USB 3.0控制器模块和FIFO模块构成,实现对FT601芯片的控制,使其向上位机传输数据。配置电路主要为FPGA服务,固化程序,方便后期调试和实现脱机工作。电源使用PC机上的USB接口进行供电,电压为5 V,电源电路主要实现降压,为PCB板上的各个芯片提供工作电压。其具体设计方法将在后文进行介绍。
USB 3.0也被称为Super-Speed USB,作为新一代“即插即用”通用串行总线规范,USB 3.0继承于USB 2.0,在原有的4线结构(电源,地线,2条数据线)上,再增加了4条线路,用于接受和传输信号,同时采用全双工模式,简化了等待引起的时间消耗,提升传输速率。同时继承了USB 2.0可热插拔性,通用性等的优点的同时其还拥有高达5 Gbps的带宽和900 mA的供电能力[5]。与大多数数据传输方式相比,我们可以在不提供外接电源的情况下对大多数外接设备进行操作使用。在简化了电路结构的同时还允许设备从不同的待机模式转入挂起模式的电源管理方式,从而大大节省了能源。
本设计采用了FTDI公司生产的FT601芯片作为USB 3.0接口芯片,该芯片能有效的连接FIFO和USB 3.0, 实现向PC机传输数据,同时该芯片能兼容USB 3.0和USB 2.0,在低速数据传输或者不支持USB 3.0总线规范的PC机中也能使用,大大增强了其兼容性。FT601芯片内置有16 Kb FIFO数据缓存RAM,与单口RAM、双口RAM和SRAM等数据缓存RAM相比,其在数据传输过程中,数据处理速度更快,传输速度更快,并且功耗更低。其内部集成的时钟芯片在为自身提供100 MHz工作时钟的同时还能为外部芯片提供100 MHz的高频时钟信号,这对于高速数据传输十分重要。FT601还具有最高4 Gbps的带宽,拥有满足绝大部分的应用需求的能力。FT601芯片结构示意图如图2所示[6]。
图2 FT601芯片结构示意图
FPGA芯片以其高集成度,超快处理速度,编程灵活等优点已经成为电子学中的常客,在高速电路方面的更是其它类别的控制芯片不能比拟的。
本设计采用了Intel公司生产的cyclone IV系列的EP4CE6E22C8N芯片作为主控芯片,该芯片采用EQFP封装,提供了92个用户编程I/O,共8个bank,完全满足设计需求[7-9]。通过对FPGA进行编程,从而实现对芯片的控制以及数据的缓存。利用FPGA芯片强大的功能,使得整个电路只需FT601外围电路,FPGA外围电路,配置电路以及电源构成,大大简化了电路。其中FPGA控制电路部分主要包括FPGA配置电路和电源电路。
1.2.1 配置电路
FPGA的配置电路最主要的是时钟电路的设计,且在高速数据传输过程中,时钟的一致性直接影响了数据传输的质量。本设计的时钟电路有2个时钟,其一为配置时钟,为配置FPGA时提供时钟;其二为数据传输时钟。
针对FPGA芯片在断电后,其在断电之前的所有的数据与程序都无法保存的缺点,而采用的M25P16非易失性存储器(non-volatile memory,缩写为NVM)存储PFGA程序,使在系统上电时,M25P16芯片能快速向FPGA导入配置程序。而M25P16芯片的工作时钟最高为50 MHz[10],所以并不能直接使用FT601芯片所提供的时钟。由于使用降频方式对FT601芯片所提供的时钟进行降频处理将导致电路的复杂化以及在降频后可能带来的时钟抖动等原因。在FPGA配置时采用低抖动的50 MHz晶振为M25P16与FPGA提供时钟。而为了保证数据传输过程中时钟的一致性,数据传输时钟由FT601芯片中内部集成的时钟芯片提供,从而保证数据传输的质量。这使得整个系统在保证数据传输的质量的同时,还能进行脱机工作。
本设计采用PC机作为供电设备,通过USB 3.0数据线与PC机连接,在对数据传输的同时对接口电路中的芯片进行供电。极大的利用了USB 3.0的资源,减少了外部设备的连接。但由于各个芯片的工作电压不完全相同,且PC机所提供的电源电压为5 V,所以需要使用降压芯片对其进行降压处理。
本设计采用AMS1117系列芯片对电源进行降压处理。AMS1117系列芯片作为一款高效线性稳压器,拥有三端可调和固定稳压的能力,其输入电压在3~12 V,最低电压可以稳压到1.0 V,线性好,降压后电压稳定,且电路设计简单,有利于简化电路,在对不同的芯片供电的情况,更加实用。
本设计采用AMS1117-1.2 V芯片提供FPGA芯片所需的内核电压VCCINT,AMS1117-2.5 V芯片提供辅助电压VCCA[7,9]。FT601芯片内部集成了LDO1.0 V稳压器,无需外部降压芯片,其I/0模块的供电电压也支持+1.8 V,+2.5 V,+3.3 V三种电平之多[6]。而FPGA芯片所需要的I/0驱动电压以及M25P16芯片工作电压均支持+3.3 V,为了简化电路的设计,使用AMS1117-3.3 V芯片为上述芯片提供工作电压电压。
软件设计主要是在quartus II环境下使用Verilog语言对FPGA芯片进行编程设计,实现FPGA对FT601的控制,达到数据传输的目的。而控制FT601芯片首先要确定其工作模式,FT601芯片有两种工作模式: “245” 单通道模式和多通道模式。其中多通道模式可以支持同时4通道数据传输,但传输速率较慢,而 “245” 单通道模式有更高的传输速率。
图3 数据传输过程示意图
本设计中FT601芯片采用数据传输模式为 “245单通道”模式,该接口传输数据过程如图3所示,当PC通过USB 3.0接口向FPGA中传输数据时,先将数据缓存在FT601内置的FIFO中,即FIFO RD缓存区,同时FT601向FPGA发送可读REF_N命令,当FPGA发送 RD_N 命令时,读出FIFO RD中的数据,其中REF_N表示FIFO RD中至少有1字节的数据可读,RD_N与REF_N信号均为低电平有效;当FPGA通过USB 3.0接口向PC传输数据时,FT601先向FPGA发送TXE_N信号,该信号表示FIFO WR中至少可以写入1字节的数据,然后FPGA向FT601发送WR_N,先把需要传输到PC端的数据缓存在FIFO WR缓存区中,PC端通过发送数据请求信号,从缓存区中读出数据, TXE_N和WR_N信号均为低电平有效,FIFO WR和FIFO RD缓存区的大小均为8KB×2。时钟信号CLK是FT601输出到FPGA控制器的并行FIFO时钟输出信号,时钟频率可以通过FTDI公司提供配置软件配置为66 MHz和100 MHz;BE[3:0]是并行FIFO总线字节使能信号,高电平有效,信号OE_N引脚是数据输出使能信号,低电平有效[6]。
FPGA内部程序设计主要由I/0控制模块、FIFO控制模块、有限状态机模块和信号模块组成。
I/0控制模块主要实现外部端口与内部模块之间信号的连接,即控制FPGA的I/O接收外部芯片向FPGA所传输的数据和信号和向外部芯片发送数据和信号,即 I/O的双向控制,其功能较为简单,不再赘述。有限状态机模块作为FPGA软件设计的最重要的一环,其主要功能是控制FPGA内部FIFO(主FIFO)的所有操作,实现其与FT601芯片内部FIFO(从FIFO)的数据传输过程;FIFO 控制模块控制内部FIFO的读写操作。信号模块的设计主要是为了接收外部设备的所传输的信号,同时还设计了一个信号发生器,方便测试。
有限状态机模块主要实现主FIFO读写状态的转换,其状态转换过程如图4所示。
图4 有限状态机状态转换示意图
在状态转换过程中,FT601芯片的RD FIFO和WR FIFO的状态由其输入信号RXF_N和TXE_N表示。其中,RXF_N信号是FPGA中RD FIFO满输出信号,该信号表示FIFO至少有1字节能够被读出,当RXF_N为低电平时,只能对RD FIFO进行读操作; TXE_N信号是发送FIFO空输出信号,该信号表示从FIFO至少还有1字节的空间能够被写入,当TXE_N为低电平时,只能对WR FIFO进行写操作。FPGA内部FIFO(主FIFO)的状态由FIFO_FULL和FIFO_EMP两个指示信号表示。其中,FIFO_FULL信号为1表示主FIFO满,FIFO_EMP为1表示主FIFO空。
系统复位后,状态机处于IDLE状态,当RXF_N信号为0时,且FIFO_FULL信号也为0时,状态机转入M_RD状态,此时FPGA将对FT601内置FIFO(从FIFO)进行读操作,否则将判断判断TXE_N和FIFO_EMP信号。在M_RD状态下,若RXF_N和FIFO_FULL信号有一个为1,则判断TXE_N和FIFO_EMP信号,否则状态机将继续留着M_RD状态,FPGA也将继续对从FIFO进行读操作。当进入TXE_N和FIFO_EMP信号的判断,若TXE_N和FIFO_EMP信号均为0,状态机转入M_WR状态,FPGA开始对从FIFO进行写操作,否则进入IDLE状态。在M_WR状态下,若TXE_N和FIFO_EMP信号仍然为0,则状态机继续处于WR状态,FPGA将继续对从FIFO进行写操作,否则状态机转入IDLE状态。
有限状态机的设计,使得整个程序更具有逻辑性,在后续的程序调试中也更容易找出程序中有问题的地方。
整个电路的FIFO分为FPGA内部由IP核生成的主FIFO和内置于FT601芯片的从FIFO 两个部分。FIFO控制模块主要分为控制主FIFO模块和从FIFO模块的数据接收、缓存和发送。主FIFO通过调用quartus II中的IP核生成,其大小为16k,深度为8 192,读写的数据宽度为32位[11-12]。主FIFO的所有操作主要由有限状态机模块进行控制,实现其与从FIFO的数据传输,从FIFO大小为16k,读写数据宽度为32位,从FIFO控制模块主要控制从FIFO的读写操作。
信号模块分为外部信号接收器和内部信号发生器,其中外部设备信号接收器主要是为了对外部设备所传输的信号进行接收,在后续的使用与以后的开发也较为方便。内部信号发生器,主要是为了在调试阶段,能实时的通过分析上位机所接收到的2进制数据,从而找到硬件电路设计与软件程序设计中的问题,同时对计算误码率也更为方便。
本设计利用用inlet公司所提供的Quartus II集成开发环境,对编写的FPGA代码进行综合、实现之后,使用JTAG配置模式对FPGA芯片进行在线配置,方便对程序进行调试修改,完成后,生成JIC文件,利用主动串行配置模式将JIC文件下载到M25P16中,在完成对FPGA的编程工作的同时达到脱机工作的目的。
对于FT601芯片的配置,主要有两种方法,一种是通过对芯片引脚电平高低的选择,来实现对芯片的FIFO时钟、通道数量以及工作模式进行配置,另一种就是利用FTDI公司所提供的FT60X Chip Configuration Programmer软件进行配置[6]。本设计采用的配置方式为后一种方式。首先使用USB 3.0连接线将PC与电路连接,利用FT60X Chip Configuration Programmer 软件对FT601芯片的工作模式以及工作时钟进行配置。图5是对FT601芯片进行配置的图片。本系统中设置FIFO时钟为100 MHz,工作模式为“245”单通道模式[13]。
图5 FT601芯片配置图
在完成对FT601芯片的配置之后,通过FTDI公司提供的上位机程序示例,对所设计的电路以及编写的FPGA代码进行测试[14]。测试结果如图6和图7所示,其中图6为写速度即上位机向FPGA传输数据的速度,图7为FPGA向上位机传输数据的速度,从图中可以看出本设计可以有效的传输数据,且无论是FPGA向PC机传输数据时还是PC机想FPGA传输数据时,其数据传输平均速度均能达到350 MB/s。
图6 接口写速度测试图
图7 接口读速度测试图
从电路测试的结果来看,该接口能达到350 MB/s的数据传输速率,达到了预先设定的目标,通过计算,该接口能满足数据采样率为3 GSPS以下的高速数据采集系统的实时数据传输的需求,对于带有SDDR的数据采集系统则能满足更高采样率的数据采集系统的数据传输需求。但在进行了多次的FPGA的程序修改以及测试下,仍未达到FT601芯片的数据手册中所说的最大传输速率400 M/s。在通过对结果分析以及对文献的大量查阅,总结了以下几点可能原因:
1)硬件电路设计上,对于数据传输线的走线未能完全满足每条数据传输线长度相等。
2)元器件对于信号传输有延时。FPGA芯片内部逻辑翻转有延时。
3)测试所使用的PC机性能不够,接收速率达不到。
但无论是哪种原因,本设计还需不断的改进,以追求更高的数据传输速率。同时在以后的高速电路设计中也应该注意数据传输线的长度问题。
本文主要对现有的数据传输方式进行介绍,并详细介绍了USB 3.0数据传输方式,设计了基于USB 3.0的高速数据传输接口,详细介绍了硬件电路的设计,数据缓存与传输的流程以及有限状态机的工作方式,并对设计的接口进行了实验测试与结果分析。测试结果表明,基于FPGA的USB 3.0高速数据传输接口设计,在按照要求进行相应配置情况下,能以350 MB/s左右的速度对数据进行传输,能满足大多数的数据传输任务。
虽然基于USB 3.0的高速数据传输接口设计具有良好的数据传输速度与稳定性,但在硬件设计方面还需要进一步的研究以达到更快的传输速度。USB 3.0接口与大多数计算机兼容,无论在日常生活上还是在军事上都具有较强的通用性,对于数据传输的应用上也将是今后研究的热点。而FPGA以其高灵活性、定制性、较强的通用性和扩展性等优点,早已成为电子研究领域中的重要手段,二者结合使得数据传输接口体积向小型化微型化发展,同时也更加便于今后进行相应功能扩展和二次开发,使得本设计在高速数据输出方面拥有更为广阔的应用前景。