0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

电子设计 来源:电子科技 作者:贾红恩,刘瑞竹, 2020-03-29 08:01 次阅读

评价存储器的一个重要指标就是它的可靠性,在一般的数据存储中,几个位的错误可能不是很关键的问题,如果但是发生在某个敏感的数据上,这个小小的故障可能会导致严重的后果。因此,必须采取一些措施来及时检出并纠正出错的数据。目前常用的方法有:奇偶校验、CRC校验、重复码校验等。

ECC校验是在奇偶校验的基础上发展而来的,它将数据块看作一个矩阵,利用矩阵的行、列奇偶信息生成ECC校验码。它能够检测并纠正单比特错误和检测双比特错误,但对双比特以上的错误不能保证检测。它克服了传统奇偶校验只能检出奇数位出错、校验码冗长、不能纠错的局限性。文中在高速大容量固态存储器的硬件结构基础上,详细介绍了ECC校验码的生成规则以及ECC校验流程,并用C语言和VHDL语言两种方法实现了该算法

1、 存储器的硬件结构及芯片介绍

本存储器是以FPGA为控制核心,用64片Flash芯片构成存储阵列,采用CPCI接口实现数据的高速率存储。Flash存储阵列分为16组,每组4片,每组Flash芯片共用数据和控制总线。该存储器的硬件结构图,如图1所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

存储板上的存储芯片用的是Samsung公司的高速大容量固态存储芯片K9W8G08U1 M Nand Flash Memory,其容量为1 G×8 bit,分为8 192个块,每个块又分为64页,1页有(2 k+64)Byte,其中一页有64 bit的空闲区。存储板上的控制芯片是Ahera公司的高端FPGA芯片EP3SE110F1152C4,它负责数据的缓冲和整个存储器的时序控制,并负责以页为单位生成校验码,并把校验码存人到页的空闲区内。下面以1页2 048 bit为单位介绍校验码的生成以及校验流程。

2 、EGG算法分析及校验流程

2.1 EGG校验码生成规则

Flash在读写数据的时候是以页为单位进行的,一页有2 048个数据,所以可以以2 048 bit为单位生成校验码。每个数据有8位信息组成,可以把这2 048个数据看成2 048×8的矩阵,这样就可以分别生成行校验码和列校验码来分别校验。ECC校验中,每2 048个数据生成4个字节的校验码,这32位的校验码分成3个部分:6位的列校验信息,22位的行校验信息,其余的4位置1,ECC校验码组成,如表1所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

其中P4_l,P4_2,P2_1,P2_2,P1_1,P1_2是列校验码,而P8_1,P8_2,P16_1,P16_2,P32_1,P32_2,P64_1,P64_2,P128_1,P128_2,P256_1,P256_2, P512_1,P512_2,P1024_1,P1 024_2, P2 048_1, P2 048_2, P4 096_1,P4096_2,P8192_1,P8192_2是行校验码。行列校验码生成表,如表2所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

2.2 ECC校验流程

当向NAND Flash的页中写入数据的时候,每2 048 bit生成4 bit的ECC校验码,称之为写ECC校验码,保存到每一页的空闲数据区中。

当从NAND Flash中读取数据的时候,每2 048 bit生成4 bit的ECC校验码,称之为读ECC校验码。校验的时候,根据上述ECC生成原理不难推断:将从页空闲区中读出的写ECC校验码和读ECC校验码按位异或,若结果为0,则表示不存在错;若4 bit的异或结果中存在14 bit为1,表示存在1 bit错误,且可纠正;若4个bit的异或结果中只存在1 bit为1,表示空闲区中的校验码出错;其他情况均表示出现了无法纠正的错误,校验流程图,如图2所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

3、 ECC算法的实现

3.1 C语言实现ECC算法

以一页数据2 048个字节作为测试数据产生ECC校验码,数据是0x00~0xFF,循环8次产生2048个数据,数据序列,如图3所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

按前面的ECC校验码生成规则,2 048个数据应该生成4个校验码,生成的校验码,如图4所示,其中ecccode1,ecccode2,ecccode3,ecccode4是生成的4个校验码。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

现在假设读出的数据中有一位数据发生了翻转,出现了一位数据错误的情况,即假设数据的第2 bit的最低位发生了翻转,0×0l变成了O×00,此时读出的数据序列,如图5所示。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

3.2 利用VHDL语言实现EGG算法

文中以0x00~OxFF循环8次产生2 048个数据,利用VHDL语言编程,在QuartusII7.2下进行了仿真,得到了如图7所示的校验码。其中ecccodel =00000000,ecccode2=00000000,ecccode3=11000000,ecccode4=000000ll是生成的4个校验码,从图中可以看到利用VHDL语言得到的校验码和用C语言得到的ECC校验码是相同的。

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

使用C语言和VHDL语言在高速大容量固态存储器实现ECC算法

4 、结束语

文中介绍了ECC算法的一种实现方法,说明了ECC的校验流程,最后用两种方法实现ECC校验算法。ECC校验算法简单,软硬件均能实现,它能够检测并纠正单比特错误和检测双比特错误,所以可以为数据存储和通信系统提供一种强有力的差错检测手段。

责任编辑:t

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21748

    浏览量

    603900
  • 存储器
    +关注

    关注

    38

    文章

    7495

    浏览量

    163921
  • vhdl
    +关注

    关注

    30

    文章

    817

    浏览量

    128159
收藏 人收藏

    评论

    相关推荐

    应用VHDL语言的FFT算法实现

    应用VHDL语言的FFT算法实现
    发表于 08-20 20:17

    请问VHDL语言和verilog语言有什么区别?

    VHDL语言和verilog语言有何区别
    发表于 03-28 06:52

    请问VHDL语言和verilog语言有什么区别?

    VHDL语言和verilog语言有何区别
    发表于 03-29 07:55

    如何利用固态存储器进行ECC算法分析与实现

    特错误和检测双比特错误,但对双比特以上的错误不能保证检测。它克服了传统奇偶校验只能检出奇数位出错、校验码冗长、不能纠错的局限性。文中高速容量固态
    发表于 07-31 06:47

    单片机C语言和普通的C语言有什么区别

    是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程
    发表于 11-30 06:49

    vhdl语言ppt

    VHDL的定义和功能VHDL的发展概况程序编程语言和硬件描述语言的对比引入硬件描述语言对系统进
    发表于 09-03 12:58 39次下载
    <b class='flag-5'>vhdl</b><b class='flag-5'>语言</b>ppt

    容量固态存储设备的FPGA实现

    采用大容量固态Flash作为存储介质,用FPGA作为存储阵列的控制,设计了高速
    发表于 12-08 17:25 29次下载

    C语言和汇编语言混合编程方法和C语言中断处理方法

    C语言和汇编语言混合编程方法和C语言中断处理方法,new
    发表于 01-06 14:36 36次下载

    vhdl语言和c语言区别大吗?差异性体现在哪儿

    相信对vhdl语言和c语言区别也有了一定的了解,并且它们两者之间的区别还是挺大的,下面我们详细细数一下它们的区别。
    发表于 11-09 16:06 2w次阅读
    <b class='flag-5'>vhdl</b><b class='flag-5'>语言和</b><b class='flag-5'>c</b><b class='flag-5'>语言</b>区别大吗?差异性体现在哪儿

    单片机C语言和C语言为什么有差异?

    许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C语言,为什么单片机C语言和我当初学
    发表于 09-01 16:39 3793次阅读

    使用单片机实现I2C存储器设计的中文硬件字库应用的C语言实例

    本文档的主要内容详细介绍的是使用单片机实现I2C存储器设计的中文硬件字库应用的C语言实例。
    发表于 03-31 14:45 2次下载

    [ 爱找茬 ]都是C语言,单片机C语言和普通的C语言究竟有什么差异呢?

    是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程
    发表于 11-20 19:36 31次下载
    [ 爱找茬 ]都是<b class='flag-5'>C</b><b class='flag-5'>语言</b>,单片机<b class='flag-5'>C</b><b class='flag-5'>语言和</b>普通的<b class='flag-5'>C</b><b class='flag-5'>语言</b>究竟有什么差异呢?

    如何选择创建c语言和c++

    选择创建 C 语言和 C++ 都需要综合考虑多个因素。决定使用哪种语言之前,我们需要对这两种语言
    的头像 发表于 11-27 15:58 614次阅读

    vb语言和c++语言的区别

    VB语言和C++语言是两种不同的编程语言,虽然它们都属于高级编程语言,但在设计和用途上有很多区别。下面将详细比较VB
    的头像 发表于 02-01 10:20 2368次阅读

    PLC编程语言和C语言的区别

    工业自动化和计算机编程领域中,PLC(可编程逻辑控制)编程语言和C语言各自扮演着重要的角色。尽管两者都是编程
    的头像 发表于 06-14 17:11 2886次阅读