基于分组重定向写的pcm内存行复用方法

文档序号:719675 发布日期:2021-04-16 浏览:15次 >En<

阅读说明:本技术 基于分组重定向写的pcm内存行复用方法 (PCM memory line multiplexing method based on grouping redirection writing ) 是由 章铁飞 于 2021-01-12 设计创作,主要内容包括:本发明提出一种基于分组重定向写的PCM内存行复用方法。写数据到PCM内存行时,通过数据写后读校验技术,统计出错数据位数及位置;根据出错数据位信息,记录卡死存储单元数量与位置,将卡死存储单元对应的数据划分到同一数据分组中,并且执行重定向写操作,避免因卡死存储单元而导致的数据错误,实现包含卡死存储单元的PCM内存行的复用。与现有技术相比,本发明设计合理,不消耗额外的存储空间,不存在现有ECC校验码技术的计算代价,而且本方法可以适配内存行后续出现的新的增量卡死存储单元,从而有效地增加PCM内存行的复用性。(The invention provides a PCM memory line multiplexing method based on packet redirection writing. When data is written into a PCM memory line, counting the number and the position of error data bits by a data write-after-read verification technology; according to the error data bit information, the number and the position of the dead card storage units are recorded, the data corresponding to the dead card storage units are divided into the same data packet, and the redirection write operation is executed, so that the data error caused by the dead card storage units is avoided, and the multiplexing of the PCM memory lines containing the dead card storage units is realized. Compared with the prior art, the method has reasonable design, does not consume extra storage space, does not have the calculation cost of the prior ECC (error correction code) check code technology, and can adapt to new increment dead-lock storage units which are subsequently generated in the memory line, thereby effectively increasing the reusability of the PCM memory line.)

基于分组重定向写的PCM内存行复用方法

技术领域

本发明涉及一种基于分组重定向写的PCM内存行复用方法。

背景技术

当前计算机中的内存采用DRAM存储技术。随着技术的进步,DRAM的存储容量越来越大,单位存储成本越来越低,但带来的问题是存储单元越来越小,数据保存的稳定性变差,静态能耗过高。针对这些问题,人们提出使用非易失性相变存储器,典型的比如PCM(phase change memory)来替代DRAM,作为计算机的主存。PCM具备存储密度更高,静态能耗低,单位存储成本更低的优点。不同于DRAM采用电容存储数据,PCM采用相变材料来存储与表示数据,因为不存在DRAM的漏电流效应,PCM不需要消耗能耗就能长久的保存数据。

PCM具有高密度、无漏电流等优势,但PCM也有自身的劣势。首先,PCM存储器数据读取的速度比较慢,数据写入的速度则更是慢于DRAM。另外,PCM存储器数据写寿命较短,即写入数据的次数,一般是108次。每一个PCM存储单元包含一混合金属层,其可以在高电阻的晶体态和低电阻的非晶体态之间切换,即分别表示逻辑值0和1。由于反复写入数据,PCM存储单元中的混合金属层频繁改变状态,最终混合金属层疲劳损坏,使得存储单元永久性陷入某种状态,比如高电阻晶体态或者低电阻非晶体态,逻辑值不能通过写操作改变,即不能再写入新的数据,这种现象称为PCM存储单元卡死。卡死的存储单元虽然不能写入新数据,但可以读取其卡死状态所表示的逻辑值。

与DRAM内存架构类似,PCM单元以二维阵列的形式构成存储块,大小的常见配置是512*512,横向的512个存储单元构成存储器行(Block),纵向的称为列。向存储块读写数据时,数据以Block大小为基本单位,一个数据Block对应一个存储Block。一个存储单元进入卡死状态前能承受的写次数,称为写阀值。由于制程技术的随机性,同一Block中的不同存储单元的写阀值不同,导致Block中的所有存储单元不是同时进入卡死状态,而是写阀值最小的存储单元首先进入卡死状态。当Block中出现第一个卡死存储单元后,剩余的其他存储单元还需要很长的时间才会进入卡死状态。为避免个别的卡死存储单元导致整个Block不可用,常规的技术是采用ECC校验码来纠正卡死存储单元导致的数据错误,使得包含卡死存储单元的PCM内存行得到复用。但ECC校验码技术会带来计算代价和能耗的问题,另外ECC校验码不能适配Block后续出现的增量卡死存储单元。

发明内容

本发明的目的在于提升PCM内存行的复用性,克服现有ECC数据校验技术的不足,提出一种基于分组重定向写的PCM内存行复用方法。当写数据时,通过数据写后读校验技术,统计出错数据位数及位置;根据出错数据位信息,记录卡死存储单元数量与位置,将卡死存储单元对应的数据划分到同一数据分组中,并且执行重定向写操作,避免因卡死存储单元而导致的数据错误,实现包含卡死存储单元的PCM内存行的复用。

本发明解决上述问题所采用的技术方案是:基于分组重定向写的PCM内存行复用方法,其特征在于如下步骤:

针对卡死存储单元引起的错误数据位,摒弃传统的错误校验码(ECC)纠正方法,并释放存储器Block的ECC码占据的存储空间,用于保存分组重定向写信息,包括:分组写标志位Fbit,卡死存储单元计数器Knum,分组掩码Fmask,分组序号Findex和分组数据FB。其中,Fbit占用1位,采用值0表示未采用分组重定向写,1表示采用分组重定向写方法。Knum占据4位,记录截止目前出现的卡死存储单元数量。Fmask占据9位,表示用于分组的二进制数据索引,其中值为1表示索引位,值位0非索引位。Findex占据9位,表示包含卡死存储单元对应数据的分组序号。FB占据一个字节,用于保存当前数据Block中的卡死数据分组,分组的大小设定为一个字节。

写数据时,通过写后读技术,统计获得出错数据位数,然后分情况处理:

情况1:如果出错数据位数小于等于当前的计数器值Knum,根据当前的分组掩码Fmask,校验是否出现新的卡死存储单元;

如果没有出现新卡死存储单元,则沿用上一次的分组重定向写操作;

如果出现新的卡死存储单元,则根据当前的卡死存储单元集合,寻找新的分组方法;

情况2:如果出错数据位数大于当前计数器值Knum并且小于等于8,则根据新的卡死存储单元位置信息,寻找新的分组方法;

情况3:如果当前出错数据位数大于8,分组重定向写方法失效;

找到新分组后,将卡死存储单元对应的数据分组写入FB,同时更新Fmask和Findex,将Fbit置为1;如果当前出错数据位数大于Knum,则更新Knum为当前出错数据位数。

校验是否出现新的卡死存储单元,主要过程:根据写后读校验技术,获得出错的数据位n,其中n≤Knum,根据出错数据位获得卡死存储单元的位置,令卡死存储单元集合为K=(k1,k2,...,kn),由于存储器Block大小为512位,每个ki在Block中的位置由9位二进制数表示:loc(ki)=(bi1,bi2,…,bi9),其中整数i∈[1,n]。每个loc(ki)与分组掩码Fmask按位与操作,然后再与分组序号码Findex做异或操作得到结果ret。对整数i∈[1,n]重复上述操作,只要有一个ret值非零,则表示出现新的卡死存储单元;否则,没有出现新的卡死存储单元。

满足下面两种情况,就需要寻找新的分组:情况1,卡死存储单元集合中元素n≤Knum且出现新的卡死存储单元;情况2,卡死存储单元集合K中元素数量n>Knum且n≤8。

寻找新的分组方法时,当前存储器Block的卡死存储单元集合K=(k1,k2,...,kn),每个ki在Block中的位置由9位二进制数表示:loc(ki)=(bi1,bi2,…,bi9),其中整数i∈[1,n],寻找分组的步骤如下:

步骤1:取整数i=1,初始化并清零两个9位二进制数m和res;

步骤2:取整数j=i+1,将loc(ki)与loc(kj)按位作异或操作,并将结果保存到m;

步骤3:m取反后与res按位与操作,并将结果保存到res中;

步骤4:j递增1,重复步骤2和步骤3直到j值为n;

步骤5:i递增1,重复步骤2,3和4,直到i值为n-1;

步骤6:如果最终res中二进制值1的数量大于等于6,则存在将所有卡死位划分到同一小组的方法,转步骤7;否则,失败;

步骤7:随机选择res中二进制值为1的6个数据位,清零剩余的res数据位获得分组掩码Fmask,并更新原来的Fmask

步骤8:任取存储器Block的卡死存储单元ki,将loc(ki)与Fmask按位与计算,得到的9位二进制数为分组序号码Findex,并更新原来的Findex

只有找到新分组才能进行重定向写操作。

找到新的分组方法后,对数据Block按字节分组,再将包含卡死存储单元对应的分组重定向写入FB,具体步骤如下:

步骤1:取整数i=1;

步骤2:获取Fmask中值为零的数据位的下标,按高位到低位(d1,d2,d3);

步骤3:对loc(ki)取第d1,d2和d3数据位,组合成一个3位二进制数(bd1,db2,bd3),其值范围为[0,7];

步骤4:将数据Block中ki对应的数据位写入FB的第(bd1,bd2,bd3)位;

步骤5:整数i递增1,重复上述的步骤2,3和4,直到i为8。

读数据时,同时读取存储器Block和对应分组标志位,如果分组标志位值0,则读数据操作完成;如果分组标志位值1,则要进行分组读操作,读出的数据Block采用FB中的分组数据更新。假设B中读出的分组数据F=(f0,f1,…,f7),将f0到f7各数据位替换读出的数据Block的对应数据位,具体步骤如下:

步骤1:取整数i=1;

步骤2:获取分组掩码中值为零的数据位的下标,按高位到低位(d1,d2,d3);

步骤3:对loc(ki)取第d1,d2和d3数据位,组合成一个3位二进制数(bd1,bd2,bd3),其值范围为[0,7];

步骤4:将F的第(bd1,bd2,bd3)写入到数据Block中ki对应的数据位;

步骤5:整数i递增1,重复上述的步骤2,3和4,直到i的值为8。

本发明与现有技术相比,具有以下优点和效果:本发明设计合理,不消耗额外的存储空间,不存在现有ECC校验码技术的计算代价,而且本方法可以适配内存行后续出现的新的增量卡死存储单元,从而有效地增加PCM内存行的复用性。

附图说明

图1是本发明实施分组重定向写操作的整体流程。

具体实施方式

下面结合附图并通过实施例对本发明作进一步的详细说明,以下实施例是对本发明的解释而本发明并不局限于以下实施例。

本实施例中的基于分组重定向写的PCM内存行复用方法,包括如下步骤:

针对卡死存储单元引起的错误数据位,传统的方法采用错误校验码(ECC)纠正,本方法摒弃ECC并释放其占据的存储空间,用于保存分组重定向写信息,包括:分组写标志位Fbit,卡死存储单元计数器Knum,分组掩码Fmask,分组序号Findex和分组数据FB。其中Fbit占用1位,采用值0表示未采用分组重定向写,1表示采用分组重定向写方法。Knum占据4位,记录截止目前出现的卡死存储单元数量。Fmask占据9位,表示用于分组的二进制数据索引,其中值为1表示索引位,值为0非索引位。Findex占据9位,表示包含卡死存储单元对应数据的分组序号。FB占据一个字节,用于保存当前数据Block中的卡死数据分组,分组的大小设定为一个字节。

向存储器Block写入数据后,再立即读出与原始数据校验,如果读出数据与原始数据一致,则表示写数据成功,并将存储器Block对应的Fbit设为0,表示没有采用分组重定向写操作;如果读出的数据位与原始数据不一致,表示当前写入的数据受卡死存储单元影响出现错误,需要进行分组重定向写操作。如图1所示,分组重定向写操作的主要流程如下:

根据写后读数据校验技术,统计出错数据位数;

情况1:如果出错数据位数小于等于当前的计数器值Knum,根据当前的分组掩码Fmask,校验是否出现新的卡死存储单元;

如果没有出现新卡死存储单元,则沿用上一次的分组重定向写操作;

如果出现新的卡死存储单元,则寻找新的分组方法;

情况2:如果出错数据位数大于当前计数器值Knum并且小于等于8,则根据新的卡死存储单元位置信息,寻找新的分组方法;

情况3:如果当前出错数据位数大于8,分组重定向写方法失效;

找到新分组后,将卡死存储单元对应的数据分组写入FB,同时更新Fmask和Findex,将Fbit置为1;如果当前出错数据位数大于Knum,则更新Knum为当前出错数据位数。

如果当前出错数据位数量小于等于当前的记录值Knum,则根据当前的分组掩码,校验是否出现新的卡死存储单元,具体过程如下:

根据写后读校验技术,获得出错的数据位n,其中n≤Knum,根据出错数据位获得卡死存储单元的位置,令卡死存储单元集合为K=(k1,k2,...,kn),由于存储器Block大小为512位,每个ki在Block中的位置由9位二进制数表示:loc(ki)=(bi1,bi2,…,bi9),其中整数i∈[1,n]。每个loc(ki)与分组掩码Fmask按位与操作,然后再与分组序号码Findex做异或操作得到结果ret。对整数i∈[1,n]重复上述操作,只要有一个ret值非零,则表示出现新的卡死存储单元;否则,没有出现新的卡死存储单元。

出现如下的任一情况,需要寻找新的分组方法:情况1,卡死存储单元集合中元素n≤Knum且出现新的卡死存储单元;情况2,卡死存储单元集合K中元素数量n>Knum且n≤8。如果找到一个满足条件的分组方法,再进行重定向写操作;否则,分组重定向写操作失效。当前存储器Block的卡死存储单元集合K=(k1,k2,...,kn),每个ki在Block中的位置由9位二进制数表示:loc(ki)=(bi1,bi2,…,bi9),其中整数i∈[1,n]。

寻找分组的具体过程如下:

步骤1:取整数i=1,初始化并清零两个9位二进制数m和res;

步骤2:取整数j=i+1,将loc(ki)与loc(kj)按位作异或操作,并将结果保存到m;

步骤3:m取反后与res按位与操作,并将结果保存到res中;

步骤4:j递增1,重复步骤2和步骤3直到j值为n;

步骤5:i递增1,重复步骤2,3和4,直到i值为n-1;

步骤6:如果最终res中二进制值1的数量大于等于6,则存在将所有卡死位划分到同一小组的方法,转步骤7;否则,失败;

步骤7:随机选择res中二进制值为1的6个数据位,清零剩余的res数据位获得分组掩码Fmask,并更新原来的Fmask

步骤8:任取ki,将loc(ki)与Fmask按位与计算,得到的9位二进制数为分组序号码Findex,并更新原来的Findex

找到新的分组方法后,对数据Block按字节分组,再将卡死存储单元对应的数据分组重定向写入FB。具体过程如下:

步骤1:取整数i=1;

步骤2:获取分组掩码中值为零的数据位的下标,按高位到低位(d1,d2,d3);

步骤3:对loc(ki)取第d1,d2和d3数据位,组合成一个3位二进制数(bd1,db2,bd3),其值范围为[0,7];

步骤4:将存储Block中的ki对应的数据位写入FB的第(bd1,bd2,bd3)位;

步骤5:整数i递增1,重复上述的步骤2,3和4,直到i为8;

读数据时,同时读取存储器Block和对应的Fbit,如果Fbit值0,则读数据操作完成;如果Fbit值1,则要进行分组读操作,读出的数据Block采用FB中的分组数据更新,FB中读出的分组数据F=(f0,f1,…,f7),采用数据F替换读出的数据Block的对应数据位,具体步骤如下:

步骤1:取整数i=1;

步骤2:获取分组掩码中值为零的数据位的下标,按高位到低位(d1,d2,d3);

步骤3:对loc(ki)取第d1,d2和d3数据位,组合成一个3位二进制数(bd1,bd2,bd3),其值范围为[0,7];

步骤4:将F的第(bd1,bd2,bd3)写入到数据Block中ki对应的数据位;

步骤5:整数i递增1,重复上述的步骤2,3和4,直到i的值为8;

此外,需要说明的是,本说明书中所描述的具体实施例,其零、部件的形状、所取名称等可以不同,本说明书中所描述的以上内容仅仅是对本发明结构所作的举例说明。凡依据本发明专利构思所述的构造、特征及原理所做的等效变化或者简单变化,均包括于本发明专利的保护范围内。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,只要不偏离本发明的结构或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种老化测试装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!