在固件程序中,按照FIFO的时序图完成GPIF波形设计,并生成波形描述符文件GPIF.c供设备功能程序main.c调用。生成的GPIF.c会初始化波形设计用到的寄存器,包括配置接口的设计,在TD_Init()中初始化函数,配置好使用的端点类型,传输数据包的大小。在TD_Poll()中设置好GPIF的读数据传输,通过main.c中对TD_Poll()的重复调用,完成USB的大数据量传输。
2.2 GPIF波形图
根据FPGA编写的时序,利用Cypress公司配置的GPIF Designer画出相应的时序图,如图3所示。

在数据读时序状态设计中,在S3状态,让读使能REN低电平有效。在S4中判断FPGA内FIFO 的空标志是否有效,有效后开始进行FIFO的读传输,OE用来控制数据出现在数据总线上的时间。数据总线在S5时拉高是数据有效(activate),GPIF按字节将数据读到FIFO中,同时TC计数器会减一。在状态6时,以计数器的值来判断一帧数据是否完成传输。如果没有完成,则不断循环,读完所有数据为止;如果读完了所有数据后,则不再经过中间其他任何状态,直接跳到状态7(IDLE),表示完成一帧数据的传输。设计中在S4、S6设定决策点。
2.3 USB驱动设计
USB功能驱动程序采用Cypress公司的通用驱动程序ezusb.sys,ezusb.sys驱动的开发工具为DDK,驱动程序开发工作包括:开发环境设置(VC编译环境)、驱动程序设计、安装文件(INF文件)设计。驱动程序减少了USB设备硬件处理数据的细节,为应用程序访问USB硬件设备提供相应接口。ez-usb fx2
用户编写应用程序只要调用它提供的接口函数及其所需要传递的参数来实现所需的功能。应用程序用CreateFile()函数打开设备并且创建与设备的连接,然后用DeviceIoControl()函数或ReadFile()与WriteFile()函数从驱动程序中读写数据和向驱动程序写入数据。当应用程序退出时,用CloseHandle()函数关闭设备。这一过程将产生对应于此设备对象的IRP与驱动程序设备类成员函数,如表1所示。

2.4 应用程序设计
应用程序是系统与用户的接口,它通过动态链接库调用通用驱动程序完成对外设的控制和通信。本系统的应用程序开发使用的是Visual Basic6.0中文版本。本系统的工作过程为:首先是查找设备打开设备句柄,然后调用动态链接库发送控制命令启动系统,当检测到设备后进行数据的读取命令,调用动态链接库的函数关闭设备句柄。系统的应用程序界面如图4所示。

3 系统整体检测
3.1 FPGA逻辑正确性检测
利用FPGA内部累加器模拟ADC转换后的串行数据以及相应的时钟,利用Cypress公司提供的Control Panel 发出控制命令直接给接口芯片,并读取FPGA内部产生的数据,观察其中的数据与设定的FPGA中发出的数据是否相同,以验证FPGA内部逻辑的正确性。相应地利用示波器监测FPGA内部的时钟信号,验证其正确性。
3.2 数据传输数据检测
数据传输检测中增加FPGA内部累加器产生的数据包的数量,采用Bus Hound 记录总线状态变化,在得到的结果中观察Bus Hound中的数据形式并查看VB读数软件中的数据文件,观察得到的数据文件数据总量以及大小都正确,再打开应用程序中的数据文件所示的波形,从而验证了数据传输的正确性。
4 本系统中对传输速度改进方面的分析
本系统中主要需要体现数据的实时性传输,在数据的处理部分与USB部分提高数据传输速度。主要通过以下方面使速度得到提高:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-31457-2.html
千万别升
光棍无老婆也要有解决性的合法途径