大容量数据存储(共8篇)
大容量数据存储 篇1
在现代雷达、电子侦查和通信领域中,不可避免地会遇到大容量数据的存储和传输问题[1,2,3,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#编写的上位机。
2SLAVEFIFO的FPGA接口设计
CY7C68053外部集成 的配置灵 活的大端 点FIFO[],如图2所示,能使数据在片上和片外高速传输,其具有以下特性: 利用CY7C68053 CPU的外部数据通路,直接与外部主控逻辑连接; “块FIFO”的结构保证了USB和FIFO之间数据的瞬时传输或提交; 具有多功能接口,SLAVE FIFO接口或GPIF接口、异步或同步时钟接口、外部或内部时钟等[]。这些端点FIFO可根据数据传输带宽的需要进行不同的配置,如双缓冲、三缓冲和四缓冲等。其中,双缓冲是指一个缓冲区用于USB数据的缓冲,与此同时,外部控制器可操作同一端点的另一个缓冲区。
图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为时钟接口。
根据系统需求,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可同时使能,完成数据的读出。
3NORFLASH控制器的设计与实现
P30系列是Micron公司最新 一代的65纳米FLASH芯片,有64 Mbit到2 Gbit的可选存储容 量。 在本设计中,使用了P30系列中的PC28F00BP30EF芯片,存储容量2 Gbit,采用512 Byte缓冲编程模式对NORFLASH进行写入 操作,按页读取 的模式读 取NORFLASH中的数据[]。PC28F00BP30EF的主要设备控制信号如图5所示。
其中,A表示27位地址总线; DQ为16位设备数据总线; CLK、CE、ADV、OE、WE、WP和WAIT分别表示同步时钟输入、片选、地址锁存、输出使能、写使能、写保护和输出数据有效信号。PC28F00BP30EF提供了完备的命令用户接口( CUI) ,用户只需将操作命令写入CUI,由片上写状态机( WSM) 对所有的擦除和编程算法进行处理,即可对设备进行擦除以及读写操作。
表1给出了部分操作命令编码及其总线周期,其中,SRD表示状态寄存器( SR) 的数据,用于显示设备当前的忙或准备状态,以及用户操作遇到的错误信息等; N表示缓冲编程模式中缓冲器的大小,N≤512 Byte。
根据NORFLASH读写时序进行状态机设计的关键在于,对各个操作信号的保持建立时间进行有效的控制。NORFLASH的写时序如图6所示,WE#在上升沿锁存地址和数据。WE # 有效的最小保持时间为50 ns,到WE#升高,数据和地址总线需要至少50 ns的建立时间。异步页读时序如图7所示,ADV#锁存页初始地址所需的保持时间至少10 ns,地址锁存后,数据写入片内缓冲区最多需要105 ns,之后累加变化地址后4位即可依次读取16 Byte数据。
根据上文对于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的值判断失败的原因,并反馈给系统。
由于系统需要,设计将每片NORFLASH进行了存储空间的划分,每片划分为16段。因此,本文设计的控制模块除了SLAVE FIFO和NORFLASH的地址、控制和数据接口,还给顶层模块预留了段地址输入接口、 操作模式选择输入接口,方便顶层模块对NORFLASH和SLAVE FIFO之间的数据传输进行控制,如图所示, 大幅提高了系统的灵活性和可操作性。
4测试与分析
将工程文件添加至Xilinx ISE 14. 4中进行综合实现,并生成Bit文件下载至FPGA,利用在线调试工具Chip Scope进行信号的抓 取验证,其中采样时 钟采用CY7C68053输出的48 MHz时钟。本文进行了两种数据传输模式的测试: NORFLASH的写入测试,如图9所示; NORFLASH数据的读取验证,如图10所示。
在图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数据双向传输的状态机,经过多次测试状态机工作稳定可靠。测试结果证明了该数据传输状态机的可行性,且因其用户接口简单,具有较好的可移植性,目前已应用于工程实践中。
摘要:针对在高速调制波形产生过程中大容量调制数据传输和存储的问题,提出了基于Virtex-6 FPGA采用USB设备和NORFLASH进行大容量数据传输与存储的设计方案。采用Verilog HDL硬件描述语言设计了SLAVE FIFO控制接口,以及NORFLASH擦写、读取控制器,实现了USB设备与NORFLASH之间6 Gbits的大容量数据的存储和回放验证。硬件测试结果表明,所设计的控制器工作稳定可靠,且具有较好的可移植性。
关键词:NORFLASH,SLAVE FIFO,并行调制模式,状态机
大容量数据存储 篇2
存储容量
,
大容量数据存储 篇3
关键词:固态存储,FPGA,FLASH,ECC
随着合成孔径雷达SAR(Synthetic Aperture Radar)技术向高分辨率、多极化、多波束、三维地形测绘、宽测绘带、多频段、多工作模式等方向发展,SAR信息获取量迅速增加。SAR数据量的增长以及其对数据存储设备可靠性要求的增加都迫切要求改善现在数据存储系统的性能。
固态记录器SSR(Solid State Recorder),作为一种全新的高速海量数据存储设备,以其存储密度大、读写速度快、抗震能力强、可靠性高、噪声小、耐高温,体积小、重量轻等优点,得到了迅猛的发展。早在20世纪90年代中期,Firechild公司就曾成功将SSR应用于F—16上[1]。加拿大新一代合成孔径雷达Radarsat—2使用的存储设备同样为固态记录器[2]。随着半导体存贮器密度的日益提高,固态大容量数据存储器必会逐渐成为各个领域特别是航天领域的数据记录器的主流方案[3]。
固态记录器使用Nand Flash作为存储介质,摒弃了传统磁盘的缺点,但受限于Nand Flash的制作工艺,在Nand Flash的生命周期中会出现错“位”问题,即在Nand Flash的存储单元“页”中有一个或几个“bit”出错。由于这种错误的出现概率较低,在一般固态记录器设计中,均不采用纠错处理,但在某些应用中,如果错“位”发生在某个敏感数据上,这个小小的故障可能导致严重的后果。因此在大容量存储时,必须采用数据纠错算法,以确保存储器的可靠性。传统的数据纠错编码有循环冗余码,Reed-Solomon纠错码等,以上算法虽然同样具有较好的纠错性能,但是在FPGA实现时比较复杂,占用资源较多,甚至会影响高速数据的记录速度。为解决高速大容量数据记录的纠错问题,本文在FPGA上成功实现了一种专用的ECC校验算法,该算法资源占用少,可以直接嵌入到固态存储设备已有的FPGA程序中,运行速度高,完全不影响高速数据的记录,可以实现1bit/512B的纠错能力(纠错能力可根据要求进一步提高),为大容量数据存储器的可靠运行提供了重要保障,具有重大的实际应用价值。
1 ECC系统整体框架
本设计使用的Nand Flash芯片为K9F1208X0C系列[4],由于其读写操作均是基于“页”进行的,为便于理解,下面给出其基本操作单元“页”的结构示意图,如图 1所示芯片内的存储基本单元“页”可分为主存储区间和备用存储区间两部分,其中备用区间可以根据需要进行自定义使用。固态存储系统纠错处理整体工作流程图如图 2所示。
由图2可见,整个ECC系统的数据处理过程包括以下四个步骤:
(1)生成写校验码:在写操作时,针对写入的数据生成相应的ECC码Code1,并将有效数据与Code1分别写入主区间以及备用区间;
(2)生成读校验码:在读取操作时,读取主区间以及备用区间的数据;在读取数据同时生成有效数据对应的ECC码Code2;
(3)检验码处理:将从备用区间读取的数据Code1与新生成ECC码Code2,进行异或处理;
(4)纠错处理:根据异或结果,对输出数据进行纠错处理。
K9F1208X0C芯片基本的操作时序可以参考芯片手册或相关论文[1,3,4],在此不再赘述,下文将详细介绍ECC校验码的生成算法及其实现数据的纠错处理方法。
2 ECC校验码生成
为实现存储数据的错“位”纠正,需要针对存储数据的行和列分别进行处理,生成相应的校验码,以实现对错“位”位置的精确定位。
2.1 ECC列校验码生成流程
ECC的列校验码生成示意图如图 3所示:图中存储矩阵的512行分别对应存储芯片每页的512字节有效数据,矩阵列对应每个数据的比特值。
将图3中列校验码生成示意图用数学表达式表示为:
这里⊕表示“位异或”操作,根据图示以及表达式,以P1r与P′1的求解为例说明列校验码的生成操作。P1r为将图 3中P1对应的所有带颜色的位进行异或操作的结果,在图 3中P1对应的所有带颜色的位共有512行4列。同样P1r ′为将图 3中P′1对应的所有不带颜色的位进行异或操作的结果,在图 3中P′1对应的所有不带颜色的位共有512行4列。同样操作,可以得到 P2r,P2r ′,P4r,P4r ′的计算结果, ECC列校验最终结果生成6比特数据,其中每一比特的生成都需要N×4 b的数据,其中的N为ECC校验的数据长度,本文选用512 B(在实际处理时,可以根据需要进行选择)。
2.2 ECC行校验码生成流程
ECC的行校验码生成示意图如图 4所示:
将图4中行校验码生成示意图用数学表达式表示为:
文中仅给出P8r与P′8r的表达式,其余项的计算表达式与公式类似。
根据图 4图示以及表达式,以P8r与P′8r的求解为例说明行校验码的生成操作。P8r为将图 4中P8所对应的所有带颜色的位全部进行异或操作的结果,P′8r为将图 4中P′8所对应的所有不带颜色的位全部进行异或操作的结果。同理可以得到P16r,P′16r,P32r,P′32r,P64r,P′64r,P128r,P′128r,P256r,P′256r,P512r,P′512r,P1024r,P′1024r,P2048r,P′2048r对应的计算结果。ECC行校验最终结果生成16 b数据,其中每一比特的生成都需要N×4比特的数据,其中的N为ECC校验的数据长度,文中N为512 B。
将生成的ECC行校验码以及列校验码,按照表 1的格式进行排列,文中生成的校验码在排列之后对应3个字节的数据。
3 ECC的纠错处理
在数据记录时,根据上一节所述检验码生成算法,将需要记录的有效数据每512 B生成一个对应的ECC校验码Code1,然后将有效数据以及对应的ECC校验码Code1分别保存到Flash“页”的主区间以及备用区间内。进行数据回放时,将主区间的有效数据与备用区间校验数据全部读出,在读取数据的过程中,针对读出的有效数据,按照前面所述的步骤,每512 b重新生成一个新ECC校验码Code2。
将从备用区间中读出的原ECC校验码Code1与新ECC校验码Code2,按位进行异或处理,得到24 b的处理结果,结果会出现以下几种情况见表 2:
若异或结果为0,则表示不存在错误,若异或结果对应的二进制码存在12 b为1,表示存储的数据存在一个比特的错误,且该错误可以纠正,回放数据出现错误的位置可以通过ECC校验码中的P2048rP1024rP512rP256rP128rP64rP32rP16rP8rP4rP2rP1r给出,其中P2048rP1024rP512rP256rP128rP64rP32rP16rP8r表示出错数据对应的行,P4rP2rP1r表示出错数据对应的列。其他情况均表示出现了无法纠正的错误,需要将该页所在的块标识为坏块,在下次进行存储操作时,跳过该存储块进行记录。
4 FPGA实现结果分析
本设计在ISE9.2环境中,选用Xilinx公司Virtex—5系列的高性能FPGA芯片XC5VLX110T[5],以及三星公司的NAND Flash芯片K9F1208X0C[4]进行验证工作,验证时写入芯片的数据为循环数据,每个循环数据的长度为512 B。写入数据为1,0,1,2,3,4,5,…,255,0,1,2,3,4,5,……,254。
下面给出验证实验说明,在写入测试数据的同时,使用ECC校验码生成算法程序生成每组数据的ECC校验码Code1,将数据写入Flash芯片。由于错“位”现象出现概率较低,为验证程序,在数据回放时,将第一组数据以及第三组数据中的有效数据设置1比特的错误位,即一组回放数据变为0,0,1,2,3,4,5…255,0,1,2,3,4,5,…,254,第二组回放数据没有发生错误,数据不变,第三组回放数据变为1,1,1,2,3,4,5…255,0,1,2,3,4,5,…,254。下面给出使用ChipScope获取的硬件实际运行结果截图。
图5为截取的实际运行结果总图,图5中共三个循环的数据。图中有四个信号,其中信号data_o_temp1对应于从Flash中回放的数据,而data_flag_o_tmp为data_o_temp1的使能信号,该信号为高时,对应的data_o_temp1信号有效;data_o是纠错处理之后输出的数据,data_flag_o为data_o的使能信号,该信号为高时,输出数据有效。错误!未找到引用源。给出每组数据放大示意图,图中信号意义与图 5所示信号意义一致,其中第一数据组在回放时第一个字节数据发生一位错误,数据由“1”变为“0”,经过纠错处理,将“0”纠正为“1”。第二组数据没有发生错误,输出结果仍为正确数据。第三组数据在回放时第二个字节数据发生一位错误,数据由“0”变为“1”,经过纠错处理,将“1”纠正为“0”,最终得到正确结果。
2 结论
实际运行结果表明,采用本设计的ECC纠错处理方法,可以纠正数据中出现的单比特错误。由于本设计使用verilog[6] 实现,可重复利用,工程应用中将本设计应用到单片容量为4GB,页大小为4096的Nand Flash芯片K9WBG08U1M[7]上同样实现了纠错处理,该纠错算法占用FPGA资源少,运行速度高,不影响高速数据的记录,为高速大容量固态存储设备的可靠运行提供了重要保障。
参考文献
[1]刘瑞,黄鲁,陈楠.基于Flash的高速大容量固态存储系统设计.测控技术,2009;28(4):10—14
[2]洪文,胡东辉,吴一戎,等.合成孔径雷达成像——算法与实现.北京:电子工业出版社,2007
[3]韩茜,罗丰,吴顺君.高速大容量固态存储器的设计.雷达科学技术,2005;3(2):110—114,118
[4]Samsung Electronics,K9F1208X0C Data Sheet http://www.sam-sung.com/global/business/semiconductor/productInfo.do-fmly-id=158&partnum=K9F1208U0C&xFmly-id=157.2008
[5]USA Xilinx Inc,Xilinx Virtex-5User Guide.http://www.xilinx.com/support/documentation/user-guides/ug190.pdf.2008
[6]夏宇闻.Verilog数字系统设计教程.北京:北京航空航天大学出版社,2003
高速大容量固态存储系统的设计 篇4
高分辨率的合成孔径雷达(SyntheticAperture Radar,SAR)拥有很大的输出数据,数据率上限高达2.858Gb/s。作为与之配套的数传系统是无法实时下传的。为解决大数据率与数据下传带宽有限的矛盾,系统在设计上采用数据缓存的方式,在数据形成分机与数传设备之间,加入一个大容量数据缓存设备,如图1所示。数据缓存设备以高数据率接收来自数据采集与形成的雷达回波数据,将数据进行缓存,并以数传设备能够接受的低数据率将缓存的雷达回波数据传送给数传设备。
SAR成像时间与成像数据下传时间不相等,成像数据下传时间要远远大于SAR成像时间,因此SAR系统工作在一种间歇成像状态,成一段时间(比如3 min)的像后,发射及接收通道停止工作,只让数据缓存设备工作以便将缓存的数据继续传送给数传设备。上一次成像产生的全部数据传送完后,才能开始下一次成像过程。
因此要求的技术指标如下:
(1)存储容量64 GBytes;
(2)存储区输入速率大于2.858 Gb/s;
(3)存储区输出速率大于1.8 Gb/s;
(4)接口标准:Aurora 接口。
基于以上原因,作者采用的缓存芯片为3D-Plus公司生产的型号为MMDD08102408ST5 DDR(Double Data Rate) SDRAM,其容量为1 GByte,缓存阵列总共由64片DDR组成,构成64 GByte的总容量。整个缓存阵列由4块PCB实现,每块PCB完成16 GByte的缓存容量。缓存阵列控制模块采用一块Xilinx公司的型号为XC5VLX330t FPGA完成与数据形成及数传设备的接口及读写数据的交换,接收来自数据形成模块的高数据率的数据流,将数据流进行分发控制,写入存储阵列的各个存储芯片,同时顺序读取缓存的数据,以较低的速率将数据发送给数传设备。
1 大容量固态存储器系统设计
大容量固态存储器的系统框图如图2所示。处于中间的主控制FPGA接收来自数传设备的数据,同时向各个PCB板分发数据。每块PCB板上都有一块FPGA,负责接收来自主控制FPGA的数据,同时向本PCB板上的DDR SDRAM发送数据。用Aurora接口将缓存控制模块上的FPGA与缓存阵列上FPGA连接起来,实现各PCB模块间的高速互联。
缓存阵列的每块缓存板的设计如图3所示。采用一块Xilinx公司生产的Virtex 5 系列FPGA芯片,控制16片缓存芯片的读写,在存储深度方向采用16片并联,,以144位宽度写入DDR,满足2×200 M×144=56.25 Gb/s的最高写入速率要求(DDR芯片的写入速率最高是200 MHz)。每块缓存板的读写接口各由一个双工的Aurora IP核负责与主控FPGA收发数据。控制单元接收来自Aurora的数据,存储在DDR SDRAM中。因为Aurora与控制单元分别属于不同的时钟域,所以要在Aurora与控制单元中间加入异步FIFO,用以同步不同时钟域间的数据。以下具体介绍各个模块的设计。
1.1 Aurora
Aurora是Xilinx开发的串口协议,最高速度可以高达100 Gb/s。协议规定了物理层和链路层,所以可以除了作为一种独立的协议传输数据以外,还可以传输其他标准的协议:如TCP/IP和Ethernet等。具有很好的扩展性。
在Xilinx生产的Virtex 5系列的FPGA中有Aurora的软核,该IP核利用FPGA里面集成的Rocket IO硬核,可以轻松实现Aurora协议。下面简要介绍设计中所用到的功能。
Aurora核收发数据可以选择两种模式:帧(Frame Interface)模式和数据流(Streaming Interface)模式。其中选择帧模式时还可以选择流控制(Flow Control)接口,方便在板级之间传递握手信号以及控制命令,而数据流模式只有单一的传递数据功能。所以设计中采用帧模式。帧模式的用户接口如图4所示。
数据发送接收具体过程以及接口使用可以参见Aurora IP核用户使用手册。在使用时应当该注意以下几点:
(1)正确设置Loopback接口。Loopback接口是用于环路自测试的。在正常使用时应该设置成000,保证Aurora处于正常模式(Normal Model)。
(2)Aurora共有两个复位接口:PMA_INIT和RESET,PMA_INIT同时复位Aurora上层控制单元以及Rocket IO硬核,在第一次使用时必须复位PMA_INIT,同时应加独立的时钟用以对PMA_INIT去抖动。RESET只对Aurora的上层控制单元进行复位,而不对Rocket IO硬核进行复位。
(3)USERCLK的频率。一般情况下Aurora接收端还要外接异步FIFO,所以必须确定USERCLK的频率以决定FIFO的深度。但是Aurora用户手册并没有详细说明USERCLK的频率。通过查找Rocket IO数据手册以及Aurora IP的源代码,可以发现USERCLK的频率是TX_OUT_CLK频率的二分频,而TX_OUT_CLK的频率在Rocket IO进行8 B/10 B编码情况下是数据速率/10,所以USERCLK的频率是数据速率/20。在本设计中,写Aurora的有效数据率是2 848 Mb/s,所以弄速率设置为1.74 Gb/s,共有两个弄;读Aurora的有效数据率为1.8 Gb/s,所以弄速率设置为2.25 Gb/s,一个弄。
1.2 缓存板的控制单元
缓存板的控制单元主要由Xilinx控制DDR的软核MIG2.0以及一个可以使DDR SDRAM进入自刷新以退出自刷新直到进入激活状态的模块组成。
MIG2.0是Xilinx提供的控制DDR SDRAM软核,详细使用说明可以参见MIG2.0用户手册。使用时,MIG2.0每次只控制缓存阵列的四分之一,即每个DDR SDRAM元件的四分之一,在写数据时候,依次对各个元件每个组成部分的四分之一初始化,并写入数据,写完数据的部分进入自刷新状态,保存数据;读的时候,依次使各元件的四分之一退出自刷新状态,读取数据。MIG2.0无法支持自刷新模式,无法支持DDR SDRAM中深度存储,所以需要额外可以控制DDR SDRAM进入自刷新状态的模块。本设计中采用的DDR SDRAM其内部块共用命令通道,数据通道,数据选通通道,而片选信号,时钟使能信号,差分时钟信号独享,所以在写完MMDD08102408ST5 DDR SDRAM中八片DDR SDRAM中的两片时,应使这两片处于自刷新状态,即这两片DDR SDRAM对除了时钟使能信号以外的信号不作响应,并且能够保持数据。进入自刷新状态时,应先使目标DDR SDRAM置于空闲状态(IDLE State),即先施加一个预充电(PRECHARGE)命令。然后施加一个自刷新命令即可。退出自刷新状态则比较繁琐:首先在时钟使能有效前,适中必须稳定;其次在时钟使能有效后,必须在一段时间(tXSNR)内对DDR SDRAM施加空命令(NOP Command),以完成可能正在进行中的刷新,只有在这段时候过后才能对DDR SDRAM施加除了读命令以外的命令。因为在进入自刷新时候,DDR SDRAM内部的延迟锁定环(DLL)自动失效,而退出自刷新时自动生效,所以必须对DDR SDRAM的模式寄存器编程施加一个延迟锁定环的复位命令,在延迟锁定环复位以后,重新对模式寄存器编程使延迟锁定环解除复位。此时,才可以对DDR SDRAM施加其他命令。为了确保数据安全,模块对DDR SDRAM施加八个自动刷新命令,使该DDR SDRAM部分的下一次刷新时间延长到8×7.8 μs以后。然后对部分激活。此时,将DDR SDRAM的控制全转交给MIG2.0,用以读出数据。DDR SDRAM命令真值表可以查找JESD79C获取,在此不赘述。
2 总结
该大容量固态存储器在Xilinx公司的ISE9.2环境中采用五片Virtex 5系列的XV5VLX330t来实现,在Modelsim6.2b中对整个工程进行布局-布线后仿真(Post Place &Route Simulation)。仿真结果表明,在存储速度、容量上都满足了星载合成孔径雷达成像所需的要求。在速度要求愈高的发展趋势下,高速大容量的存储器将在各个领域都会有广泛的应用前景。目前本设计仍处在初期阶段,对数据的纠错编码以及在硬件上验证等问题尚待进一步研究。
参考文献
[1]Xilinx Virtex-5.User guide Virtex-5FPGArocket IO GTP transceiver user guide.USA Xilinx Inc.2008
[2]Xilinx Virtex-5.LogiCORE aurora v2.8user guide.USAXilinx Inc.2007
大容量数据存储 篇5
现需要设计一双通道高速大容量的固态存储器, 要求能实时存储速度为75MB/s的 I、Q两路图像数据, 且单路存储容量要达到64GB, 而现有的Flash存储器达不到以上要求。笔者将探讨用以克服Flash存储器缺点的一些关键技术, 并将给出该存储器的具体实现方案。
1 关键技术
1.1 存储器
存储系统的一个重要指标就是存储组件的访问速度。目前主流闪存分为NOR和NAND两种架构类型, NAND型闪存写入和擦除速度比NOR型快, 单元存储容量大, 且成本比NOR型低, 因此NAND型闪存在大容量高速图像数据存储上比NOR型更具有优势[1,2]。
SAMSUMG公司NAND闪存芯片K9WBG08U1M由16 384个Block组成, 每个Block分为64Page, 每Page有4 096B写入区和128B备用区, 单片芯片容量仅为4GB, 达不到该存储器的容量要求。采用Flash阵列总线并行技术, 可有效地解决这一矛盾。而该闪存芯片的典型编程时间为200μs, 最大编程时间为700μs, 最快页寄存器写入时间为50μs。由此可以算出一页的写入时间为 (200+50) μs~ (700+50) μs, 写入速度为5.4 ~16.4MB/s。因此可以看出影响写入速度的最大因素就是编程时间, 而时下流行的多级流水线和双平面同时编程技术可有效地避开编程时间, 明显地提升其存储速度。
1.2 Flash阵列并行
本设计采用4×4 Flash阵列的形式, 以每4片K9WBG08U1M组成一个8位宽的闪存子模块。它们共用相同的控制命令, 因此可以将这子模块看作一个整体。整个阵列可看做由4个存储容量为16GByte的闪存组成, 该技术为实现大容量存储提供了可能。
1.3 流水线
通过对Flash页面编程工作原理的研究, 发现芯片内部的自动编程过程由芯片自动完成。尽管这段时间不能接收新的写入命令, 但也不需要外部干预。于是就可以利用这一段空闲的时间, 借鉴流水线技术, 使多片Flash读写操作进行流水线运作[3]。这样在任一时间片上, 总有若干操作在同时进行, 实现了时间在片上的复用, 从而整体读写Flash的速度得到了很大的提高。
1.4 双平面同时编程
对于有些新出的Nand Flash, 支持同时对多个平面 (Plane) 进行编程。K9WBG08U1M支持同时对2个Plane进行编程。本设计采用的这种编程技术为待两页的数据都写入到Flash的缓存区后, 再同时将缓存区的数据编程存入到Flash里。可以看出, 每写入两页的数据, 就可以节省出一个编程时间, 极大地提高了写入的速度。不过要注意的是, 只能对Plane0和Plane1或者Plane2和Plane3同时编程, 而不支持Plane0和Plane2同时编程。
1.5 坏块信息列表
Nand Flash中, 一个块中含有1个或多个位是坏的, 就称其为坏块。坏块的稳定性是无法保证的, 不能保证写入的数据是对的, 或者写入对了, 读出来也不一定对。而正常的块, 肯定是写入读出都是正常的。考虑到要保证存储数据的完整和正确, 而识别出坏块并且跳过坏块来进行读写擦除操作就非常必要。为了提高存储速度, 在FPGA内部建立RAM来专门用于存储校验出来的坏块的地址列表。在进行读写擦除操作时只需将当前块地址与RAM内部的地址信息进行对比, 如果相同就跳过该块。这样就能大大提高效率。
2 系统方案设计
2.1 系统原理
根据该存储器的设计要求, 要求实现对图1中所示的I、Q两路图像数据能以75MB/s的写入速度存入记录器, 并且每路的存储容量为64GB。基于以上提出的关键技术, 设计了该存储系统的原理图。从图1看出, 本设计采用了32片K9WBG08U1M搭建成2个4×4的Flash阵列, 来分别存储两路图像数据。在每个Flash阵列里, 每4片组成一组8位宽的闪存子模块, 它们共用相同的控制命令, 而在4组子模块之间又采用4级流水来完成流水线操作。
图2为FPGA内部原理的一个示意图, 包含接口控制、Fifo缓存、Flash控制和无效块信息管理4个模块。整个FPGA会根据上位机给出的命令, 对外部的Flash阵列进行读、写及擦除等相应的操作。
2.2 接口控制模块
该模块主要是控制FPGA外部的DS92LV18芯片, 将其输入的18位数据转换成16位, 并存入缓存Fifo;或是将从缓存Fifo里读出来的8位数据转换成18位的数据输出给外部的DS92LV18芯片。另外, 该模块还对从外部进入FPGA的控制命令, 如擦除命令和读写命令等信号进行消抖, 再将消抖后的控制信号发送给Flash控制模块, 以避免Flash出现误操作现象。与此同时, 接口控制模块会产生一个计数信号来控制4组Flash进行有条不紊的流水线操作。
2.3 Fifo缓存模块
该模块由8个异步Fifo缓存组成。图2中, 每个Flash控制模块各对应一个深度为2KB和4KB的Fifo缓存。其中4KB的Fifo用于缓存写入Flash的数据信息, 位宽为16位;而位宽为8位、深度为2KB的 Fifo则作为读取Flash的数据缓存。该模块配合接口控制模块能实现对高速数据进行分流降速, 为流水线操作Flash阵列做好了准备。
2.4 Flash控制模块
Flash控制模块主要实现功能:存储器一上电, 该模块内部就开始检查对应Flash的无效块, 并建立无效块地址信息列表。在接收到由接口控制模块发出的读、写和擦除Flash控制命令后, 通过运行该模块内相应的进程, 实现对Flash的操作。该模块内部状态的具体流程可详见图3。
2.5 无效块信息管理模块
本设计中采用RAM来存取Flash的无效块地址信息列表, 如图2所示。该模块由4个1KB大小的RAM构成, 并且各对应一组Flash。在每次设备上电时, 先进行无效块校验, 并将无效块的块地址信息存入该组Flash对应的RAM。在擦除、读和写Flash时, 先将当前块地址与RAM中的无效块地址进行比对, 如果地址一样, 则跳到下一块, 再将RAM中的下一个地址与之进行比对, 如果不一样, 则对该块进行读、写或擦除等相应操作。采用这个方法, 不仅能有效地避开无效块, 而且可以大大缩短各种操作的时间, 从而提高整体的工作效率。
2.6 对方案的可行性分析
该方案主要实现的目标是完成将两路75 MB/s的图像数据顺利地写入Flash。由于采取了4×4的Flash阵列和4级流水的操作模式, 因此写入每组Flash的速度就分流降速到18.75MB/s。但从前面可以知道, 如果用普通的页编程方式, 写入速度最高只能达到16.40MB/s, 无法满足需要。方案中采取了双平面的编程方式, 即连续写入两页数据才进行一次真正的页编程, 这样就可以节约一次的编程时间 (200~700μs) 。
K9WBG08U1M芯片一页由4 096B的主区间及128B的备用区间构成。如果把两页的数据写入一组Flash , 则需要的时间是8 192B÷/18.75MB/s = 436.91μs。那4组Flash写完一遍的时间就为436.91×4=1 747.64μs, 远远大于最大的的页编程时间700μs, 也就是说在4组Flash写完一遍后, 第一组的自动编程已经完成, 可以持续不断地进行下一轮存储。
3 实验结果及分析
图4是采用ISE7.1中Chipscope获取的硬件实际运行结果的截图。图中有4个信号, 其中信号LVDSDATA对应从高速数据总线进入FPGA1的I路数据, 而wrclk是I路数据的时钟信号, 频率为44MHz;信号FLASHDATA对应为LVDSDATA在4级流水分流降速后写入阵列中某组Flash的数据, rdclk则是FLASHDATA的匹配时钟信号, 频率为11MHz。从图中可以看出, 每来一个wrclk时钟信号, 就从高速数据总线进入FPGA1一个字的图像数据, 即写入速度达到了88MB/s。同理, 图中阵列里某组Flash的写入速度也达到了22MB/s。测试结果表明, 该系统能很好地满足本设计的要求。
4 结束语
笔者所采用的方案实现了对Flash写入速度的技术突破和存储容量的扩展, 以及对无效块的管理, 实现了对高速图像数据的存储, 现已成功应用于某高速大容量固态存储装置。
摘要:介绍了一种高速大容量存储系统的实现方案, 该系统以75MB/s的速度实时存储容量为64 GB的图像数据, 并可通过扩展F lash阵列满足更高速度和更大容量的存储要求。
关键词:高速大容量存储器,无效块管理,固态存储
参考文献
[1]高怡祯.基于闪存的星载大容量存储器的研究和实现[J].电子技术应用, 2003, 29 (8) :75~78.
[2]F ishellW G.Solid StateM emory in Recce System[C].SPIE, 1995, 2555:183~194.
大容量数据存储 篇6
1 USB主机系统硬件设计
嵌入式USB主机采用嵌入式CPU加上USB主机接口芯片构成。本系统采用的USB主机接口芯片是Cypress公司的一款遵从USB1.1协议的嵌入式USB Host/Slave芯片SL811HS。
该芯片的主要特点有:能通过硬件设置或软件设置的方法使该芯片工作在Host或Slave模式中;自动检测所接设备是高速还是低速设备;8bit双向数据总线;片上SIE、USB收发器;自动产生SOF令牌包, 以及自动生成令牌包、数据包中所需要的CRC5/CRC16数据;内部256Byte RAM, 支持乒乓操作;支持SUSPEND/RESUME、WAKE UP、LOW-POWER模式。
鉴于采用MCS-51内核, 且与AT89C52兼容的SM5964单片机内部有64K的flash和1K的SRAM, 为USB主机协议的实现提供了足够的代码空间和数据存储区。而且MCS-51内核单片机具有标准的并行总线结构, 方便与SL811HS通信。嵌入式USB主机CPU采用SM5964。
由于SL811HS的总线结构为数据总线和地址总线复用, SM5964单片机与SL811HS的连接需要一个地址锁存器, 本系统采用74HC573、SM5964及SL811HS连接电路, 如图1所示。
2USB主机系统软件体系
对于嵌入式系统来说, 一般USB主机仅配置一个USB设备, 而这些设备是低功耗支持Mass Storage的Flash存储器设备, 考虑到USB协议的复杂性, 用户在进行USB主机系统软件设计时, 可先侧重实现一部分功能, 而后再逐步实施和完善。USB主机协议的系统软件、Mass Storage类协议软件、FAT文件系统软件等3部分是整个USB主机系统的核心软件。
USB主控制器驱动程序 (Host Controller Driver HCD) 是USB软件协议栈中最底层部分, 是对USB主机控制器硬件和数据传输的一种抽象。HCD向下直接管理和检测主控制器硬件的各种行为, 向上则为USB核心驱动程序服务, HCD提供了一个软件接口, 使得各种USB主机控制器的硬件特性都被软件化, 并受核心驱动程序的调用和管理。USB核心驱动程序 (USB Driver, USBD) 是整个体系的中枢, 具有一系列机制来检测和管理USB系统的所有活动, 并向上通过管道机制和命令机制接受USB设备驱动程序和用户程序的各种请求命令和数据, 向下把处理好的各种数据发送给HCD, 实现上层的各种服务, 并最终与设备进行通信。
2.1嵌入式USB主机协议的软件设计
嵌入式USB主机主要实现USB设备的热插拔检测、设备重启、读取设备的各种描述符等USB1.1协议规范, 并实现USB mass storage类, 从而实现对U盘的读写操作, 主要内容有:①实现设备的热插拔检测 (如接入, 拔出) ;②创建文件和目录;③打开一个已经创建的文件和目录;④从文件中读取指定长度和指定位置的数据;⑤写数据到指定文件的指定地址;⑥列举目录下的文件和目录;⑦修改、复制、删除文件和目录;⑧查询U盘容量和剩余空间。
应用SL811HS对一个接入的USB设备的启动过程描述为:
1) SL811HS检测到有外部USB设备接入后对USB设备进行Reset操作, 同时检测是高速还是低速设备, 并设置好SL811HS中对应的寄存器位。
2) 通过0号端点读取该USB设备的描述符信息, 如厂商ID、产品ID、设备类、设备子类、设备协议, 选取对应的子程序。
3) SL811HS固件驱动程序对USB设备进行初始化:读取该USB设备的设备描述符, 为给设备指定地址, 读取给设备的配置描述符信息、接口描述符信息、断电描述符信息, 为该USB设备设置选择配置描述符。
4) 对USB设备的初始化完成后, 按照应用要求与该设备进行通信。本文的USB设备指U盘, 即初始化后, 对其进行磁盘操作, 完成数据的读写。
2.2Mass Storage类协议
在嵌入式系统中, 限于系统的性能和要求, 只需要支持几个特定的设备类型既可, 如USB Flash存储器的应用实例, USB主机需要支持的就是USB的Mass Storage类, Mass Storage类也就是大容量存储类, 主要为软磁盘接口、ATA接口、IDE接口硬盘及Flash存储器等设备建立的USB接口, 根据以上不同的数据存储载体接口构成了Mass Storage类的各种子类, 他们都有自己的规范, 并通过命令的形式实现各种功能。USB组织定义了大容量存储设备的类规范, 这个类规范包括4个独立的子类规范, 即:
1) USB Mass Storage Class Control Bulk Interrupt (CBI) Transport。
2) USB Mass Storage Class Bulk-Only Transport。
3) USB Mass Storage Class ATA Command Block。
4) USB Mass Storage Class UFI Command Specification。
前2个子规范定义了数据命令状态在USB上的传输方法, 后2个子规范则定义了存储介质的操作命令。在嵌入式USB主机系统中, 主要支持的设备是USB 闪存盘, 属于USB Mass Storage类设备。采用单比量Bulk Only的传输规范, 而子类采用UFI命令集。Mass Storage 类协议的实现就包含这两部分内容。
2.3FAT文件系统
大部分移动存储设备符合FAT文件系统的标准, 以文件的形式管理和存储数据, 所以需要建立一个精简的文件系统。整个文件系统通过Mass Storage的UFI命令与外设的磁盘建立联系, 实现建立FAT表、FDT表、查找文件、写文件和读文件等一系列功能。
3 结束语
USB为接口种类繁多的存储媒介与主机之间提供了方便可靠的连接。在嵌入式系统实现USB的主机功能, 从而实现了将USB移动存储设备应用到嵌入式这一领域。
参考文献
[1]肖踞雄.USB技术及应用[M].北京:清华大学出版社, 2003.
[2]石岳祥, 陈黎平, 周欣.基于USB的高宽带数据交互研究与实现[J].微型电脑应用, 2004, 20 (2) :49-53.
[3]萧世文.USB2.0硬件设计[M].北京:清华大学出版社, 2002.
[4]陈斯敏, 植涌.基于SL811的嵌入式USB主机设计[J].通信与信息技术, 2004 (12) :62-66.
大容量数据存储 篇7
随着信息技术的发展,在工业应用领域中需要采集存储的信息越来越多,相应地使用了各种数据采集装置,以获得被研究对象的相关信息。有时为了节约时间和计算机资源,一般并不是在当地立即处理这些信息数据,而是将数据传向后台由后台计算机进行处理、分析[1,2]。它们之间的数据传输媒介有有线传输、无线传输和硬盘等几种型式。当采集现场条件不允许时,比如地形复杂且离后台距离较远,有线、无线传输均不适用[1,2,3]。此外,有时周围环境会出现高湿度、高粉尘的恶劣情况,在这种条件下硬盘驱动器就难以可靠工作。为了满足实际生产中在特定条件下数据采集系统的要求,通过长时间的研究,设计出一种基于单片机超大容量存储器。该存储器容量可达4 Mb,基本可以满足复杂环境下信息采集存储的需要。
1 系统设计
基于单片机存储器存取数据的整体结构框图如图1所示。
图1中单片机是控制核心,存储器是控制对象,所有电路均为二者服务。由于存储器是4 Mb的,单片机的地址线已经不够用了,为了进行扩展,加入地址扩展电路[4]。为了加快存储器中的数据导入计算机,特加入了并机接口电路[5]。译码电路是为了增加I/O的口数量。
1.1 中央处理器(CPU)
采用W78E516B单片机,内部包含有:64 kB E2PROM,可省去最小系统[6],节省了并行口。
1.2 存储器
静态存储器的核心是存储器芯片,国内市场有2种类型[7,8,9]:
(1)芯片内部有自带电池的NVRAM。
(2)自己设计掉电保护电路使用普通的SRAM,DRAM。闪速存储器是一种非易失性存储器,即使切断供电电源以后也能保持所存储的数据,在不加电的情况下存储在内的信息可长达10年之久。闪速存储器可以随机寻址、访问时间很短,能抵抗强烈的碰撞,具有很强的环境适应性,可靠性好,平均无故障时间可达数百万小时。因此可以取代硬盘用于可移动设备、工业电子产品领域及恶劣环境中,其性能价格比很好。系统选用Atmel公司生产的闪速存储AT29C040芯片,它是国外新一代产品,容量可达4 Mb,采用分页管理方式,这种芯片的读/写与一般RAM有所不同。对芯片的基本操作如下:
读:
当CE和OE为低,WE为高时,由地址决定的存储器单元将数据输出;当CE或OE为高时,输出为高阻态。这种双线控制为设计者防止总线争用提供了灵活性。
字节装入:
用于输入要编程的128 B(一个扇区)数据或保护数据软件代码。当OE为高时,对WE加一负脉冲同时CE为低,或对CE加负脉冲同时WE为低时,将地址在CE或WE首先下降的一个下降沿锁定,数据由CE和WE首先上升的上升沿锁定。
编程:
芯片编程以扇区为单位。如果要改变扇区中的一个数据,扇区中所有的数据都要重新装入芯片,扇区中所有没有装入的字节在编程中都将被擦写为FFH。一旦一个扇区中的所有字节都装入芯片,芯片立即在编程周期中对其进行编程,在第一个字节装入后,后续字节以同样方式装入。每一个新装入字节的WE由高到低的跳变必须在前一个字节WE信号由低变高的150μs以内。如果在上个装入字节后150μs内没有检测到WE由高向低跳变,装入周期终止,内部编程周期开始。A7~A16确定扇区地址,在WE由高到低的变化中必须有效,A0~A6确定扇区内的字节地址,装入字节可以任意次序,不必顺序装入。
软件数据保护:
在AT29C040中应用了软件控制保护数据的功能,一旦对芯片使用软件保护,则在芯片编程之前必须按一定算法进行操作。软件保护可以由用户启动或停止。启动软件保护由一组3个编程命令组成,对特定地址送特定数据。启动软件保护以后每次对芯片编程都必须在编程周期前送相同的3个编程命令。一旦启动软件保护,它将一直保持直到执行停止命令,上电掉电不能改变软件保护的状态。因此在电源变化期间,为防止误编程,启动保护后,没有3 B命令的写操作无效,但在twc期间,读操作为有效操作。
硬件数据保护:
AT29C040硬件防止误编程通过以下途径:
如果电源电压低于3.8 V,禁止编程;
电源电压上电到达3.8 V以上后,芯片自动延时5 ms后才开始编程;
OE为低或CE为高或WE为高禁止编程周期;
如果WE或CE是小于15 ns的脉冲则不会启动编程周期。
1.3 接口电路设计
通过上述分析,设计大容量存储器的接口电路如图2所示。
该接口电路图为实际工程应用中的剪切图,其中单片机采用的是华邦W78E516B,由于8位单片机I/O口数量有限,在工程应用中一般不能满足要求(图中没连线的I/O口已被用作其他用途),因此采用74LS138进行了扩展。由于29C040为4 Mb的容量,所以单片机的16位数据线已不能满足要求,为了进行大容量存储器的扩展,采用8255来扩展存储器的地址线及访问的范围00000~7FFFF。在此基础上,可以设计存储容量从4 Mb到数Gb的存储器。
2 软件设计
为了增加数据存储的安全性,在读/写数据之前,要经过一定的指令才能进行读/写,其保护指令如图3、图4所示。如下程序是把存储器中的数据删除和对存储器进行写入数据的程序段。该部分程序已通过调试,是产品中程序的一部分。
3 结语
AT29C040具备在掉电情况下保存数据的功能,在实际应用中工作可靠,适合于便携式流动性环境下的数据采集系统,特别是在应用中对数据存储有要求且存储容量较大的场合更有其发挥的地方。本文中所述部分即为实际产品中的应用。
摘要:为解决采集系统中大量数据存储及数据传输问题,对数据采集系统中基于单片机大容量静态存储器的应用进行了刨析。闪速存储器采用Atmel公司的AT29C040,对系统的总体设计思想及闪速存储器的特点做了阐述。给出了基于8位单片机进行4 Mb高速存储器扩展的具体接口电路及其驱动程序。该系统具有在掉电情况下保存数据的功能,且具有存储数据容量大,体积小,功耗低,数据保存安全可靠等特点,适合于便携式流动性环境下的数据采集系统。
关键词:单片机,静态存储器,接口,数据采集
参考文献
[1]刘广敏,欧阳红晋,成巍.基于PIC单片机的CAN总线扩展技术[J].现代电子技术,2009,32(22):163-165.
[2]李若强.红外线数据通信应用[J].电力自动化设备,2003, 23(12):61-62.
[3]ISO.Road vehicles interchange of digital information controller area network(CAN) for high-speed communication [S].French:ISO,2003.
[4]孙炎辉,丁纪峰.基于FPGA的数据采集控制模块设计[J].现代电子技术,2009,32(22):189-191.
[5]窦振中.单片机外围器件实用手册(存储器分册)[M].北京:北京航空航天大学出版社,1998.
[6]余永权.Atmel FLASH单片机原理及应用[M].北京:电子工业出版社,1997.
[7]余辉龙,何昕,魏仲慧,等.应用NAND型闪存的高速大容量图像存储器[J].光学精密工程,2009,17(10):2548-2554.
[8]晏敏,龙小奇,章兢,等.开放式大容量NAND FLASH数据存储系统设计与实现[J].微电子学与计算机,2009(11): 13-16.
大容量数据存储 篇8
美国微芯(Microchip)公司推出的32位单片机PIC32具有256~512 kbyte的闪存和64~128 kbyte的SRAM存储器。由于其端口数目、内部定时器和中断源数目有限,单独使用PIC32作为存储系统的主控部分,会占用较多芯片资源,所以要实现大容量数据实时存储的目的,就需要进行Flash存储扩展。系统选用CPLD作为Flash存储扩展部分的控制核心,利用CPLD控制电路时序逻辑,并由单片机发出读、写及擦除指令,这样不仅可以使单片机和CPLD的功能得到充分发挥,还可以提高系统的稳定性以及整体性能并简化系统设计。试验结果表明,基于CPLD设计的PIC32单片机大容量存储扩展系统可以实现数据实时、准确的存储,具有传输速度快、使用方便的特点,在数据存储、采集、传输等领域具有广泛的应用前景。
1 总体设计思路
1.1 系统组成
存储系统由PIC32单片机、CPLD芯片和Flash闪存3部分组成。系统所要实现的功能是:数据采集部分将实时得到的数据信号传输到PIC32单片机,单片机向CPLD发出数据存储命令、地址和数据,再由CPLD控制将地址、数据实时存储于Flash闪存中。试验结束后,单片机发出读取指令,再经由CPLD控制部分从Flash中将数据读出并传输到单片机,通过计算机串口上传至计算机作进一步的分析处理。图1所示为系统组成框图。
CPLD内部采用模块化设计原则,分别建立PIC32接口模块、FIFO模块和Flash读写模块。FIFO由CPLD片内配置编写,这样既可以最大化地利用CPLD内部资源以实现系统微型化,又可以节省使用外部FIFO芯片的成本。CPLD选用Altera公司MAXII器件系列中的EPM240T100C5芯片,MAXII系列是一种非易失性、即用性可编程逻辑系列,具有CPLD中单个I/O管脚最低成本及最小功耗。Flash存储器选用三星公司的K9K8G08U0A。
1.2 闪存K9K8G08U0A介绍
Flash存储器具有非易失性、体积小、重量轻、抗震动、低功耗、高性能等特点[1]。目前,Flash的生产厂商主要有三星,Hynix,Micron,ST,东芝等[2]。本文选用的是三星公司的K9K8G08U0A芯片,它采用2.7~3.6 V供电,容量为1 Gbyte,硬件接口比较简单,命令、数据和地址经统一的I/O端口传输,可在25 ns内读出其数据寄存器中的单字节数据。图2为K9K8G08U0A阵列组织,存储区被分为8 192个相对独立的块,每块分为64页,每页2 112 byte,CPLD通过列地址和行地址对每一个字节进行访问。K9K8G08U0A内有一个1页(容量2 112 byte)的数据寄存器,向Flash写入数据先是向数据寄存器写入。K9K8G08U0A页编程(写)操作流程为:首先写入命令80H和地址,再写入数据,页编程结束需确认10H命令后再将寄存器中的数据写入存储区,待完成写入后,需读取寄存器以判断写入操作是否成功。若写入失败则为坏块。读操作流程:先写入命令00H以及要读取页的地址,再写命令30H,将行地址所指定的页中的数据传输至数据寄存器,进行ECC校验,校验成功后,则在写信号作用下从指定的列地址开始读至此页末尾,否则进行错误检查[3]。
2 硬件接口设计
存储控制系统硬件接口设计如图3所示。
各管脚功能如下:
1)MPMD[0...15]为数据、地址、命令输入输出总线;
2)MPMRD/WR为读写信号,读写选通合并为一根控制线;
3)MPMENB为读写控制线,负责决定何时执行读/写操作;
4)MPMAL为地址锁存使能,负责锁存数据的地址;
5)MPMCS为片选信号线,高电平有效;
6)MPMINT为外部中断源控制,在允许中断的情况下,将在每完成一个读或写周期时产生中断;
7)BUSY1和BUSY2为设备运行“忙”状态指示,在进行任何读或写操作时,除了操作的最后一个周期,BUSY位都被置高;
8)FLASHDT[0...15]为数据、地址和命令复用的8位输入输出总线;
9)WE为写使能信号,将命令、地址、数据锁存到芯片内部;
10)ALE为地址锁存使能信号,用于控制外部地址锁存到芯片内部;
11)CLE为命令锁存使能信号,用于控制外部命令锁存到芯片内部;
12)CE为片选信号,若没有检测到CE信号,则芯片保持待机模式;
13)RdEnable为读使能信号,允许输出数据至缓冲器,下降沿有效;
14)BUSY指示芯片工作状态,如果芯片忙,则信号变低。
3 存储系统仿真分析
CPLD程序在QuartusII 9.0软件环境下调试,使用VHDL语言编写(由于篇幅限制,本文不给出程序部分,想参考程序者可向作者索取)。图4所示为QuartusII 9.0编程的顶层模块图。fosc为系统时钟,由片外时钟产生电路提供,频率为40 MHz,负责提供系统所需的时钟发生信号;reset为重置信号;earse_en为擦写使能信号,负责使能Flash的擦写功能;earse_ok为擦写完成信号;addwr负责向Flash写入地址,只有写入地址成功后数据写入才有效。
1)写操作过程。PIC32单片机在接收到测试数据后,先通过wrfifo dc2向lpm fifo dc2发出写地址信号,此写地址信号由rdfifo dc2传输至Flash,写入的地址信息由addwr传输。待地址写入完成后,单片机再向fifo dc2发送写数据命令,Flash收到命令后,数据由dataout输出并在flashdatain口写入Flash。
2)读操作过程。PIC32单片机在发出读取地址命令后,经所要读取的地址由addrd传输给Flash,具体地址上的数据在发出读取命令后,由flashdataout口输出并在datain输入单片机。
在这里要注意,对FIFO的读写是在发出读写信号wrreq和rdreq后由时钟信号wrclk和rdclk控制,并严格按照lpm fifo的读写时序进行,图5为FIFO读写时序图。
由QuartusII 9.0软件进行仿真,得到Flash的读、写操作时序波形图,如图6和图7所示。将得到的时序波形图与三星公司K9K8G08U0A数据手册上读写时序图对照,可以看到读写仿真波形满足设计要求,可以实现读、写逻辑功能,系统设计方案切实可行。
4 小结
本文介绍了基于CPLD的PIC32单片机大容量存储系统的设计方法,详细阐述了CPLD模块化系统设计方案,通过得到的读写时序仿真图验证了系统设计的正确性与可行性。该系统在实践中成功应用在某项目的系统测试适配器设计中,并成功实现数据的存储与读取。试验结果证明,合理应用CPLD技术和Flash大容量存储器,可以大大提高系统设计的灵活性与可靠性,并很好解决大容量测量数据存储容量的问题。
参考文献
[1]郑文静,李明强,舒继武.Flash存储技术[J].计算机研究与发展,2010(4):716-726.
[2]钟颐华,王兴东,余松煜.基于NAND Flash的超高速视频存储技术研究[J].电视技术,2007,31(7):33-36.