基于前后游程长度编码的测试数据压缩及解压方法与流程

文档序号:30383375发布日期:2022-06-11 05:29阅读:199来源:国知局
基于前后游程长度编码的测试数据压缩及解压方法与流程

1.本发明涉及计算机信息领域,具体涉及一种测试数据压缩及解压方法。


背景技术:

2.在信息时代,各行各业都离不开电子设备,而集成电路芯片是一切设备的核心,在集成电路生产过程中,测试是不可或缺的流程,它对生产成本有很大影响。在测试中,测试时间是影响生产成本的因素之一,因此如何减少测试时间、降低测试成本是芯片行业一直关注的问题。
3.随着集成电路的发展,芯片持续向更小的外形尺寸发展,同时集成度也越来越高,这大大增加了测试难度和测试成本。为了减少测试成本,对测试数据进行压缩是一种常见方法。基于编码的测试数据压缩方法有字典编码,哈夫曼编码,golomb,fdr,efdr,afdr,交替和连续长度编码,variable-tail编码,变游程编码,混合定变长码,双游程交替编码等。以上方法编码的长度和码字的长度既有固定的也有可变的,但编码和码字之间却是一一对应的,它们的编码过程是相对独立的,只考虑单个游程长度如何编码,没从全局分析游程长度之间的关系。因此是否能够找到具有一定规律的游程长度序列,然后用特殊编码表示它们,从而提高压缩率。


技术实现要素:

4.本发明所要解决的技术问题在于提供一种基于前后游程长度编码的测试数据压缩及解压方法,能提高压缩效率,降低硬件开销。
5.为解决上述技术问题,本发明的基于前后游程长度编码的测试数据压缩及解压方法,包括:a.压缩步骤:(a1)构建码表:(a1.1)所述码表包含以下字段:组号:以一个十进制数k表示;标称长度:以一个十进制数lx表示;前缀(0游程):以一组由若干个0和1个1组成的二进制代码表示;前缀(1游程):以一组由若干个1和1个0组成的二进制代码表示;后缀:以一组二进制代码表示;码字(0游程):以一组二进制代码表示;所述码字(0游程)由前缀(0游程)和后缀连续排列而成;码字(1游程):以一组二进制代码表示;所述码字(1游程)由前缀(1游程)和后缀连续排列而成;所述码表中的记录按照标称长度递增排列并编组,组号k升序排列;标称长度lx最小为0,组号k最小为1;
(a1.2)在所述码表中,第k组包含2
k+1
条记录,第k组前缀(0游程)由k个0和一个1组成,第k组前缀(1游程)由k个1和一个0组成,第k组后缀由最小的(k+1)位二进制数至最大的(k+1)位二进制数依次排序;(a1.3)0游程指由若干个连续的0加上1个1组成的二进制代码,1是0游程结束标志,其游程长度l指0的个数;1游程指由若干个连续的1加上1个0组成的二进制代码,0是1游程结束标志,其游程长度l指1的个数;(a1.4)在所述码表中,标称长度为0时,所得两个码字作为特殊码字;(a2)填充无关位:本步骤依次按位读取待压缩数据,并将无关位填充为二进制数0或1;(a3)对步骤(a2)所得数据按位进行读取,得到第一个游程,记录其游程类型、游程长度;查表得到码字,并加入压缩后数据队列;(a4)继续读取数据得到当前游程,若当前游程与前一游程的长度相同,则根据当前游程类型得到特殊码字并加入压缩后数据队列;若当前游程与前一游程的长度不同,则根据当前游程长度、游程类型查表得到码字并加入压缩后数据队列;若当前游程与前一游程长度相同,且当前游程为0游程,则当前游程记为特殊码字0100;若当前游程与前一游程长度相同,且当前游程为1游程,则当前游程记为特殊码字1000;(a5)重复步骤(a4),直到所有游程编码完成,编码后的数据即为压缩后的数据。
6.作为优选,还包括:b.解压步骤:(b1)按位读取待解压数据,直至得到一个0游程或1游程,所得游程即为前缀,记录游程类型和前缀长度,按所记录的前缀长度计算后缀长度并读取相应位数的数据为后缀;(b2)判定步骤(b1)所得后缀是否为特殊码字的后缀;若否,则在步骤(b1)所得后缀的高位添加一个1,得到一个新的二进制数,将其转换为十进制数再减去4,得到标称长度,将该标称长度作为当前游程长度、将步骤(b1)所得游程类型作为当前游程类型,还原出一个游程作为解压后游程,记录其长度为l;若是,则,当前解压后游程的类型依据步骤(b1)所得前缀确定、长度依据前一个解压后游程的长度确定;依据类型、长度还原出一组游程作为解压后游程;将所得解压后游程加入解压数据;(b3)重复步骤(b1)(b2)直至解压缩完成,得到完整的解压数据用于芯片测试。
7.作为计算机程序实现方式之一,所述解压步骤具体包括:(c1)配置解码器所述解码器包括一个有限状态机(fsm)、一个k+1位计数器、一个log2(k+1)位计数器、1个m位寄存器和一个异或门;(c2)解压流程:a)令en=1,fsm接收bit_in的数据;inc2置为高电平;bit_in的首位发送给flag, log2(k+1)位计数器加1,此时v为低电平,输出无效;b)fsm继续从bit_in接收数据,inc2为高电平,每传入一位log2(k+1)位计数器加
1,同时与flag值进行同或,当bit_in与 flag同或值为0时,前缀输入结束;c)将后缀部分从counter_in移入k+1位计数器,shift和dec2置为高电平,即每移入一位数据,log2(k+1)位计数器减1,直到log2(k+1)位计数器为空,rs2为1,后缀输入结束;d)若此时k+1位计数器中的值为100(二进制),v置为低电平,输出无效,c置为高电平,控制m位寄存器输入输出,再执行步骤(f);e)m位寄存器重置,fsm通过d输出0到m位寄存器;dec1置为高电平,k+1位计数器每次减1,输出一个0,直到k+1位计数器值为4,rs1为1;最后输出一个1;f)将v置为高电平,表示输出有效,将m位寄存器的数据依次与flag进行异或的结果输出;g)重复上述步骤a)至步骤f),直到解压完毕。
8.本方法的技术优点体现在:(1)对测试数据的无关位进行填充后,将较长的0游程或1游程编码为较短的码字,实现第一级压缩功能;码字具备可还原性,解压后不影响芯片测试。(2)填充后的测试数据相邻游程长度相等时,使用较短的特殊编码代替较长的码字,实现第二级压缩功能。(3)相邻游程长度相同时不论游程类型是否相同均可使用特殊码字,其使用频次高,进一步提高了压缩效率。
附图说明
9.图1 是本发明中压缩步骤所涉及的编码流程图;图2 是本发明中解压步骤所涉及的解码电路图。
具体实施方式
10.以下结合附图对本发明的具体实施方式做进一步说明。
11.a.压缩步骤:(a1)构建码表:(a1.1)所述码表包含以下字段:组号:以一个十进制数k表示;标称长度:以一个十进制数lx表示;前缀(0游程):以一组由若干个0和1个1组成的二进制代码表示;前缀(1游程):以一组由若干个1和1个0组成的二进制代码表示;后缀:以一组二进制代码表示;码字(0游程):以一组二进制代码表示;所述码字(0游程)由前缀(0游程)和后缀连续排列而成;码字(1游程):以一组二进制代码表示;所述码字(1游程)由前缀(1游程)和后缀连续排列而成;所述码表中的记录按照标称长度递增排列并编组,组号k升序排列;标称长度lx最小为0,组号k最小为1;(a1.2)在所述码表中,第k组包含2
k+1
条记录,第k组前缀(0游程)由k个0和一个1组成,第k组前缀(1游程)由k个1和一个0组成,第k组后缀由最小的(k+1)位二进制数至最大的(k+1)位二进制数依次排序;
此时得到表1:表1
ꢀꢀ
码表定义与说明:(a1.3)游程包括0游程和1游程;0游程指由若干个连续的0加上1个1组成的二进制代码,1是0游程结束标志,其游程长度l指0的个数;1游程指由若干个连续的1加上1个0组成的二进制代码,0是1游程结束标志,其游程长度l指1的个数;(a1.4)在所述码表中,标称长度为0时,所得两个码字作为特殊码字;对于同一个游程,标称长度lx等于游程长度l。
12.表1中,标称长度lx等于2的(k+1)次方减4加转化为十进制的后缀。故,计算可得标称长度lx为0的记录,在所述码表中,标称长度lx=0时得到两个码字0100、1000,该两个码字会且仅会在标称长度lx=0时出现。而在芯片测试数据处理全过程中,对于任何一个游程,都不会出现游程长度l为0的情况;故将表中以上两个码字作为特殊码字并在压缩、解压缩过程中使用,其使用规则:若当前游程与前一游程长度相同,且当前游程为0游程,则当前游程记为0100;若当前游程与前一游程长度相同,且当前游程为1游程,则当前游程记为1000;根据本码表,待压缩数据中每一个长度不同的0游程都能对应一个码字(0游程),待压缩数据中每一个长度不同的1游程都能对应一个码字(1游程);若当前游程与前一游程长度相等,其在压缩时使用特殊码字表示;在长度相同的情况下,当前游程类型与前一游程类型相同或不同时均可使用特殊码字,该特殊码字能进一步提高压缩效率。
13.(a2)填充无关位:本步骤依次按位读取待压缩数据,并将无关位填充为二进制数0或1;(a3)对步骤(a2)所得数据按位进行读取,得到第一个游程,记录其游程类型、游程长度;查表得到码字,并加入压缩后数据队列;(a4)继续读取数据得到当前游程,若当前游程与前一游程的长度相同,则根据当
前游程类型得到特殊码字并加入压缩后数据队列;若当前游程与前一游程的长度不同,则根据当前游程长度、游程类型查表得到码字并加入压缩后数据队列;(a5)重复步骤(a4),直到所有游程编码完成,编码后的数据即为压缩后的数据。
14.依据以上规则,本领域技术人员可以通过多种途径实现数据压缩。参见图1,以下示出步骤(a3)到步骤(a5)的程序实现方法之一:(a3)对步骤(a2)所得数据按位进行读取,每读取到一个游程,记录其类型至游程类型队列t[i]、记录其长度至游程长度队列l[i],游程总数量记为n;定义循环参数i=0,定义压缩后数据队列ans;根据t[i]、l[i]查表得到首个游程的码字,并加入压缩后数据队列ans;(a4)i=i+1;若l[i]-l[i-1]==0且t[i]==0,则得到码字0100;若l[i]-l[i-1]==0且t[i]==1,则得到码字1000;若l[i]-l[i-1]《》0,则查表得到码字;本步骤所得码字继续加入压缩后数据队列ans;(a5)重复步骤(a4)直至i=n-1。
[0015]
下面通过一个实例来说明本编码方法,设原始测试数据为d1=11xx110 xxx0001 111111xxx10 11111x xx0001 111110 (43 bits),无关位填充后得到d
2 = 1111110 0000001 11111111110 111110 000001 111110 (43 bits) ,游程类型队列为{1,0,1,1,0,1},游程长度队列为{6,6,10,5,5,5}。
[0016]
第一个游程为1111110,类型为1游程,长度为6,按码表编码为110010;第二个游程为0000001,长度与前一游程相同,0游程,因此编码为0100;第三个游程为11111111110,长度为10,与前一个游程长度不同,类型为1游程,直接查表得到110110;第四个游程为111110,长度为5,与前一个游程长度不同,类型为1游程,按码表编码为110001;第五个游程为000001,长度与前一游程相同,0游程,因此编码为0100;第六个游程为111110,长度与前一游程相同,1游程,因此编码为1000;最终编码完成得到t
e = 110010 0100 110110 110001 0100 1000 (30 bits),比t1减少了13bits。
[0017]
特殊情况处理:当原始数据划分游程到末尾时,可能出现不能构成游程的情况,例如,剩下未划分的数据仅包含1或仅包含0。若原始数据的末尾不能构成游程,则向其末尾添加1位二进制数0或1作为游程结束标识。例如最后未划分数据是11,则在其后添加1位0,变成110;例如未划分数据是00,则添加1位1,得到001。经过处理后,本发明能够连续工作完成压缩编码。在后续的解码步骤,能够解码得到原始的结尾数据以及附加的游程结束标志,而在芯片测试中,对测试数据长度是有要求的,因此在读取测试数据时,最后附加的游程结束标志不会被读入,因此不影响测试结果。
[0018]
b.解压步骤:根据前述方法和编码码表1可知,步骤(a5)所得压缩后数据队列由若干组码字(0游程)、码字(1游程)组成;每一组码字都包括位数相等的前缀和后缀,且其前缀是0游程或1
游程,故前缀可读可判别,在前缀读取完成后,按其位数可继续读取后缀;依据前缀、后缀可知压缩前的游程长度和类型,即可根据前缀、后缀解压缩还原;0100、1000两个特殊码字不会出现在压缩数据头部,故在读取到特殊码字时,依据特殊码字和前一游程长度,可还原对应的原始数据。具体步骤如下:(b1)按位读取待解压数据,直至得到一个0游程或1游程,所得游程即为前缀,记录游程类型和前缀长度,按所记录的前缀长度计算后缀长度并读取相应位数的数据为后缀,所述后缀长度=前缀长度,也就是等于前缀对应游程长度+1;(b2)判定步骤(b1)所得后缀是否为特殊码字的后缀;本发明中出现两个特殊码字0100和1000,在表1中,特殊码字的后缀必然是二进制数00, 当步骤b1所得数据的后缀为00时也必然对应特殊码字。
[0019]
若否,则在步骤(b1)所得后缀的高位添加一个1,得到一个新的二进制数,将其转换为十进制数再减去4,得到标称长度,将该标称长度作为当前游程长度、将步骤(b1)所得游程类型作为当前游程类型,还原出一个游程作为解压后游程,记录其长度为l;需要说明的是,本步骤所得解压后游程不等同于码表中的前缀、后缀或码字,其虽然也体现为游程形式,但在码表中仅记录了其类型和十进制长度。
[0020]
若是,则,当前解压后游程的类型依据步骤(b1)所得前缀确定、长度依据前一个解压后游程的长度确定,具体而言两者长度相等;依据类型、长度还原出一组游程作为解压后游程;具体而言,当后缀是00时,若前缀为01则还原一个0游程;若前缀为10则还原一个1游程;将所得解压后游程加入解压数据;(b3)重复步骤(b1)(b2)直至解压缩完成,得到完整的解压数据用于芯片测试。
[0021]
程序实现方法如下:当读到待解码的二进制数时,可以获得当前待解码游程的游程类型和前缀结束标志,然后根据前缀的结束标志,可以获得当前待解码游程的后缀长度,因此可以获得游程码字的后缀,此时可以求出游程长度l,算法是:首先判定所得后缀是否为00;若否,在后缀二进制数的高位添加一个1,获得新的二进制数,转换为十进制数,游程长度l等于该十进制数减4。最后将该游程存入m位寄存器中。当读到后缀为“00”时,直接从m位寄存器中读取游程并根据游程类型输出。例如,对于“110001 0100”,首位为1,1游程,前缀为110,后缀为001,后缀不是“00”故在后缀高位添加1,得到二进制数1001,(1001)2= (9)
10
,9-4=5,游程长度为5,解压后该游程为111110,下一个待解压游程编码为0100,依据前缀“01”知该游程为0游程,依据后缀“00”知该游程长度与前一游程相同也为5,所以解压后该游程为000001。
[0022]
该解压电路是一个基于有限状态机的设计,其电路规模较小不会有较大的硬件成本。解码器主要由一个有限状态机(fsm)、一个k+1位计数器、一个log2(k+1)位计数器、1个m位寄存器和一个异或门组成。该解码器结构简单,独立于被测电路和测试数据集,解码器结构框图见图2,其中的信号名称及其对应功能描述见表2。
[0023]
表2
ꢀꢀ
解码器中的信号及其对应功能信号功能bit_in测试数据输入en使能端,置为1,表示接受数据
counter_infsm向k+1位计数器输入测试数据的通道shiftk+1位计数器的移入控制位dec1控制k+1位计数器减1rs1k+1位计数器复位标志位inc2控制log2(k+1)位计数器加1dec2log2(k+1)位计数器减1标志位rs2log2(k+1)位计数器复位标志位flag表示当前是哪个类型的游程dfsm向m位寄存器输入数据的通道v表示解码器输出数据是否有效c控制m位寄存器输入输出下面将结合图2介绍本方法的解码过程。
[0024]
a)令en=1,fsm接收bit_in的数据。inc2置为高电平。bit_in的首位发送给flag, log2(k+1)位计数器加1,此时v为低电平,输出无效;b)fsm继续从bit_in接收数据,inc2为高电平,每传入一位log2(k+1)位计数器加1,同时与flag值同或,当bit_in与 flag同或值为0时,前缀输入结束;c)将后缀部分从counter_in移入k+1位计数器,shift和dec2置为高电平,即每移入一位数据,log2(k+1)位计数器减1,直到log2(k+1)位计数器为空,rs2为1,后缀输入结束;d)若此时k+1位计数器中的值为100(二进制),v置为低电平,输出无效,c置为高电平,控制m位寄存器输入输出,再执行步骤(f);e)m位寄存器重置,fsm通过d输出0到m位寄存器。dec1置为高电平,k+1位计数器每次减1,输出一个0,直到k+1位计数器值为4,rs1为1。最后输出一个1;f)将v置为高电平,表示输出有效,将m位寄存器的数据依次与flag进行异或的结果输出;g)重复步骤a)至步骤f),直到解压完毕。
[0025]
需要说明的是,本领域技术人员可依据本发明所提供的压缩方法自行设计多种解压缩方法,本发明的具体实施方式包括但不局限于上述实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但仍然落入本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1