随机跳列信息表的生成及验证方法与流程-j9九游会真人

文档序号:35683869发布日期:2023-10-09 01:22阅读:23来源:国知局


1.本发明涉及数字验证领域,更具体地涉及一种随机跳列信息表的生成及验证方法。


背景技术:

2.flash尤其nandflash是用于保存系统运行所必需的操作系统、应用程序、用户数据及运行过程中产生的各类数据,且在系统掉电后数据不会丢失。但存储在nandflash中的这些数据容易发生错误,虽然flash会有自带的ecc(error checkingandcorrection)纠错功能,或者通过外挂bch(error-correctingcodes)纠错的功能,但当错误的比特数超过bch纠错能力,会出现无法纠错的情况,且造成的错误字节数特别多。比如一个页包含有4096 64字节(4096指的是一个页的大小,即一次写入flash的最大有效数据是4096字节,其中,一个页就是一行,列是页内的地址偏移,64字节是跳列及ecc码),而bch纠错能力是8bits,若flash错误了9bits,则导致1个列为坏,并假定是第2个字节为坏列,主控的bch就无法纠正这个错误。
3.但是,在上述过程中,因为flash的实际页大小是4096 64字节,若ecc校验码为10字节(并不固定,但ecc码通常字节数比较小,而且小于64),则64字节中除掉用来放ecc校验码的10字节,还有54个字节可以用来替换坏列,所以就需要跳列功能来跳过不能纠错的那个列。但如果控制器没有跳列功能,就只能把这个有坏列的页整体扔掉不用,因为写到那个列的数据读回来一直都是错的。因此需要保证写flash主控的跳列功能必须正常,把正确的数据写到正常的列中。而验证跳列功能正确性关键在于产生随机的跳列数据表,把跳列表中的数验证在flash排列中是否正常跳过并存放正常的数据。
4.目前业内对于模拟数据的跳列信息都是固定的数据,利用电脑工具上的扫描,就是普通的读写flash,数据由电脑工具生成,工具对比读写的数据来获取坏列信息,但这样的操作只能针对固定一个flash的坏列信息,真实的情况flash有可能在任意位置损坏,只有一组或者几组数据没办法保证跳列模块的正确性,跳列模块需要大量的数据验证功能模块的可执行性,因此能随机生成跳列信息的方法就显得尤为重要。如果跳列模块能在数字前端验证通过,并通过数字模拟真实flash的坏列,将大大缩短芯片流片的时间。
5.因此,有必要提供一种改进的适用于flash控制器的随机跳列信息表的生成及验证方法来克服上述缺陷。


技术实现要素:

6.本发明的目的是提供一种随机跳列信息表的生成及验证方法,本发明的验证方法可真实反映flash的损坏信息,能够大量提高验证模块的覆盖率,提高验证的完备性;而且本发明的验证方法是在数字前端验证通过的,通过数字模拟真实flash的坏列,大大减小了芯片的流片时间。
7.为实现上述目的,本发明提供一种随机跳列信息表的生成及验证方法,适用于
flash控制器,其特征在于,包括如下步骤:
8.a.获取当前flash页的字节数及控制器的单次写入长度,并通过当前flash页的字节数及控制器的单次写入长度的数值计算获得控制器的写入次数;
9.b.建立从0开始的索引数组,并随机生成跳列表,所述索引数组对所述跳列表的各个表格编号,且编号依次累加,所述索引数组的长度即为跳列表的长度;
10.c.根据跳列表中好列和坏列的总长度计算每次控制器写入flash的第一个位置的列地址;
11.d.控制器根据跳列表配置在ram中的起始位置,依次从ram中读取跳列表的数据信息,并根据跳列表的数据信息在flash中将跳列表中对应的ram中的坏列数据填充为固定代码,将跳列表中对应的ram中的好列数据直接写入flash中;
12.e.控制器根据跳列表从flash中读取数据,并与ram中的好列数据进行对比。
13.较佳地,控制器的单次写入长度包含ecc码的长度,且所述控制器的写入次数为当前flash页的字节数与控制器的单次写入长度的商。
14.较佳地,在所述步骤b中,随机生成的跳列表中的好列的总字节长度等于控制器单次写入的长度。
15.较佳地,在所述跳列表中,好列与坏列以好-坏的方式成对重复排列,且以好列开始;若以坏列开始,则第一个好列的字节数被置0。
16.较佳地,当好列的总字节数大于控制器的单次写入长度时,计算好列总字节数与控制器的单次写入长度的差值,获得第一差值。
17.较佳地,还包括步骤:在一次写入过程中,将最后一个好列的字节数减去所述第一差值,获得第二差值,以第二差值的长度作为字节数的数据覆盖当前次的最后一个好列的数据。
18.较佳地,计算当前次的好列与坏列的总字节数并减去第一差值,以得到下一次写入flash的第一个位置的列地址。
19.较佳地,计算覆盖当前次的最后一个好列后的跳列表中的好列的总长度,下一次写入过程中在当前总长度的基础上累加计算好列的总长度。
20.较佳地,还包括步骤:重复步c-e,直到控制器按其写入次数完成对flash的写入。
21.较佳地,所述随机跳列信息表的生成及验证方法还包括步骤:当所有需要写入次的所有好列与坏列的总长度大于当前flash页的字节数时,计算所有需要写入次的好列及坏列总长度与当前flash页的字节数的差值,获得第三差值;将最后一次的最后一个好列的长度减去所述第三差值,获得第四差值,以第四差值的长度作为字节数的数据覆盖最后一次的最后一个好列。
22.与现有技术相比,本发明的随机跳列信息表的生成及验证方法,通过随机生成包含有好列好列的跳列表,控制器将ram中的数据读取到跳列表中,并对跳列表中的坏列数据进行标记,并根据跳列表的数据信息在flash中将跳列表中对应的ram中的坏列数据填充为固定代码,将跳列表中对应的ram中的好列数据直接写入flash中,使得不同的测试用例都能随机到一个不同的坏列信息,再通过读取flash中的数据,并与ram中的好列数据进行对比,即可真实反映flash的损坏信息,能够大量提高验证模块的覆盖率,提高验证的完备性;而且本发明的验证方法是在数字前端验证通过的,通过数字模拟真实flash的坏列,大大减
小了芯片的流片时间。
23.通过以下的描述并结合附图,本发明将变得更加清晰,这些附图用于解释本发明的实施例。
附图说明
24.图1为本发明随机跳列信息表的生成及验证方法的流程图。
具体实施方式
25.现在参考附图描述本发明的实施例,附图中类似的元件标号代表类似的元件。如上所述,本发明提供了一种随机跳列信息表的生成及验证方法,本发明的验证方法可真实反映flash的损坏信息,能够大量提高验证模块的覆盖率,提高验证的完备性;而且本发明的验证方法是在数字前端验证通过的,通过数字模拟真实flash的坏列,大大减小了芯片的流片时间。
26.请参考图1,图1为本发明随机跳列信息表的生成及验证方法的流程图。如图所示,本发明随机跳列信息表的生成及验证方法包括如下步骤:
27.步骤s001,获取当前flash页的字节数及控制器的单次写入长度,并通过当前flash页的字节数及控制器的单次写入长度的数值计算获得控制器的写入次数;在本步骤中,具体每个flash页的字节数并不相同,而后续对当前flash页的读/写均是以其总字节数为基础的,从而需要提前获取当前flash页的字节数a,以为后续各步骤做准备;相应地,所述控制器的单次写入长度也不尽相同,例如控制器通常有1024,512,256,32这四种单次写入长度,但是在一个测试案例中只能使用一种单次写入的长度,因此,需要在上述四种单次写入长度中获取并确定所述控制器一种单次写入长度b;从而可通过当前flash页的字节数a及控制器的单次写入长度b的数值计算获得控制器的写入次数c,且所述控制器的写入次数c为当前flash页的字节数a与控制器的单次写入长度b的商,即c=a/b,表示所述控制器经过c次的写入操作可将ram中的a字节的数据写入到flash中;其中,所述控制器的单次写入长度b包含ecc(errorchecking andcorrection)码的长度,当然,ecc码的长度通常比较小,可能就几个字节的长度,因为ecc码是用于自动纠错校正的,因此在每次控制器的单次写入中均需要一并写入,使得所述长度b中需要包含有ecc码的字节数,才能保证ecc码可正确写入。
28.步骤s002,建立从0开始的索引数组,并随机生成跳列表,所述索引数组对所述跳列表的各个表格编号,且编号依次累加,所述索引数组的长度即为跳列表的长度;在本步骤中,所述索引数组从0开始对随机生成的跳列表的表格依次编号,例如个跳列表有16个表格,则所述索引数组从0开始依次编号到15,此时,所述索引数组的长度为16,也即是当前跳列表的长度;在本发明中,通过设置依次累加的索引数组,不仅方便后述可准确而快速地定位到一个跳列表中的具体数据位置,而且对于整个flash页的数据也可准确定位,使得要查找其中的某一个数据变得快速可行;另外,在本发明的具体实施方式中,所述随机生成的跳列表,好列与坏列以好-坏的方式成对重复排列,且以好列开始,该方式主要是与所述控制器匹配,以便于控制器对跳列表的读取;而若生成的某一跳列表是以坏列开始,则将第一个好列的字节数被置0,后续各列保持不变,以保证控制器从好列开始依次读取跳列表;另外,
所述随机生成的跳列表中的好列的总字节长度等于控制器单次写入的长度b,使得一个跳列表中的所有好列的数据能被所述控制器一次完整地写入至flash中,而不会有遗漏(后续控制器对flash的具体写入过程有说明)。
29.在本发明的随机跳列信息表的生成及验证方法的运行过程中,所述步骤s001和步骤s002的顺序并不固定,可任意排列,均只需在所述步骤s003运行前完成即可,本发明并不对此两个步骤的运行顺序做出限定。
30.步骤s003,根据跳列表中好列和坏列的总长度计算每次控制器写入flash的第一个位置的列地址;在本步骤中,在初始化的时候通过控制器的配置,flash会分配一块空间供控制器来写入数据,在该块空间中,控制器第一次写入的时候,其起始地址可以任意,且从该起始地址依次写入数据直到写完;但众所周知地,对flash的写入操作均是连续不间断地,因此在控制器第一次写完后,第二次写入的地址就不是任意的,而是需要接续第一次写入地址的继续写,此时就需要对第二次写入的第一个位置的列地址进行计算以确定开始写入的列地址,从而需要通过跳列表中好列和坏列的总长度来计算该第一个位置的列地址,具体的计算过程为:
31.设定第一个位置的列地址为d,当前跳列表(第一次写入)的所有好列总字节数为e,所有坏列的总字节数为f;
32.(1)当e=b时,此时当前跳列表中的好列数据正好一次写入flash中,不需要进行跨次写入(后续说明坏列数据并不会被写入flash中),此时,d=e f。
33.(2)当e》b时,此时当前跳列表中好列的数据一次不能全部写入flash中,需要进行跨次写入,使得好列总长度e与控制器的单次写入长度b之间存在有第一差值g,且g=e-b,此时,d=e f-g。
34.从而通过上述方式计算每次(首次除外)控制器写入flash的第一个位置的列地址,并按此列地址依次完成一次好列数据的写入过程;且在上述计算过程中,在当前flash页的写入过程中,所有值都是根据前面一次或几次的累加值来计算的,并不是固定值,比如第二次写入的列地址d2是根据第一次写入过程中的所有好列的字节数e1、所有坏列的字节数f1及控制器的单次写入长度b1计算得到的,而第三次写入的列地址d3,则是根据第一次和第二次写入过程中的所有好列的字节数e1和e2、所有坏列的字节数f1和f2、控制器的单次写入长度b1和b2计算得到的;其它各次第一个位置的列地址也依此计算,在此不再重复说明。
35.在上述步骤中,当e》b时,所述控制器对flash的写入出现了跨次写入的情况,需要对跳列表中好列的数据进行调整,具体地:在一次写入过程中,将最后一个好列的字节数eh减去所述第一差值g,获得第二差值h,即h=eh-g,并以第二差值h的长度作为字节数的数据覆盖当前次的最后一个好列的数据,以使得在一次写入操作中,不会将从ram中读取过来的好列数据漏写至flash中。进一步地,在本发明中,当当前次的跳列表中的最后一个好列数据被覆盖后,该跳列表的好列总长度e也发生了变化,因此需要计算覆盖当前次的最后一个好列后的跳列表中的好列的总长度ex,从而在下一次写入过程中在当前总长度的基础上累加计算好列的总长度时,则以好列总长度ex为计算值,而不是以覆盖前的好列总长度e为计算值,避免了后续的重复计算。
36.步骤s004,控制器根据跳列表配置在ram中的起始位置,依次从ram中读取跳列表
的数据信息,并根据跳列表的数据信息在flash中将跳列表中对应的ram中的坏列数据填充为固定代码,将跳列表中对应的ram中的好列数据直接写入flash中;在本步骤中,所述跳列表存储在ram中的位置是通过控制器的配置实现的,使得控制器根据其自身给跳列表配置在ram中的起始位置开始,依次从ram中读取跳列表的数据信息;在本发明的具体实施方式中,在所述跳列表中,好列与坏列以好-坏的方式成对重复排列,且以好列开始,该方式主要是与所述控制器匹配,以便于控制器对跳列表的读取;而若在某一跳列表中是以坏列开始,则第一个好列的字节数被置0,后续各列保持不变,以保证控制器从好列开始依次读取跳列表。在本步骤中,所述控制器在从ram中读取跳列表的数据的过程中,会将跳列表中的坏列进行标记,而所述控制器根据跳列表将跳列表中的数据写入flash中时,则会根据坏列的标记将坏列数据填充为一固定值,该固定值可自行设定,但是所有坏列数据都需要填充同一固定值,以便于控制器识别;同时,所述控制器将跳列表中对应的ram中的好列数据直接写入flash中,即完成一次对flash的写入操作。
37.步骤s005,控制器根据跳列表从flash中读取数据,并与ram中的好列数据进行对比;在本步骤中,所述控制器根据跳列表从flash中读取前述被写入的数据,所述控制器读取数据后,根据前述被填充的固定值,仅将好列数据写入ram中,并与ram中的原数据进行对比,以完成对跳列信息表的验证;例如控制器如向flash中写入的数据为:0x12,0x34,0x45,正常情况flash的输入-输出端口看到的数据是:0x12,0x34,0x45,若flash的第1列是坏的,那么就需要通过跳列表跳过第一列的数据,因为写flash时数据必须连续,所以跳过的列需要填充数据,如果控制器设定跳列表的坏列数据填充0xaa,那么flash的输入-输出端口看到写入flash的数据就是变为:0x12,0xaa,0x34,0x45,控制器从flash中读取的数据也是0x12,0xaa,0x34,0x45,但控制器写入ram的数据就变为0x12,0x34,0x45。
38.作为本发明的优选实施方式,本发明的所述随机跳列信息表的生成及验证方法还包括:
39.步骤s006,重复步骤s003至步骤s005,直到控制器按其写入次数完成对flash的写入;在本步骤中,所述控制器根据上述从ram中读取数据配置至跳列表中,再根据跳列表将好列数据写入到flash,再从flash读取数据与ram中数据进行对比,以完成一次完整的读/写过程,但根据flash页的字节数a及控制器的单次写入长度b,需要进行c次这样的读/写过程才算完整实现对flash的读/写,因此需要将前述步骤重复执行c次。其中,在本步骤中,在执行第c次写入的过程中,当所有需要写入次的所有好列与坏列的总长度t(c次写入过程中所有好列坏列的总长度)大于当前flash页的字节数a时,计算所有需要写入次的好列及坏列总长度t与当前flash页的字节数的差值a,获得第三差值i;将最后一次(第c次)的最后一个好列的长度减去所述第三差值i,获得第四差值j,以第四差值的长度作为字节数的数据覆盖最后一次(第c次)的最后一个好列;当t》a时,则说明跳列表中有部分好列数据不能被写入到flash中,此时则需要对跳列表中的好列数据进行调整,由前述可知,对flash的写入过程是按地址依次写的,因此,最后一次的最后一个好列数据以前的数据均能正常写入,仅需要调整最后一个好列的数据即可,以保证所有好列数据均能被写入到flash中;其中,对最后一个好列数据的覆盖与单次写入的覆盖完全相同,在此不在赘述。另外,关于上述的最后一次的最后一个好列,下面举例进行解释,例如,在一次验证过程中,控制器需要对flash进行11次写入操作,而控制器在进行第11次写入时,随机生成的跳列表中有9个好列,则,最
后一次指的是第11次,最后一次的最后一个好列就是指第11次的第9个好列。
40.综上所述,本发明的随机跳列信息表的生成及验证方法,通过随机生成包含有好列坏列的跳列表,控制器将ram中的数据读取到跳列表中,并对跳列表中的坏列数据进行标记,并根据跳列表的数据信息在flash中将跳列表中对应的ram中的坏列数据填充为固定代码,将跳列表中对应的ram中的好列数据直接写入flash中,使得不同的测试用例都能随机到一个不同的坏列信息,再通过读取flash中的数据,并与ram中的好列数据进行对比,即可真实反映flash的损坏信息,能够大量提高验证模块的覆盖率,提高验证的完备性;而且本发明的验证方法是在数字前端验证通过的,通过数字模拟真实flash的坏列,大大减小了芯片的流片时间。
41.以上结合最佳实施例对本发明进行了描述,但本发明并不局限于以上揭示的实施例,而应当涵盖各种根据本发明的本质进行的修改、等效组合。
当前第1页1  
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
网站地图