首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA的固态盘ECC实现

基于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。
返回列表