基于双游程交替编码的芯片测试数据传输方法

文档序号:7544810阅读:165来源:国知局
基于双游程交替编码的芯片测试数据传输方法
【专利摘要】本发明提出了一种基于双游程交替编码的芯片测试数据传输方法,它以FDR码为基础,是一种变长到变长的压缩方法,根据测试集中除了有大量的0游程外,还有大量的1游程,提出了对0/1游程交替编码的方法,后一游程类型可以根据前一游程类型转变得到,这样在代码字中不需要表示游程类型,减少了游程所需代码字的长度,从而有效提高了压缩率。同时该方法中解码电路简单且独立于被测电路。基于此,本方法具有极好的应用前景。
【专利说明】基于双游程交替编码的芯片测试数据传输方法
【技术领域】
[0001]本发明涉及集成电路测试方法,具体涉及一种系统芯片的测试数据处理方法。
【背景技术】
[0002]随着工艺水平的提高,系统芯片SOC(System-on-a-chip)上集成的晶体管数目急剧增加。同时为了加速SoC的设计过程通常会广泛采用IP (Intellectual Property)核复用的设计技术。为了保证产品无缺陷,就必须对芯片进行测试,目前SoC测试面临的困难越来越多,测试数据量过大是当前面临的困难之一。为了应对测试数据急速增长的压力,通常行之有效的方法是采用压缩技术对测试数据进行压缩。测试数据压缩技术首先将测试集Td按照一定的编码方法进行编码,编码后的结果记为TE,并将Te存储到ATE中。当对电路进行测试时,先将Te通过ATE的传输通道传送到芯片上的解压电路,解压电路将Te解压得到原测试集TD,并将Td施加到待测电路完成测试。采用压缩技术第一降低了 ATE存储空间的需求,第二降低了 ATE传输通道的压力,同时也减少了传输时间。
[0003]依据所采用编码的原理,可以将测试数据压缩方法分为基于统计编码、基于字典编码和基于游程编码等。在基于统计编码的压缩技术中,Huffman编码虽然能够得到最短的平均码字,但是它的解码电路较为复杂。基于字典编码的方案中第一需要存储字典,第二由于需要根据字典索引去找原始数据,增加了访问存储器的时间。基于游程的编码方案具有较高的数据压缩率和较小的解码电路开销,Golombm编码、FDRm编码和AFRm编码等都属于基于游程的编码方案,但上述方案仍然存在着压缩效率不高,编码负责,解码时间长,测试成本高的缺陷。
[0004]游程包括O游程和I游程两种类型,其中O游程是指一个由至少I位的连续的O及结尾的I个I组成的字符段,I游程是指一个由至少I位的连续的I及结尾的I个O组成的字符段,连续O或连续I的位数称为游程长度I (以下记为L);0游程中最后I位的1、1游程中最后I位的O理解为游程结束标志,不计入游程长度。如0000111111111111111111110中,00001是O游程,游程长度L为4,第5位的I理解为该游程结束标志;11111111111111111110是I游程,游程长度L为19,第20位的O理解为该游程结束标志。

【发明内容】

[0005]本发明所要解决的问题在于提供一种基于双游程交替编码的测试数据压缩与解压缩方法,这种方法能够达到提高压缩效率、降低测试成本的目标。
[0006]为解决上述技术问题,本发明的基于双游程交替编码的芯片测试数据传输方法,包括以下步骤:
A、编码步骤;
(1)初始化标志位flag,该flag对应一个期望的游程类型;并记录该flag的初始值为f;
(2)按位读取测试数据编码集,获取当前游程,并求得对应的游程代码字,所述的游程代码字由互相对应的组前缀和组后缀组成;所述的组前缀为一个根据游程长度L确定的O游程或I游程,所述的组后缀是一个根据游程长度L确定的二进制数;
求游程代码字的方法:
(2.1)求组号;
测试数据编码集中的每个游程根据其长度L归属于一个组k,以2为底数,以L+5为真数求对数后取整再减I,得到每个L值对应的k值;
(2.2)求组前缀;
若k=l,则组前缀为10 ;
否则,若2k+1-5≤L≤2+1-6+2k,则组前缀为I个长度为k的O游程;
否则,若2k+1-6+2k < L≤2k+2-6,则组前缀为I个长度为k的I游程;
(2.3)求组后缀;
若k=l,L=I,则组后缀为O ;若k=l,L=2,则组后缀为I ;
否则,以L+5为被除数,以2k为除数,求余数m,将m转换为一个二进制数η,若该二进制数η的位数不够k位,则加入若干个前导的O使之达到k位,即为组后缀;
组前缀与组后缀连结组合即得游程代码字;
(3)判断当前游程类型与flag期望的游程类型是否相同,若相同,则flag取反;若不同则输出分隔符01 ;
(4)输出当前游程对应的游程代码字;
(5)重复(2)-(4)直到整个测试集编码结束,得到连续的经过编码的测试集;
B、将上述步骤所得的经过编码的数据输入被测芯片的解码器;
C、解码步骤;
(a)解码器从经过编码的数据中读取一个游程并暂存;
(b)判断读取的游程是否为分隔符01,如是则f取反,继续读取下一个游程;否则判定读得的游程为组前缀;
(c)根据组前缀的位数计算组后缀的位数L_s,再连续读取L_s位数据,得到组后缀,根据组前缀和组后缀得到游程代码字;
(d)根据游程代码字确定目标游程的长度L,根据f确定目标游程的类型,并输出一个目标游程;
目标游程的长度值L的计算方法:依次取二进制数1、取组前缀的最高位、取组后缀组成一个二进制数,转换为十进制后减5即为L ;
(e)f取反;
(f)重复上述(a)-(e)步骤直到整个经过编码的测试集解码结束。
[0007]所述的解码器由一个有限状态机FSM、一个k+2位计数器、一个1g2 (k+2)位计数器和一个异或门构成。
[0008]本发明提出了一种变长到变长的压缩方法,它是一种双游程交替的编码方法。这种方法具备以下特点:(I)将测试集中的数据分类为O游程和I游程,并根据游程长度进行编码,对于大部分的游程,编码后所取得的游程代码字的长度小于游程本身长度,因而实现了较高压缩比的数据压缩;(2)相同长度的0/1游程使用相同的游程代码字,游程代码字只与游程长度相关而与游程类型无关,减小了编码复杂性;(3)对于实际的测试集编码,两两相邻的游程其类型不相同的几率较大,本方法默认状态为0/1游程交替出现,后一游程类型根据前一游程类型转变得到,这样在游程代码字中不需要表示游程类型,减少了游程代码字的长度;因此能够达到进一步提高压缩效率、降低测试成本的目标;如相邻游程类型相同,则在编码后的游程代码字序列中以01作为分隔符,在码表中,01是不作为组前缀出现的,因而可以避免误读。
[0009]本方法将测试集中的二进制代码分割为游程进行读取,并按照游程长度进行编码,转换为游程代码字,实现测试集的压缩,测试集的编码过程在芯片外部完成,芯片内部解码器只需要计数、加减等简单运算功能,因而进一步降低了芯片开销、解码时间和测试成本。同时本方法不需要预制码表,程序适应性更为广泛。
【专利附图】

【附图说明】
[0010]图1是使用本发明进行测试集编码的流程图;
图2是使用本发明对经过编码的测试数据进行解压过程的流程图;
图3是本发明的解码器的一种实现方式的框图。
【具体实施方式】
[0011]下面结合附图对本发明做进一步说明。
[0012]如图1、图2、图3 可见,本发明的基于双游程交替编码的芯片测试数据传输方法,包括以下步骤:
A、如图1可见,编码步骤包括:
(I)初始化标志位flag,该flag对应一个期望的游程类型;并记录该flag的初始值为f ;记录flag的初始值为f的目的,是为后续的解码过程提供首个游程类型参照。
[0013](2)按位读取测试数据编码集,获取当前游程,并求得对应的游程代码字,所述的游程代码字由互相对应的组前缀和组后缀组成;所述的组前缀为一个根据游程长度L确定的O游程或I游程,所述的组后缀是一个根据游程长度L确定的二进制数。
[0014]求游程代码字的方法:
(2.1)求组号;
测试数据编码集中的每个游程根据其长度L归属于一个组k,以2为底数,以L+5为真数求对数后取整再减I,得到每个L值对应的k值。
[0015](2.2)求组前缀;
若k=l,则组前缀为10 ;
否则,若2k+1-5≤L≤2k+1-6+2k,则组前缀为I个长度为k的O游程;
否则,若2k+1-6+2k < L≤2k+2-6,则组前缀为I个长度为k的I游程;
由游程定义,长度为k的O游程,是指k位的O加上I位的I ;长度为k的I游程,是指k位的I加上I位的O ;结尾的1、0作为该游程结束标志。
[0016]本发明中,对测试数据编码集按照游程为单位读取并编码,编码后的游程代码字的组前缀仍以游程的形式表示,而组后缀由组前缀及编码前的游程长度计算得到。原始测试数据编码集中的每一游程根据其长度可编码得到一个唯一的游程代码字,但该游程代码字并不反映游程类型。[0017]按照上述方法,在每个k组内,包含2k+1条记录,前半组的组前缀都为O游程,后半组的组前缀都为I游程。
[0018](2.3)求组后缀;
若k=l,L=I,则组后缀为O ;若k=l,L=2,则组后缀为I ;
否则,以L+5为被除数,以2k为除数,求余数m,将m转换为一个二进制数η,若该二进制数η的位数不够k位,则加入若干个前导的O使之达到k位,即为组后缀。
[0019]组前缀与组后缀连结组合即得游程代码字。
[0020]由以上方法可知,字符串01是不做为组前缀出现的,而本发明在解码时,首先读取组前缀,再根据组前缀得到组后缀的位数并读取相应位数。因此,本发明将01作为分隔符,不会出现误读的情况。
[0021 ] k>l时,第k组包括2k+1条记录。在该组的前半组,组后缀有2k种,最小为k个O组成的二进制数,最大为k个I组成的二进制数,随L的增大,组后缀在前半组递增。在后半组,组后缀同样有2k种,最小为k个O组成的二进制数,最大为k个I组成的二进制数,随L的增大,组后缀在后半组也是递增的。
[0022]也就是说在第k组,由组前缀与组后缀组成的游程代码字具备唯一性,k值不同时,游程代码字位数不同,因而本方法中,每一种长度的游程都可以被一个唯一的游程代码字所表达。
[0023](3)判断当前游程类型与flag期望的游程类型是否相同,若相同,则flag取反;若不同则输出分隔符01。
[0024](4)输出当前游程对应的游程代码字;
默认状态下,相邻游程类型不同,此时直接输出下一个游程对应的游程代码字。若下一游程与当前游程类型相同,则输出一个分隔符,该分隔符01是能被解码程序识别的。
[0025]flag取反,表示本方法期望的下一游程类型。如flag当前值为0,表示当前期望O游程,取反后flag变为I,表示期望I游程。
[0026](5)重复(2)-(4)直到整个测试集编码结束,得到连续的经过编码的测试集。
[0027]以下根据上述方法进行编码举例:
原始测试数据:00001 11111111111111111110 1110 00000001 (41bits);
编码后的数据:00101 1110000 01 00100 11000(24bits),其中 00101、1110000、00100、11000为相应游程对应的游程代码字,由于11111111111111111110、1110同于I游程,因此在它们之间插入01作为分隔符。
[0028]特殊情况的处理:对于测试集的结尾,可能出现不能构成游程的情形,例如结尾为若干个连续的O、若干个连续的I等情形,此时该数据不能以一个游程被编码程序读取。为解决此问题,则需要在所获得的编码后面加上游程结束标志,让其构成一个游程。例如最后得到的结果是111111,则在其后添加I位0,变成1111110 ;例如得到得到的结果是00000,则添加I位1,得到000001。经过处理后,测试集的结尾也能被编码。在后续的解码步骤,能够解码得到原始的结尾数据以及附加的游程结束标志,而在芯片测试过程中,对测试集数据长度是有要求的,因而在读取测试数据时,最后附加的游程结束标志不被读入,因而不影响测试结果。
[0029]B、将上述步骤所得的经过编码的数据输入被测芯片的解码器。[0030]C、本发明的解码步骤包括:
(a)解码器从经过编码的数据中读取一个游程并暂存。
[0031]如前所述,经过编码的测试集中,每段游程代码字的组前缀的编码实际是一个O或I游程,但是不包括01游程。
[0032](b)判断读取的游程是否为分隔符01,如是则表示目标游程类型与期望值不同,f取反,继续读取下一个游程;读取的游程不是分隔符01,则判定读得的游程为组前缀。
[0033](c)根据组前缀的位数计算组后缀的位数L_s,再连续读取L_s位数据,得到组后缀,根据组前缀和组后缀得到游程代码字;组前缀的位数减I即为组前缀所示游程长度,也即是组后缀的位数。
[0034](d)根据游程代码字确定目标游程的长度L,根据f确定目标游程的类型,并输出一个目标游程。
[0035]目标游程的长度值L的计算方法:依次取二进制数1、取游程代码字的最高位(左起第一位)、取组后缀组成一个二进制数,转换为十进制后减5即为L ;
此时,实现了将读得的游程代码字还原为原始的游程编码。
[0036](e) f取反。此步骤与编码过程中的flag取反对应,表示默认为相邻游程类型不同。
[0037](f)重复上述(a)-(e)步骤直到整个经过编码的测试集解码结束。
[0038]上述解码步骤中,根据f确定游程类型,根据游程代码字确定游程长度,默认状态下f取反,表示期望相邻游程类型不同,如遇01则f再取反。以上过程正好完成了前述编码过程的解码,即实现了压缩与解压缩。
[0039]如图2、图3可见,以下给出解码器设计的一种【具体实施方式】,本发明包括但并不局限于此实施方式。
[0040]本实施例中,期待的初始游程为O游程,flag置为O,相应的f初始为O。
[0041]游程的长度L可通过将1+组前缀起始位+所有组后缀组成的二进制数换算为十进制再减5即得到,即L=(lXt)2-5,其中X为对应编码的组前缀起始位、t为组后缀。如游程长度L=5,查表得对应的游程代码字为00110,其中001表现为一个长度为2的O游程,因而可判断为组前缀,10为组后缀,因而得到1+组前缀起始位+组后缀(IOlO)2 - 5=5 ;如游程长度L=8,对应的码字为11001,组前缀110,组后缀01,因而得到(IlOl)2 — 5 = 8。
[0042]因此使用一个k+2位计数器就可以输出相应的位串。而游程类型通过标志位来确定,可用一个异或门将有限状态机FSM的输出与标志位异或得到最后的data。
[0043]这种解压结构简单,独立于被测电路且大小可变,仅需要一个FSM (有限状态机)、一个k+2位计数器、一个1g2(k+2)位计数器和一个异或门。解压结构框图见附图3,其中的信号名称和功能描述见下表。
【权利要求】
1.一种基于双游程交替编码的芯片测试数据传输方法,包括以下步骤: A、编码步骤; (1)初始化标志位flag,该flag对应一个期望的游程类型;并记录该flag的初始值为f; (2)按位读取测试数据编码集,获取当前游程,并求得对应的游程代码字,所述的游程代码字由互相对应的组前缀和组后缀组成;所述的组前缀为一个根据游程长度L确定的O游程或I游程,所述的组后缀是一个根据游程长度L确定的二进制数; 求游程代码字的方法: (2.1)求组号; 测试数据编码集中的每个游程根据其长度L归属于一个组k,以2为底数,以L+5为真数求对数后取整再减I,得到每个L值对应的k值; (2.2)求组前缀; 若k=l,则组前缀为10 ; 否则,若2k+1-5≤L≤2k+1-6+2k,则组前缀为I个长度为k的O游程; 否则,若2k+1-6+2k < L≤2k+2-6,则组前缀为I个长度为k的I游程; (2.3)求组后缀; 若k=l,L=I,则组后缀为O ;若k=l,L=2,则组后缀为I ; 否则,以L+5为被除数,以2k为除数,求余数m,将m转换为一个二进制数η,若该二进制数η的位数不够k位,则加入若干个前导的O使之达到k位,即为组后缀; 组前缀与组后缀连结组合即得游程代码字; (3)判断当前游程类型与flag期望的游程类型是否相同,若相同,则flag取反;若不同则输出分隔符01 ; (4)输出当前游程对应的游程代码字; (5)重复(2)-(4)直到整个测试集编码结束,得到连续的经过编码的测试集; B、将上述步骤所得的经过编码的数据输入被测芯片的解码器; C、解码步骤; (a)解码器从经过编码的数据中读取一个游程并暂存; (b)判断读取的游程是否为分隔符01,如是则f取反,继续读取下一个游程;否则判定读得的游程为组前缀; (c)根据组前缀的位数计算组后缀的位数L_s,再连续读取L_s位数据,得到组后缀,根据组前缀和组后缀得到游程代码字; (d)根据游程代码字确定目标游程的长度L,根据f确定目标游程的类型,并输出一个目标游程; 目标游程的长度值L的计算方法:依次取二进制数1、取组前缀的最高位、取组后缀组成一个二进制数,转换为十进制后减5即为L ; (e)f取反; (f)重复上述(a)-(e)步骤直到整个经过编码的测试集解码结束。
2.根据权利要求1所述的基于双游程交替编码的芯片测试数据传输方法,其特征在于:所述的解码器由一个有限状态机FSM、一个k+2位计数器、一个1g2 (k+2)位计数器和一个异或门构成。
【文档编号】H03M7/30GK103746704SQ201410000299
【公开日】2014年4月23日 申请日期:2014年1月1日 优先权日:2014年1月1日
【发明者】程一飞, 詹文法, 吴琼, 朱世娟, 吴海峰, 何姗姗, 暴阳, 黄丽 申请人:安庆师范学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1