基于连分数存储的集成电路测试数据压缩方法与流程

文档序号:11229041阅读:485来源:国知局
基于连分数存储的集成电路测试数据压缩方法与流程

本发明涉及集成电路测试技术,特别是对系统芯片(system-on-a-chip,soc)的外建自测试(built-outself-test,bost)方法中测试数据压缩方法。



背景技术:

在soc设计中,越来越高的电路密度导致测试数据量急剧增加。更大的测试数据规模不仅要求更高的内存需求,而且还增加测试时间。itrs2013报告显示,soc-cp-consumersoc进行测试的最小测试数据量10年增加了近4倍,最低压缩比10年增加了近6倍。测试数据压缩技术通过减少测试数据量来解决这个问题,而不会影响系统的整体性能。

编码压缩技术采用比原始测试数据更短的代码字来存储测试数据,实现测试数据的压缩,是测试数据压缩技术中应用广泛的技术之一。该技术具有如下优点:采用的是无损压缩,不降低故障覆盖率;解压结构独立于被测电路,可以有效地保护ip核的知识产权;特别适用于不支持bist的cut,应用性更广泛。

按照编码原理,编码压缩技术可以分为游程编码和统计编码。游程编码按照测试数据中连续的0或1的个数进行编码,具有代表性的有efdr码、变游程码(vrlc)、混合定变长码(mfvlc)、交替-连续长度码(arlc)等;统计编码按照数据序列出现的频率进行编码,具有代表性的有统计码、选择huffman编码、字典码等。

游程编码作为编码压缩技术中的一种优秀解决方案,具有压缩方法简单、解压结构硬件开销小的优点。其解压结构包含2个计数器,当游程长度较大时,对应解压结构中的计数器的硬件开销明显增大。

所述游程包括0游程和1游程两种类型,其中0游程是指一个由至少1位的连续的0及结尾的1个1组成的字符段,1游程是指一个由至少1位的连续的1及结尾的1个0组成的字符段,连续0或连续1的位数称为游程长度(以下记为l)。如7位的二进制数据流0011110,前3位001可以认为是一个0游程,游程长度l为2,第3位的1理解为该游程结束标志;后4位1110可以认为是一个1游程,游程长度l为3,第4位的0理解为该游程结束标志。

现有文献已经公开了连分数的相关定义:设{an}为复数列,称形如的分数为连分数,记为[a0/a1/a2/a3/…],项数可为有限或无限。当项数有限,首项a0为整数,其余项a1,a2,a3,…为正整数时,称为有限简单连分数。公式中的a0,a1,a2,a3,……称为部分商。

何雅.连分数及其基本性质[j].长江工程职业技术学院学报,2004,21(1):50-52.进一步对连分数进行了介绍,并给出了定理:有理数都可以表示为有限简单连分数。该有限简单连分数可以逆转为唯一的分数形式的有理数。



技术实现要素:

本发明的目的在于克服现有技术的不足,提出一种基于连分数存储的集成电路测试数据压缩方法,可以实现测试数据的进一步压缩。

为解决上述技术问题,本发明的基于连分数存储的集成电路测试数据压缩方法,包括以下步骤:

a、采用自动测试模式生成工具atpg,生成确定的完全测试集t,所述的完全测试集t由有限个固定宽度的测试向量组成,记录该测试向量的宽度;

本领域技术人员都知晓:单个的测试向量包括有限个确定位和有限个无关位,确定位在当前测试向量中的位置不固定,确定位体现为二进制数0或1;无关位在当前测试向量中的位置不固定,无关位填充为0或1后,对集成电路测试结果无影响,且,确定位和无关位是计算机可判定的。在一个测试向量中,确定位和无关位的总位数称为测试向量的宽度。

b、将所有测试向量级联,得到测试数据包,记为s。

c、依次按位从测试数据包s中读取数据;调用游程计算程序,得到第一个游程r1,所述的游程计算程序根据相邻确定位向无关位填充0或1,以使得第一个游程r1的长度达到最大;记录所得游程的类型为c1、长度为l1;

d、继续从s中读取数据,调用游程计算程序,得到第二个游程r2,所述的游程计算程序根据相邻确定位向无关位填充0或1,以使得第二个游程r2的长度达到最大;记录所得游程的类型为c2、长度为l2。

e、依据步骤c所得到的第一个游程r1、步骤d所得到的第二个游程r2,调用编码程序,得到一组压缩编码,并将该压缩编码加入压缩数据包;本步骤中,所述的压缩编码依次由3部分组成:第一部分为双游程代码,第二部分为公约数代码,第三部分为连分数代码,所述编码程序包括:

e1、计算双游程代码,所述双游程代码为3位二进制代码,第一位为0,第二位以0或1表示第一个游程r1的类型c1,第三位以0或1表示第二个游程r2的类型c2;

e2、计算公约数代码:首先计算l1、l2的最大公约数为gcd,然后将该十进制数gcd转换为二进制形式的公约数代码,所述公约数代码包括前缀和后缀,所述的前缀和后缀为位数相同的二进制数,其编码方法:前缀由i个1和1个0构成,其中,;后缀为gcd+4转换成对应的二进制数后去掉最高位1的剩余部分;

e3、计算连分数代码:依据该最大公约数gcd,将l1/l2转化为最简分数,再将所得最简分数转换为一个有限简单连分数表示,所述的有限简单连分数包括由若干个正整数构成的部分商序列,即l1/l2=[a0/a1/a2/.../an];依次将单个十进制形式的部分商转换为二进制形式的部分商代码并级联,即得到当前第一个游程和第二个游程对应的连分数代码;

所述部分商代码包括前缀和后缀,所述的前缀和后缀为位数相同的二进制数,其编码方法:前缀由i个1和1个0构成,其中,;后缀为an+4转换成对应的二进制数后去掉最高位1的剩余部分。

f、判定测试数据包s是否读完,如否转步骤c继续编码,如是转步骤g。

g、得到完整的压缩数据包,程序结束。

所述游程计算程序包括多种实现方法。

所述步骤c、步骤d中的游程计算程序的第一种实现方法,包括以下步骤:

步骤cd-0、当前数据流清零;

步骤cd-1、从测试数据包s中按顺序逐位读入数据并加入当前数据流;记录读到的首个确定位数据为qd1;

步骤cd-2、继续从测试数据包s中按位读入数据并加入当前数据流,直至读取到一个不等于qd1的确定位,记录该第二个确定位为qd2;

步骤cd-3、将当前数据流中所有的无关位填充为qd1,将所得的以qd2结尾的数据流记录为一个游程,记录该游程的类型、长度。

所述步骤c、步骤d中的游程计算程序的第二种实现方法,包括以下步骤:

步骤cd0、当前数据流清零;

步骤cd1、从测试数据包s中按顺序向当前数据流读入1位数据;

步骤cd2、判断所读入的当前数据是否为无关位,如是转步骤cd3;如否,转步骤cd4;

步骤cd3、判断当前数据流长度是否为1,如是,从测试数据包s中向后寻找最接近的一个确定位,并将当前无关位填充为与该最接近的一个确定位相同的数据,将填充后的数据更新至当前数据流,然后转步骤cd1;如否,将当前无关位填充为与当前数据流中前一位相同的数据,将填充后的数据更新至当前数据流,然后转步骤cd1;

步骤cd4、判定当前数据与前一位是否相同,如是,则当前数据流不能构成游程,转步骤cd1;如否,则当前数据流构成一个游程,记录该游程的类型、长度。

特殊情况处理:测试数据包s可能出现长度不够的情况,即测试数据包s的末尾不足以构成最后的一组连续游程。在此种情况下,所述步骤f还包括:若出现测试数据包s长度不够,导致最后一组游程无法生成的情况,则向测试数据包s补充有限个无关位或游程,以完成最后一组编码;本领域技术人员都知晓,对于某种芯片,其测试向量的宽度是固定的,测试数据包s中有效数据的长度也是固定的,因而末尾补充的数据仅仅用于完成压缩过程,但并不影响测试结果。

本发明的优点在于:将测试数据中大量存在的无关位按照压缩需要填充为0或1,因而可以最大限度的扩大当前游程长度,且不影响解压后的芯片测试;将连续的两个长游程转换为多个短游程进行存储,减小了解压结构的硬件开销;同时,进一步压缩了测试数据。

附图说明

图1是本发明的基于连分数存储的集成电路测试数据压缩方法的总体流程图;

图2是本发明中游程计算程序的第一种算法的流程图;

图3是本发明中游程计算程序的第二种算法的流程图。

具体实施方式

下面结合附图对本发明的具体实施方式做进一步说明:

如图1可见,本发明的基于连分数存储的集成电路测试数据压缩方法,包括以下步骤:

a、采用自动测试模式生成工具atpg,生成确定的完全测试集t,所述的完全测试集t由有限个固定宽度的测试向量组成,记录该测试向量的宽度;

公知常识:单个的测试向量包括有限个确定位和有限个无关位,确定位在当前测试向量中的位置不固定,确定位体现为二进制数0或1;无关位在当前测试向量中的位置不固定,无关位填充为0或1后,对集成电路测试结果无影响,且,确定位和无关位是计算机可判定的。在一个测试向量中,确定位和无关位的总位数称为测试向量的宽度。

b、将所有测试向量级联,得到测试数据包,记为s;

c、依次按位从测试数据包s中读取数据;调用游程计算程序,得到第一个游程r1,所述的游程计算程序根据相邻确定位向无关位填充0或1,以使得第一个游程r1的长度达到最大;记录所得游程的类型为c1、长度为l1;

d、继续从s中读取数据,调用游程计算程序,得到第二个游程r2,所述的游程计算程序根据相邻确定位向无关位填充0或1,以使得第二个游程r2的长度达到最大;记录所得游程的类型为c2、长度为l2;

e、依据步骤c所得到的第一个游程r1、步骤d所得到的第二个游程r2,调用编码程序,得到一组压缩编码,并将该压缩编码加入压缩数据包;本步骤中,所述的压缩编码依次由3部分组成:第一部分为双游程代码,第二部分为公约数代码,第三部分为连分数代码,所述编码程序包括:

e1、计算双游程代码,所述双游程代码为3位二进制代码,第一位为0,第二位以0或1表示第一个游程r1的类型c1,第三位以0或1表示第二个游程r2的类型c2;

e2、计算公约数代码:首先计算l1、l2的最大公约数为gcd,然后将该十进制数gcd转换为二进制形式的公约数代码,所述公约数代码包括前缀和后缀,所述的前缀和后缀为位数相同的二进制数,其编码方法:前缀由i个1和1个0构成,其中,;后缀为gcd+4转换成对应的二进制数后去掉最高位1的剩余部分;

e3、计算连分数代码:依据该最大公约数gcd,将l1/l2转化为最简分数,再将所得最简分数转换为一个有限简单连分数表示,所述的有限简单连分数包括由若干个正整数构成的部分商序列,即l1/l2=[a0/a1/a2/.../an];依次将单个十进制形式的部分商转换为二进制形式的部分商代码并级联,即得到当前第一个游程和第二个游程对应的连分数代码;

所述部分商代码包括前缀和后缀,所述的前缀和后缀为位数相同的二进制数,其编码方法:前缀由i个1和1个0构成,其中,;后缀为an+4转换成对应的二进制数后去掉最高位1的剩余部分;

本发明中,由于l1、l2均为正整数,因此l1/l2所得的连分数都是有限简单连分数。其中,a0、a1、a2、a3、…称为部分商。根据该部分商序列进行逆转换,所得有理数是唯一的。也就是说,在本发明中,l1/l2可以转换为一个唯一的有限简单连分数,该有限简单连分数可以逆转为唯一的分数形式的有理数。因而,依据压缩编码中的连分数代码,可以唯一的还原l1/l2;结合步骤jy2的最大公约数gcd,可以还原为十进制的l1、l2。

至于如何将一个分数形式的有理数转换为对应的有限简单连分数,以及如何将一个有限简单连分数转换为对应的分数形式的有理数,现有数学文献中已经有大量记载,本发明不再详述。

f、判定测试数据包s是否读完,如否转步骤c继续编码,如是转步骤g;

g、得到完整的压缩数据包,程序结束。

□游程计算程序的第一种实现方法

如图2可见,所述步骤c、步骤d中的游程计算程序有多种实现方法,第一种实现方法,包括以下步骤:

步骤cd-0、当前数据流清零;

步骤cd-1、从测试数据包s中按顺序逐位读入数据并加入当前数据流;记录读到的首个确定位数据为qd1;

步骤cd-2、继续从测试数据包s中按位读入数据并加入当前数据流,直至读取到一个不等于qd1的确定位,记录该第二个确定位为qd2;

步骤cd-3、将当前数据流中所有的无关位填充为qd1,将所得的以qd2结尾的数据流记录为一个游程,记录该游程的类型、长度。

□游程计算程序的第二种实现方法

如图3可见,所述步骤c、步骤d中的游程计算程序的第二种实现方法,包括以下步骤:

步骤cd0、当前数据流清零;

步骤cd1、从测试数据包s中按顺序向当前数据流读入1位数据;

步骤cd2、判断所读入的当前数据是否为无关位,如是转步骤cd3;如否,转步骤cd4;

步骤cd3、判断当前数据流长度是否为1,如是,从测试数据包s中向后寻找最接近的一个确定位,并将当前无关位填充为与该最接近的一个确定位相同的数据,将填充后的数据更新至当前数据流,然后转步骤cd1;如否,将当前无关位填充为与当前数据流中前一位相同的数据,将填充后的数据更新至当前数据流,然后转步骤cd1;

步骤cd4、判定当前数据与前一位是否相同,如是,则当前数据流不能构成游程,转步骤cd1;如否,则当前数据流构成一个游程,记录该游程的类型、长度。

□代码举例

为了便于理解,结合一段代码对本发明的具体实施方式进行进一步的说明。本实施中,游程计算程序(步骤c、步骤d)采用前述的第一种实现方法。

a、采用自动测试模式生成工具atpg,生成确定的完全测试集t。不失一般性,设t={00x0x00x,0x0x0x00,0x0xx00x,0x00xx00,x0x00xx0,0xx0xx0x,1x0x0x0x,00x0x000,x00x000x,0xx0x0x0,x0x000xx,0x01…}。本测试集t中,单个向量宽度为8。在每个测试向量内部,0、1均为确定位,x为无关位。

b、将所有测试向量级联,即将一个向量的尾部接另一个向量的首部,记为s。则s=00x0x00x0x0x0x000x0xx00x0x00xx00x0x00xx00xx0xx0x1x0x0x0x00x0x000x00x000x0xx0x0x0x0x000xx0x01…。

c、依次按位从测试数据包s中读取数据;调用游程计算程序,得到第一个游程r1,所述的游程计算程序根据相邻确定位向无关位填充0或1,以使得第一个游程r1的长度达到最大;具体步骤:

步骤cd-0、当前数据流清零;

步骤cd-1、从测试数据包s中按顺序逐位读入数据并加入当前数据流;读取到第一位时,当前数据是确定位,记录该确定位数据为qd1=0;

步骤cd-2、继续从测试数据包s按位读取数据并加入当前数据流,直至读取到第7个测试向量的第一位时(总第49位数据),该位数据为1且为确定位,qd2=1;qd2≠qd1;

步骤cd3、将当前数据流中所有的无关位填充为qd1,本实施例中,当前数据流填充后为0000000000000000000000000000000000000000000000001,当前数据流长度49,按游程定义,当前数据流构成一个游程,游程长度l1=48,游程类型c1=0。根据背景技术所述游程定义,游程结尾的结束位不计入游程长度,因而当前数据流长度与所得游程长度之差为1。

d、重新调用游程计算程序,以期望得到第二个游程r2,

步骤cd-0、当前数据流清零;

步骤cd-1、继续从s中读取数据,即读入总第50位,该位为无关位,加入当前数据流,继续读取第51位数据为确定位0,记录该确定位数据为qd1=0;

步骤cd-2、继续从测试数据包s按位读取数据并加入当前数据流,直至读取到第12个测试向量的第4位(总第92位数据),得到一个确定位为1,qd2=1;qd2≠qd1;

步骤cd-3、将当前数据流中所有的无关位填充为qd1,本实施例中,当前数据流填充后为0000000000000000000000000000000000000000001,当前数据流长度43,能够构成第二个游程,得到第二个游程r2为0游程,流程类型c2=0、长度l2=42。

e、依据步骤c所得到的第一个游程r1、步骤d所得到的第二个游程r2,调用编码程序,计算结果如下:

e1、由于第一个游程r1、第二个游程r2均为0游程,双游程代码为000。

e2、由于l1=48,l2=42,最大公约数gcd=6。

,公约数代码前缀由2个1和1个0组成,为110;,去掉二进制表示的最高位1后,得到后缀为010,前缀、后缀位数相等。故按公式计算公约数代码为110010。

e3、依据该最大公约数gcd,将l1/l2转化为最简分数,令r1=r1/gcd=48/6=8,r2=r2/gcd=42/6=7,得到的l1/l2=8/7为最简分数。再将所得最简分数转换为连分数表示,即8/7=[1/7];本步骤得到一个有限简单连分数,其包含2个部分商,分别为1、7。

第一个部分商1(十进制),按照本发明的方法计算,其前缀为10,后缀为01,对应代码为1001;第二个部分商7(十进制),按照本发明的方法计算,前缀为110,后缀为011,对应代码为110011,第一个部分商代码、第二个部分商代码级联得连分数代码为1001110011。

双游程代码、公约数代码、连分数代码级联,当前所得两个游程构成的压缩编码为0001100101001110011,将其加入压缩数据包,并继续循环直至压缩完毕。可见,测试数据包s的前92位代码压缩后形成19位代码,压缩比较高。

n解压方法

本发明压缩数据包的解压原理:每段压缩编码由第一部分双游程代码,第二部分公约数代码,第三部分连分数代码。

jy1、依次按位从压缩数据包中读取数据,读取到0时,可判断为双游程代码起始,连续读取3位得到双游程代码,还原出当前段第一个游程r1、第二个游程r2的类型;

jy2、继续按位读取数据,读取到一个1游程,可判断为公约数代码起始,按照所读取的1游程长度,继续读取对应位数(游程长度加1位)的数据得到公约数代码,依据公约数代码可还原出十进制形式的最大公约数gcd;

jy3、继续按位读取数据,读取到下一个1游程,可判定为当前部分商代码起始,按照所读取的1游程长度,继续读取对应位数(游程长度加1位)的数据得到当前部分商代码,转换为对应的十进制部分商;

本发明中,公约数代码、部分商代码均为偶数位的二进制数,其前缀均表现为1游程,其后缀位数均为前缀对应1游程的长度加1,因而,根据所读取到的1游程可判定后续读入位数,程序因而可准确的读取一段正确的代码。且公约数代码、部分商代码的编码形式相同,因而,加压缩程序更为简单。

jy4、继续按位读取数据,若读取到的数据为0,则说明已经读取到一段完整的代码,还原数据并转步骤jy1,否则转步骤jy3继续得到下一个部分商。

当前数据还原原理:依据步骤jy1还原当前段第一个游程r1、第二个游程r2的类型;依据步骤jy2得到最大公约数gcd;依据步骤jy3得到的多个数据还原出部分商序列;依据最大公约数gcd、部分商序列可还原出所得当前段第一个游程r1、第二个游程r2的长度l1、l2,即可得到解压还原后的数据,该解压数据的所有确定位均与压缩前完全一致,无关位的数据是否一致并不影响集成电路芯片的测试效果。

本发明的具体实施方式包括但不局限于上述实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但仍然落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1