APP下载

基于USB 3.0的高速数据回读系统设计

2021-04-01赵计贺张德彪李金强

中北大学学报(自然科学版) 2021年2期
关键词:晶振低电平缓冲区

赵计贺,李 杰,张德彪,李金强

(1.中北大学 仪器科学与动态测试教育部重点实验室,山西 太原 030051;2.山东航天电子技术研究所,山东 烟台 264000)

0 引 言

导弹具有远距离、精准打击的作战能力,在现代化国防建设中的地位日益提升.在导弹研制成功后需要进行外场飞行测试试验评估其真实性能.为了获取弹体飞行状态,消除可能存在的隐患及进行故障诊断,试验中采用基于存储测试技术的多通道高速数据记录仪提供有力的数据支撑[1-2].为了可以及时处理和分析试验中存储的大量数据,需要高速回读系统将数据从存储器传输至上位机[3].

现场可编程门阵列(FPGA)在灵活性、并行性方面有着其它芯片所不具备的优势,被广泛地应用在数据采集存储、网络传输等方面[4-5].FPGA可以与存储器高速传输,但FPGA实现USB协议极其困难,不能直接与上位机进行通信[6].

由于USB 3.0物理接口比USB 2.0多出两组超高速传输差分对,USB 3.0的最大传输速度理论值可达500 MB/s,是USB 2.0最大传输速度60 MB/s 的8倍[7-8].CYUSB3014是CYPRESS(赛普拉斯)公司推出的一款USB 3.0控制器,提供了集成且灵活的功能.FPGA通过CYUSB3014内部提供的第二代通用可编程接口(GPIF II)以读写先进先出(FIFO)的方式进行双向通信.

本系统采用CYUSB3014在FPGA和上位机之间传输数据后,传输速度大幅度提高.FPGA向上位机发送数据的速度达到346.23 MB/s,上位机以116.56 MB/s的速度将数据写进硬盘.与USB 2.0相比,传输速度提升了286.23 MB/s.

1 整体设计

整体设计框图如图1 所示.使用C#语言编写上位机界面,通过托管Microsoft.NET类库CyUSB.dll所提供的方法和属性调用底层驱动CyUSB.sys访问CYUSB3014.

图1 整体设计框图

USB3014内部使用自动直接内存访问(DMA)通道,USB模块与GPIF II模块的数据流通过DMA缓冲区相连,USB套接字与GPIF套接字之间互发信号通知DMA缓冲区空满.根据CYUSB3014提供的GPIF II时序要求,使用Verilog HDL编写FPGA程序读写数据流.

2 硬件设计

2.1 电源去耦

电源去耦的重要作用是能够保证在供电过程中,尽量减少系统噪声对数据传输造成的影响[9].滤波电容为系统噪声提供一条低阻抗回路,在噪声频点上,滤波效果与滤波电容阻抗大小成反比.

电容器件除了电容分量还掺杂其它分量,它可以等效为电容与并联泄漏电阻(Rleak)并联,再与等效串联电阻(ESR)、等效串联电感(ESL)串联.其中ESL主要取决于类型和封装,ESR主要取决于电容工作温度、频率及本身的导线电阻,Rleak主要由电容本身特有的泄漏特性决定.电容、ESR、ESL分量和泄漏特性共同决定了电容特性.

电容阻抗的计算公式为

(1)

式中:Z为阻抗;R为ESR阻值;f为频率;L为ESL感值;C为容值.根据式(1)可知,电容整体阻抗表现为:达到谐振点时,电容分量与ESL分量抵消,阻抗最小,滤波效果最佳;在谐振点前,电容分量起主要作用,随频率的增加,滤波效果增强;在谐振点后,ESL分量起主要作用,随频率增加,滤波效果减弱.对于村田4 700 nF、0603封装的电容,ESL为0.287 7 nH,ESR为0.073 53 Ω,其阻抗大小如图2 所示.

图2 滤波电容阻抗

设计中,系统噪声等干扰占据了一段频带,而不是单一的频率点.在实际工作中,把每一处的噪声频带找出来费时费力,系统电路设计过程中,主要关注的噪声频带为0 MHz~100 MHz.使用两个不同的电容构造在频率为100 MHz内的低阻抗回路中.

2.2 时钟设计

时钟电路对数据传输质量起着至关重要的作用[10].RC振荡电路的频率稳定度可达到10-3,LC振荡电路的频率稳定度可达到10-4,而石英晶体的品质因数远高于RC、LC振荡电路,频率稳定度至少可达到10-9.本设计选用19.2 MHz的石英晶体振荡器为CYUSB3014提供时钟.

晶振提供正确的时钟源,负载电容起着重要的作用,必须慎重选择.晶振负载电容为

(2)

式中:CL为晶振负载电容,根据晶体器件资料,该晶体要求CL=9 pF;C1,C2为外部电容,一端连晶振引脚,另一端接地;CS为电路板晶振两引脚走线间的寄生电容,一般在2 pF~5 pF之间,本文CS=3 pF.取C1=C2,根据式(2)计算得,C1=C2=12 pF.

晶振的另一个重要参数是功耗.使用的晶振驱动电平与功耗相比过小,会加速该晶振老化.晶振功耗的计算公式为

P=2[πf(C0+CL)Vx]2R,

(3)

式中:f为晶振频率;C0为晶振中并联电容;CL为晶振负载电容;Vx为晶振OUT引脚的最大电压;R为晶振等效串联电阻.针对NDK公司的NX3225SA型晶振,根据提供的资料可知,功耗为10 μW,R为80 Ω,C0为1.26 pF,Vx为1.32 V,通过式(3)计算得驱动电平为107 μW,符合设计要求.

3 CYUSB3014控制原理

CYUSB3014拥有高性能且独立于ARM9可提供256种可编程状态状态机的GPIF II.GPIF II最高支持100 MHz频率,且支持8位、16位、24位和32位并行数据总线.将GPIF II作为同步从设备FIFO与FPGA连接.

图3 为同步从设备接口框图.SLCS#为芯片选择信号,低电平有效;PKTEND#为写入数据包信号,低电平有效;FLAGA、FLAGB、FLAGC、FLAGD标志套接字状态;A[1:0]为从设备的地址总线,与GPIF II的4个线程相对应;DQ[31:0]为32位双向数据总线;SLWR#为写入信号,低电平有效;SLRD#为读取信号,低电平有效;SLOE#为输出使能信号,低电平时,才能对从设备FIFO进行读取操作;PCLK为同步时钟输入信号.

图3 同步从设备FIFO接口框图

系统设计选用自动DMA通道,在GPIF线程、套接字和由DMA描述符控制的DMA缓冲区之间传输数据.GPIF II 状态机必须根据内部控制信号或外部输入选择一个有效的 GPIF 线程用于数据传输.套接字的功能是连接外设硬件模块与RAM.DMA描述符用于记录DMA缓冲区的地址和大小,并指向下一个DMA描述符的指针.DMA缓冲区用于暂时存储发送套接字和接收套接字之间的数据.

如图4 所示,套接字根据DMA描述符列表传输数据.套接字加载DMA描述符1,获取缓冲区的地址(A1)、大小(L)和下个描述符的地址.传输L个字节后,加载DMA描述符2获取信息,传输L个字节,加载DMA描述符3获取信息,传输L个字节,加载DMA描述符1,如此反复循环.

图4 套接字传输数据示意图

由于RAM提供的缓冲空间不足以支持同时具有8个缓冲区大小为16×1 024的两个通道,且FPGA向上位机发送数据量大,上位机只需向FPGA发送少量命令,所以,将上传通道使用8个缓冲区,下传通道使用4个缓冲区,以增强系统高吞吐量性能.

4 控制逻辑设计

4.1 从设备FIFO接口时序

图5 为从设备FIFO写时序图.固件配置FLAGA为An对应线程专用标志,配置的发送套接字编号必须与An对应.在写入数据之前,应保证FIFO地址稳定及SLCS#激活.在SLWR#有效后的PCLK上升沿来时,数据总线DQ上的值被写入FIFO并更新FIFO指针.写传输结束时,FLAGA始终会延迟3个周期更新,在最后一次激活SLWR#后的第4个PCLK上升沿来临时,若FLAGA处于低电平表示缓冲区已满.

图5 从设备FIFO写时序

图6 为从设备FIFO读时序图.

图6 从设备FIFO读时序

固件配置FLAGB为Am对应线程专用标志,配置的接收套接字编号必须与Am对应.读取数据时,应保证FIFO地址稳定且SLCS#、SLOE#激活.在FIFO输入地址后的第3个PCLK上升沿及激活SLRD#后的第2个PCLK上升沿,才可以读取数据总线DQ上的值,即激活SLRD#必须至少比输入地址时刻迟1个时钟周期.读传输结束时,FLAGB始终延迟2个周期更新,在最后一次激活SLRD#后的第3个PCLK上升沿来临时,若FLAGB处于低电平表示缓冲区已空.

4.2 局部标志

局部标志有效解决了线程标志更新有延迟会导致缓冲区溢出或读空还在读的问题.对于从设备FIFO读写时,通过固件配置水印值的公式为

(4)

(5)

式中:wrnum为时钟上升沿对局部标志采样为低电平后将要写入的数据量;rdnum为时钟上升沿对局部标志采样为低电平后将要读取的数据量;watermark为固件配置的水印值,32位宽;buswidth为使用的数据总线位宽.

对于从设备FIFO写入数据且32位数据总线,设置水印值为6,当局部标志变为低电平时,表示FIFO继续写入6个数据就会满,而局部标志始终延迟3个时钟,应在第4个上升沿采样,所以当前FIFO实际上再写入2个数据就会满.对于从设备FIFO读取数据且32位数据总线,设置水印值为5,局部标志变为低电平时,再读取5个数据就会空,而局部始终延迟2个时钟,应该在第3个上升沿采样,而读取数据延迟命令2个时钟,即读取4个数据FIFO就会空.

4.3 状态机设计

图7 为系统状态机.配置FLAGA为线程0的专用满标志,FLAGB为线程0水印值6的局部满标志,FLAGC为线程3的专用空标志,FLAGD为线程3水印值6的局部空标志.FPGA上电后处于空闲状态,设置地址A[1:0]=3,在FLAGC与FLAGD都为高电平后,激活SLWR#及SLOE#读取数据,等待 FLAGD为低电平,根据式(4)将FIFO中的数据读空.

图7 系统状态机

收到的数据是读取数据命令后,设置地址A[1:0]=0后根据FLAGA、FLAGB标志判断FIFO满,若满就要等待,非满就发送32位递增数,计数到232-1时停止发送并返回空闲状态.发送过程中,采样FLAGB为低电平时,根据式(5)写满FIFO,等待FIFO处于非满状态时,继续写入数据.

4.4 上位机设计

在Visual Studio编译环境使用C#语言编写上位机.在程序中引用赛普拉斯为USB设备提供高级编程接口的托管Microsoft.NET类库CYUSB.dll与CYUSB3014通信.在调用USBDeviceList类返回使用cyusb3.sys的设备列表中查找VID=0x04B4,PID=0x00F1的设备后复位,在上位机界面显示查找设备及复位设备的结果.

调用XferData方法接收或发送数据,可实现同步阻塞数据流,数据传输完成或超时前不会返回值.使用大量输入端点XferData方法每次从缓冲区读取1 MB数据,以二进制文件形式进行存储,直至缓冲区无数据.C#是面向对象的提供了强大功能的高级程序设计语言,但由于中间语言和编译过程没有C语言效率高,为能够高速将数据存储在硬盘,引用C语言中的fwrite函数写文件.

5 实 验

利用上位机读取大小为1 000 M的二进制文件,通过CYUSB3014发给FPGA,FPGA将收到的数据返回至上位机,上位机把收到的数据写入文件.上位机逐字节读取原始文件和新写文件,对文件大小和内容进行比较,未发现大小和内容不同,即传输过程中无错帧、丢帧现象发生.

FPGA与CYUSB3014的接口频率为100 MHz、数据总线为32位.FPGA向上位机发送228个递增数,每个递增数占4个字节,上位机显示开始传输和传输结束的时间.经计算,CYUSB3014传输速度达到346.23 MB/s.

上位机发出读取数据命令后,等待接收FPGA发送的数据且将数据以二进制文件的形式存储在固态硬盘中.上位机显示数据传输的开始、结束时间和已经写入文件的数据量,经测试,上位机接收数据并以二进制文件形式写入固态硬盘的速度为116.56 MB/s,如图8 所示.

图8 上位机界面

6 结 语

系统利用CYUSB3014自身接口在FPGA与上位机之间进行双向高速传输数据,弥补了FPGA与上位机不能直接通信的缺点,有一定的工程价值.通过C#编写的上位机引用C语言写文件函数,将接收的数据以116.56 MB/s的速度以二进制文件形式存储固态硬盘,便于对数据进行处理.

猜你喜欢

晶振低电平缓冲区
两非门晶振振荡电路的设计
晶振引发的EMC辐射发射超标分析及整改方案设计概述
一种实用的电脑接口判断方法
串行连续生产线的可用度与缓冲库存控制研究*
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
基于ARC的闪存数据库缓冲区算法①
晶振失效故障分析
数字电子技术的应用
浅谈物理电路与数字电路
控制系统中时序的研究