标题:
基于FPGA的固态盘ECC实现
[打印本页]
作者:
520503
时间:
2015-5-4 23:50
标题:
基于FPGA的固态盘ECC实现
关键字:Nand flash 固态存储 ECC FPGA
以Nand flash为存储介质的
固态存储
系统中,因为Nand flash的固有特性,在多次读写后,储存在flash中的数据将会变得不可靠。所以有必要开发一种能实现数据可靠传输的手段来提高flash和主控芯片之间数据传输的可靠性。文中介绍了ECC码的特点和原理,在FPGA开发环境下实现ECC校验功能。并通过工程实现,在FPGA上实现了该ECC算法。测试结果表明256 Byte数据生成22 bit的ECC校验数据。能够检测1 bit错误和2 bit错误,并能纠正1 bit错误。
1 引言
评价
存储器
的一个重要指标就是它的可靠性。在一般的数据存储中,几个位的错误可能不是很关键的问题,但是如果发生在某个敏感的数据上,这个小小的故障可能会导致严重的后果。因此,必须采取一些措施来及时检出并纠正出错的数据。目前常用的方法有:奇偶校验、CRC校验、重复码校验等。
ECC校验是在奇偶校验的基础上发展而来的,它将数据块看作一个矩阵,利用矩阵的行、列奇偶信息生成ECC校验码。它能够检测并纠正单比特错误和检测双比特错误,但对双比特以上的错误不能保证检测。它克服了传统奇偶校验只能检出奇数位出错、校验码冗长、不能纠错的局限性。文中在介绍高速大容量固态存储器的硬件结构基础上,详细介绍了ECC校验码的生成规则以及ECC校验流程,并通过FPGA实现了该算法。
2 存储器的硬件结构及介绍
本文中的存储器是以ARM为SSD控制器,用16片Flash芯片构成存储阵列,采用SATA接口实现数据的高速率存储。Flash存储阵列分为8组,每组2片,每组Flash芯片共用数据和控制总线。该存储器的硬件结构如图1所示。
图1 SSD构架图
存储板上的存储芯片用的是Micron公司的高速大容量固态存储芯片Nand Flash Memory,其容量为1 G×8 bit,分为8192个块,每个块又分为64页,1页有(2 k+64)Byte,其中一页有64 bit的空闲区。存储板上的SSD控制器是由ARM 926为核心的控制芯片,它负责数据的缓冲和整个存储器的时序控制,并负责以页为单位生成校验码,并把校验码存入到页的空闲区内。下面以2 048 bit为单位介绍校验码的生成以及校验流程。图4中等待256个字节的数据输入后,最后生成校验码4401E9,也就是3个字节的校验码。其中out1、out2和out3为中间数据,EOF高电平出现代表数据运算结束。运算结束,输出4401E9,其中最后两位为无效数据。数据输入为串行输入,256个字节需要256个时钟周期后才能完成输入。由此从输入开始到得出计算结果至少需等待256个时钟周期。在实际使用过程中可以将串行输入改为并行输入,或流水线结构,以减少等待时间。
ECC校验的结果如图5所示,其中错误指示由两个bit表示。00表示没有错误,01表示有1位错误,10表示有2位及2位以上错误,11表示ECC区出错。当出错位为1位时,由错误位置指出可纠错的位。
图5 ECC检验
6 结论
为了实现数据的可靠传输,在固态盘中需要使用ECC校验。文中介绍了ECC算法的一种实现方法,说明了ECC的校验流程,最后用xilinx FPGAXC3S500E实现ECC校验算法。ECC校验算法简单,软硬件均能实现,ECC能够检测并纠正单比特错误和检测双比特错误,所以可以为数据存储和通信系统提供一种强有力的差错检测手段。使用本文提供的ECC算法可以纠错1 bit,检错2 bit。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0