基于NORFLASH的大容量数据存储与传输
2015-04-25宋吉伟常文革黎向阳
宋吉伟,常文革,黎向阳
(国防科技大学 电子科学与工程学院,湖南 长沙410073)
在现代雷达、电子侦查和通信领域中,不可避免地会遇到大容量数据的存储和传输问题[1-4]。如应用广泛的直接数字频率合成芯片AD9910,当其工作于并行调制模式时,势必会面临大容量调制数据的存储和传输的问题[]。基于以上应用背景,本文采用Verilog HDL硬件描述语言,基于FPGA设计了SLAVE FIFO接口和NORFLASH读写控制器,实现了基于NORFLASH的大容量调制数据的存储和传输,解决了在AD9910并行调制模式中,大容量调制数据的存储和传输的问题。
1 研究背景
某硬件测试平台如图1所示,主要由上位机、EZ-USB FX2、FPGA以及3片NORFLASH构成。其中,作为主控制器的FPGA选用了Xilinx Virtex-6系列的XC6VLX130T芯片。USB芯片选用了Cypress公司的CY7C68053芯片。NORFLAH存储则选用3片容量为2 Gbit由Micron公司生产的P30系列芯片,用于大容量调制数据的存储。高速数据缓存选用3片由Samsung公司生产容量为2 Gbit的DDR3芯片,用于缓存高速并行调制数据。3片AD9910工作于并行调制模式,用于产生3通道高速调制波形。PC机运行基于C#编写的上位机。
图1 硬件测试平台连接图
2 SLAVE FIFO的FPGA接口设计
CY7C68053外部集成的配置灵活的大端点FIFO[],如图2所示,能使数据在片上和片外高速传输,其具有以下特性:利用CY7C68053 CPU的外部数据通路,直接与外部主控逻辑连接;“块FIFO”的结构保证了USB和FIFO之间数据的瞬时传输或提交;具有多功能接口,SLAVE FIFO接口或GPIF接口、异步或同步时钟接口、外部或内部时钟等[]。这些端点FIFO可根据数据传输带宽的需要进行不同的配置,如双缓冲、三缓冲和四缓冲等。其中,双缓冲是指一个缓冲区用于USB数据的缓冲,与此同时,外部控制器可操作同一端点的另一个缓冲区。
图2 CY7C68053端点FIFO示意图
图3表示了CY7C68053的SLAVE FIFO接口以及与FPGA的连接示意图,其中EP2、EP4、EP6和EP8均可作为输入或输出端点进行数据的传输。其中,FLAGS为FIFO的标志引脚,用于报告FIFO的状态,如“满”和“空”状态。SLOE、SLRD、SLWR、PKTEND、和FIFOADR[1∶0]为控制引脚,分别表示FD输出使能、读端点FIFO、写端点FIFO、IN包发送控制和端点FIFO选择控制。IFCLK为时钟接口。
图3 CY7C68053的SLAVE FIFO接口以及连接示意图
根据系统需求,CY7C68053的固件程序采用同步读写操作,将EP2设置为输出端点,512 Byte双倍缓冲,总线宽度16 bit;将EP6设置为输入端点,512 Byte双倍缓冲,总线宽度16 bit;采用内部IFCLK时钟。SLAVE FIFO的读写操作时序如图4所示。在写时序中,在SLWR有效的下一个时钟上升沿,数据锁存至SLAVE FIFO,完成数据的写入。在读时序中,SLOE有效后,SLAVE FIFO中的第一个数据被读出,此后使能SLRD依次读出SLAVE FIFO中的其他数据。为简化设计,SLOE和SLRD可同时使能,完成数据的读出。
图4 SLAVE FIFO的读写时序
3 NORFLASH控制器的设计与实现
P30系列是Micron公司最新一代的65纳米FLASH芯片,有64 Mbit到2 Gbit的可选存储容量。在本设计中,使用了P30系列中的PC28F00BP30EF芯片,存储容量2 Gbit,采用512 Byte缓冲编程模式对NORFLASH进行写入操作,按页读取的模式读取NORFLASH中的数据[]。PC28F00BP30EF的主要设备控制信号如图5所示。
图5 NORFLASH管脚示意图
其中,A表示27位地址总线;DQ为16位设备数据总线;CLK、CE、ADV、OE、WE、WP和WAIT分别表示同步时钟输入、片选、地址锁存、输出使能、写使能、写保护和输出数据有效信号。PC28F00BP30EF提供了完备的命令用户接口(CUI),用户只需将操作命令写入CUI,由片上写状态机(WSM)对所有的擦除和编程算法进行处理,即可对设备进行擦除以及读写操作。
表1给出了部分操作命令编码及其总线周期,其中,SRD表示状态寄存器(SR)的数据,用于显示设备当前的忙或准备状态,以及用户操作遇到的错误信息等;N表示缓冲编程模式中缓冲器的大小,N≤512 Byte。
表1 部分操作命令编码及其总线周期
根据NORFLASH读写时序进行状态机设计的关键在于,对各个操作信号的保持建立时间进行有效的控制。NORFLASH的写时序如图6所示,WE#在上升沿锁存地址和数据。WE#有效的最小保持时间为50 ns,到WE#升高,数据和地址总线需要至少50 ns的建立时间。异步页读时序如图7所示,ADV#锁存页初始地址所需的保持时间至少10 ns,地址锁存后,数据写入片内缓冲区最多需要105 ns,之后累加变化地址后4位即可依次读取16 Byte数据。
图6 NORFLASH写入时序
图7 NORFLASH异步页读时序
根据上文对于SLAVE FIFO和NORFLASH操作时序的描述,本文基于Verilog HDL硬件描述语言[9],采用时序状态机实现了大容量调制数据的存储和传输,如图8所示。由于对NORFLASH的操作,需要频繁地向CUI写入命令,故将状态机中所有需要向CUI写入命令的状态复用为“WRFSH”状态,以达到简化设计和提高状态机效率的目的。同样,用于读取SR来判断设备状态的“RDSR”状态也采用了相同的设计方法。
状态机工作流程分为读和写两个进程。在读NORFLASH进程中。首先,在“RDFSH”状态中向CUI写入读阵列命令(0XFF);然后,状态机在“LATCHADDR”状态中锁存页初始地址;最终由“OUTPUTDATA”状态输出读取数据。在写NORFLASH进程中。首先,在“UNLOCK”状态中对将要进行擦写的存储空间进行解锁操作,需要注意的是,此时WP#需要保持无效状态;然后,在“ERASE”状态中向CUI写入擦除命令(0X20)和擦除确认命令(0XD0),接下来,在“RDSR”状态中判断擦除是否成功,若擦除成功,由“EP2STATE”状态判断SLAVE FIFO的状态标志;最终,由“BUFFERPRO”状态和“WRBUFFER”状态配合,将SLAVE FIFO中的数据采用缓冲编程的方式写入NORFLASH中,至此整个擦写过程结束。在擦除和缓冲编程的命令写入CUI后,NORFLASH内部状态机进行相关算法的操作,文中只需检测SR即可判断擦除或编程是否成功或失败,若失败则需根据SR的值判断失败的原因,并反馈给系统。
图8 状态机状态转移图
由于系统需要,设计将每片NORFLASH进行了存储空间的划分,每片划分为16段。因此,本文设计的控制模块除了SLAVE FIFO和NORFLASH的地址、控制和数据接口,还给顶层模块预留了段地址输入接口、操作模式选择输入接口,方便顶层模块对NORFLASH和SLAVE FIFO之间的数据传输进行控制,如图所示,大幅提高了系统的灵活性和可操作性。
4 测试与分析
将工程文件添加至Xilinx ISE 14.4中进行综合实现,并生成Bit文件下载至FPGA,利用在线调试工具ChipScope进行信号的抓取验证,其中采样时钟采用CY7C68053输出的48 MHz时钟。本文进行了两种数据传输模式的测试:NORFLASH的写入测试,如图9所示;NORFLASH数据的读取验证,如图10所示。
图9 NORFLASH的写入测试结果
图10 NORFLASH存储数据的读取验证
在图9数据写入过程中,状态机向CUI写入0XE8和01FF后,NORFLASH进入缓冲编程模式,状态机控制SLOE(SLRD)信号拉低,读取SLAVE FIFO中的数据,配合WE#信号,锁存地址和数据,缓冲区被写满(512 Byte)后,写入缓冲编程确认命令0XD0,NORFLASH内部状态机开始运行编程算法将512 Byte的数据写入NORFLASH中,状态机检测SR的值判断编程是否结束。如此反复,直至NORFLASH被写满。
在状态机的设计中,采用计数器对保持时间和建立时间进行控制。本设计中,WE#信号有效的保持时间、以及数据和地址到WE#信号上升沿的保持时间,均为3个时钟周期62.5 ns,大于NORFLASH所需的至少50 ns,从图中可看出,建立时间和保持时间均满足要求,数据被正常写入。
在图10数据读出过程中,状态机控制ADV#锁存页初始地址后,地址依次累加输出16字页数据,同时控制SLWR信号,将读出的数据写入SLAVE FIFO中。如此反复,直至读取完NORFLASH所有地址的数据。
在异步按页读取的过程中,ADV#有效时的保持时间至少要为10 ns,才能锁存地址;在地址锁存后,页数据在NORFLASH中被读出并缓存至内部缓冲区,该过程最长需要105 ns。从图中可看出,ADV#的保持时间显然大于10 ns,为保证设计的可靠性,在本设计的状态机中将等待页数据缓冲完毕的时间设置为6个时钟周期125 ns。从图中可看出,数据顺利读出。
从图9和图10中可看出,控制信号完全符合SLAVE FIFO和NORFLASH对时序的要求。经过多次测试,NORFLASH的写入速度可达36.5 MB/min,读出速度160 MB/min,传输速率完全符合系统需求。上位机将读取的数据与源数据进行比对,比对结果数据完全一致,表明状态机工作正常且稳定可靠。
5 结束语
根据实际的工程需要,基于NORFLASH解决了在AD9910并行调制模式中,大容量相位、频率和幅度调制数据的存储和传输问题。通过对SLAVE FIFO和NORFLASH的介绍,基于FPGA设计了控制SLAVE FIFO和NORFLASH数据双向传输的状态机,经过多次测试状态机工作稳定可靠。测试结果证明了该数据传输状态机的可行性,且因其用户接口简单,具有较好的可移植性,目前已应用于工程实践中。
[1] 田海山.微型化雷达信号产生、处理与存储技术研究[D].长沙:国防科学技术大学,2011.
[2] 黄小东.高速波形信号发生器的研究与实现[D].成都:电子科技大学,2011.
[3] 杨剑,张月,宿绍莹,等.高分辨宽带雷达高速数据大容量存储系统设计[J].计算机工程与应用,2010,46(16):23-26.
[4] 马宇.SAR数据存储系统的设计与实现[D].长沙:国防科学技术大学,2010.
[5]Analog Devices.AD9910 datasheet[M].USA:Analog Devices,2007.
[6]Cypress Semiconductor.CY7C68053 MoBL-USBTMFX2LP18 USB microcontroller[M].USA:Cypress Semiconductor,2011.
[7]Cypress Semiconductor.MoBL-USB(TM)FX2LP18 technical reference manual[M].USA:Cypress Semiconductor,2011.
[8]Micron.Numonyx ® AxcellTMP30-65nm Flash memory[M].USA:Micron,2012.
[9] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航天航空大学出版社,2008.