1 引言
针对航天测试系统的应用需求,提出一种基于FPGA的微型数字存储系统设计方案。该系统是在传统存储测试系统的基础上,利用可编程逻辑器件FPGA对传统存储测试系统进行单元电路的二次集成,使测试系统体积大幅减小,功耗急剧降低,从而提高系统的抗高过载性能,增加系统灵活性、通用性和可靠性。FPGA不仅完成控制存储及大部分的相关数字逻辑单元电路,而且使得整个存储系统更为简单,布线也更容易。另外,系统FPGA编程就是按照预定功能连接器件内的熔丝,从而使其完成特定逻辑功能的过程,一旦完成编程,FPGA就相当于一片能够完成特定功能的集成电路,因而无需担心程序运行路径出错,这与单片机有本质区别。
2 系统硬件设计
2.1 器件选型
2.1.1电源转换器TPS70358
系统中,FPGA工作电压为3.3 V和2.5 V,USB接口器件CY7C68013 工作电压为3.3 V,Flash工作电压为3.3 V,系统需通过电源器件TPS70358将电压转换为3.3 V和2.5 V,为系统各器件提供电源。TPS70358是新一代的集成稳压器,是一个自耗很低的微型片上系统,具有极低的自有噪音和较高的电源纹波抑制性能,因此,该器件适用于一块电路板或一片重要器件(如FPGA、DSP)供电的电压转换。
2.1.2 现场可编程门阵列(FPGA)XC2S50
该系统采用XC2S50型FPGA控制各个接口,该器件是xilinx公司生产的Sparran II系列高性能现场可编程门阵列(FPGA),具有如下特点:内置标准JTAG接口,支持3.3 V在系统可编程(ISP);3.3 V电源,集成密度为50 000个可用门;引脚到引脚的延时7.5 ns,系统频率高达200 MHz。采用单片FPGA实现逻辑控制功能简化电路设计,提高系统可靠性。且XC2S50系统可编程,只需将一根下载电缆连接到目标板上,就可多次重复编程,方便电路调试。
2.1.3 USB 2.0控制器CY7C68013
CY7C68013是Cypress公司生产的一款USB 2.0控制器,该器件具有运算速度快、功耗小和性价比高等特点。时钟周期高达40 MHz,每执行1条指令需4个时钟周期;其内部集成有USB接口,I2C总线接口等,该系统设计实际数据传输速度高达10 MHz。
2.2 电路设计思路
图1为系统硬件结构框图,计算机通过USB接口控制可编程逻辑器件FPGA实现对Flash存储器的块擦除、页编程、读数据等操作。
块擦除操作时,计算机通过USB接口向FPGA发送指令,FPGA接收到指令后对Flash存储器进行块擦除操作,并将状态返回计算机;页编程操作时, FPGA接收计算机并行接口发送的指令,立即对Flash存储器进行页编程操作,先写命令,再写要编程的地址,然后将数据发送到Flash存储器中;读取数据操作时,FPGA首先接收计算机发出的指令,然后对Flash存储器进行读取数据操作,先写命令,再写要读取的地址,然后开始输出数据,并将状态返回计算机并行接口。
3 系统软件设计
3.1 FPGA对Flash的读、写、擦除操作
FPGA执行对Flash的读、写、擦除操作是利用VHDL语言的状态机实现的。状态机控制Flash的时序电路简单易行,逻辑关系一目了然。 XC2S50接收到CY7C68013传来的擦除控制命令,立即执行擦除操作。按照时序,首先写入自动块擦除设置命令60H,之后依次写入2个行地址和1 个列地址进行寻址,而后写入擦除命令D0H开始执行擦除操作。
读操作较为复杂,需要XC2S50和CY7C68013协同工作。这里只给出读信号的操作过程。先写人读设置命令00H,因为读一次执行一页,所以地址的写入是2个行地址和3个列地址,之后写入读命令,在等待rb变高后就可发送re信号将数据从Flash读出。写操作过程与读操作类似,但写操作完全由 XC2S50控制,写完命令、地址后,开始写入数据,直到写满2 KB数据,最后输入页编程命令。需要注意每写完2 KB数据,Flash返回的状态信号rb所等待的时间较长,大约是140μs。图2为页编程的流程。
3.2 CY7C68013控制逻辑及固件程序设计
CY7C68013主要完成两部分工作,一是实现对擦除的控制开关命令,即上位机通过USB接口发送擦除命令,CY7C68013接收到这个命令后,会发送一个约为200 ms低脉冲通知FPGA启动擦除操作;二是通过与FPGA配合,完成从Flash通过CY7C68013的GPIF接口读入上位机的任务。 CY7C68013所用到的I/O包括控制线USBCTR1,状态线US-BS0,读信号线USBRD及8条数线。
读数时,首先由单片机发出读数开始命令USBCTR1,FPGA接收到该命令后开始初始化,包括写入读数设置命令、地址及读数命令,等待rb变高, USBS0置低,当单片机检测到USBS0变低后,开始给出一系列脉冲GPIF(USBRD),将2 KB数据依次读出。与此同时,FPGA在等待几百纳秒后将USBS0置高,单片机在判断USBS0变高后也将USBCTR1拉高,为下一页读数做准备。读数时序如图3所示。
按照上述控制逻辑关系编写CY7C68013的同件程序。CY7C68013有3种可用接口模式:端口、GPIF主控和从FI-FO。“GPIF主控”接口模式使用PORTB和PORTD构成通向4个FX2端点FIFO(EP2、EP4、EP6和EP8)的16位数据接口。GPIF作为内部的主控制器与 FIFO直接相连.具有6个可编程控制输出信号(CTR0~CTR5)和6个通用准备就绪输入信号(RDY0~RDY5),用户可通过编程设置控制信号的输出状态,即器件在接收到何种就绪信号后执行相应操作,GPIF控制代码存放于器件内部RAM的波形描述器中。从该系统需求出发,将CY7C68013设为FIFO Read模式,使GPIF中的Slave FIFO与USB通信中端点缓冲直接建立连接,数据传送无需CPU参与。
固件程序代码设计主要是根据系统需求设计相应的程序框架图,再调用同件函数库 (Ezusb.lib)的函数进行编程,初始化并重新列举端点,然后在任务处理器中设定任务,在Keil C51环境中编译代码。编译通过后,将同件代码下载到USB单片机中,即可实现GPIF多字节读操作。
4 系统可靠性验证
为验证系统可靠性,在数据输入端循环输入00~0F递增数据,通过上位机读出、写入Flash中的数据,图4为试验数据。通过读出的数据验证了该系统数据存储及回读的正确性、可靠性。
5 结束语
采用FPGA对Flash进行读、写、擦除操作,利用状态机分时控制3种操作,简化程序设计,简单修改地址将Flash的容量从32 MB增加到1 GB,提高了系统的可移植性、可扩展性和通用性,便于维护设备,有利于产品的优化和改进,缩短了开发周期。采用USB单片机与PC机建立通信连接,与现有设备很好兼容,数据读取速度可达1O MB/s,可方便、快捷地读取数据。通过多次验证,该系统工作稳定、可靠。