黄 玮
江苏信息职业技术学院,江苏无锡 214153
随着集成电路的规模越来越大,嵌入的存储器也随着变多,传统的测试方法受测试难度和测试成本所制约,已不为芯片设计厂商所接受。目前存储器最常用的测试方法是通过内建自测试存储器电路[1](MBIST:存储器内建自测试)来实现,其通过eda软件,自动生成存储器的测试电路,根据相应的算法对存储器地址进行读写,完成存储器的测试。该种测试方法虽然会在电路中加入一些控制逻辑,从而增加芯片的面积,但是对于大规模测试电路,其能够实现测试自动化,减小测试时间,提高测试覆盖率,很大程度上节约测试成本。
本文采用MBIST测试方法,完成对电路中存储器的测试,同时加入了标志位移位电路,能够准确判断错误存储器的位置,从而减少测试诊断时间。
MBIST是以存储器为目标,通过采用特定的算法,来检测存储器中存在的某些缺陷的一种测试方法,其主要由bist控制电路,测试向量生成电路,测试响应比较电路三部分组成[2-3],其常用的结构图如图1所示。
图1中bist控制电路其内部为一个状态机电路,控制bist电路对存储器进行读写操作;测试向量生成电路根据所选的算法生成不同的测试向量,不同的算法可以得到不同的存储器测试覆盖率;测试响应比较电路是通过对实际存储器输出值与控制电路生成的理想值做对比,来判断存储器是否有问题。当测试完成时,该电路会同时生成test_done和fail_h两个标志信号来判定测试结果,test_done表示测试是否完成,fail_h表示测试是否有问题,只有当test_done为“1”,fail_h为“0”时,才能判定测试没有问题。
嵌入式SRAM的MBIST的测试结构有两种:并行MBIST结构和串行MBIST结构,并行测试结构是一组MBIST控制逻辑同时控制多片SRAM进行读写操作,由于其同时对多片SRAM进行测试,这样可以节约测试时间,适用于设计中存储器比较多的情况下,但由于同时测试时,会产生较大的功耗,可能会烧坏芯片,这是设计中常常需要注意的;串行测试结构是MBIST控制逻辑逐一对每片SRAM进行测试,其能够有效地节省功耗,但测试时间较长,当SRAM数量较大时测试成本较高,所以适用于存储器较少的设计。本文的设计中包含70个SRAM,其中core中含有39个,ARM IP中含有31个,由于ARM IP是一个硬核,其包含的2个MBIST结构已经存在,不需另行设计,故文本主要完成core的MBIST设计。由于core中的存储器属于同一个时钟域,考虑到layout布局时floorplan信息,故只生成一个bist电路来控制,同时由于core中的存储器数量较多,故采用并行结构完成MBIST的设计。
MBIST结构通过测试算法来完成存储器中各种故障的检测,目前常用的测试算法有:Checkerboard算法,March算法,GALPAT算法等。不同的算法复杂度不同,得到的故障覆盖率也各不相同,其中Checkerborad算法最为简单,能够检测的故障覆盖率也最低,March C算法是MBIST中最为常用的一种算法,其能够检测出存储器的大部分故障,GALPAT算法能够得到最高的故障覆盖率,但算法较为复杂,故需要更多的测试时间。考虑到测试时间增加带来的测试成本,本文折衷选择March C算法来实现设计中存储器的自测试。
March C算法是依次通过对存储器地址升序和降序读写来完成存储器测试的一种方法[4],其能够检测出存储器中固定故障,状态转换故障,耦合故障,翻转耦合故障等。March C算法主要通过6个步骤完成整个测试[5]:
1)按照升序对存储器的每个地址进行写0操作。
2)按照升序对存储器的每个地址进行读0写1操作。
3)按照升序对存储器的每个地址进行读1写0操作。
4)按照降序对存储器的每个地址进行读0写1操作。
5)按照降序对存储器的每个地址进行读1写0操作。
整个设计的MBIST顶层结构如上图所示,其主要由4部分组成:core的MBIST结构,标志位移位(scan out)电路和两个内嵌的ARM MBIST结构。fail_h,test_done,bist_clk为顶层结构的输入输出引脚,用来控制和判定测试结果,其中core和ARM共用一个bist_clk,测试时core和ARM中的MBIST结构同时测试,test_done用来判定每个MBIST是否测试结束,当信号为“1”时,表示测试完成,fail_h信号来观测存储器的测试结果,如果为“1”时,说明测试有问题,存储器存在故障;为“0”时,则表示通过测试。但集成的fail_h信号仅能用来判定存储器是否存在故障,无法定位故障存储器的位置,为此电路中加入了一个标志位移位(scan out)电路,其电路结构如图 所示,当测试结果出现问题时,其能够准确找出哪个存储器存在故障,为MBIST测试结果的诊断提供了便利。
图3为控制位移位(scan out)电路,其由两部分组成,图3a是将每个存储器collar生成的fail_h信号通过或操作得到一个fail_total标志信号,然后传输给core bist电路。fail_total判定整个设计的测试结果,如果core中任意存储器存在故障,则该存储器相对应的fail_h为“1”,经过一个或门后,得到的fail_total也为“1”,说明电路中存在故障,将fail_total传输给core bist,得到顶层的判断信号fail_h_top;图3b是将存在故障的fail_h移位输出,从而判断出哪个存储器存在故障,其主体电路是一个移位寄存器电路。 每个存储器 collar生成的fail_h信号在scanen的控制下移位输出,然后再与scanen与操作,得到每个存储器所对应的fail_h_scanout信号,来判断该存储器是否存在故障。其中控制信号scanen信号决定了fail_h的传输,其verilog描述如下:
当测试完成标志信号test_done为“1”时,说明测试已经完成,每个存储器所对应的fail_h信号产生完毕,同时当count信号为111时,scanen信号为“1”,这时进行fail_h的移位输出。
基于NC_verilog软件对设计中生成的MBIST结构进行仿真验证,得到的仿真结果如下所示。图4中可以发现,由于arm核中的存储器数量和规模较core中小,arm早于core完成MBIST测试,当core电路对应的test_done信号为“1”时,core完成MBIST测试,此时的fail_h信号为“0”,说明测试中存储器不存在故障。图5是波形放大后的scan out的仿真结果,为了便于测试观察,在图5中可以看到在2,074,525ns和2,076,525ns处电路中加入了两个脉冲,当第一脉冲到来时,使能信号scanen变为“1”,这时开始输出每个存储器测试完成后相对应的fail_h, 当第二个脉冲时,core中所有存储器的fail_h输出完毕,在两个脉冲之间的scan_out信号一直为“1”,说明存储器不存故障。
本文基于实际项目完成了电路中MBIST结构的插入,同时插入了一个简单的存储器诊断电路,在实际测试中,如果某个存储器发生故障,能够通过和MBIST电路相结合准确检测出来,最后通过NC_verilog仿真验证了结构的准确性。
[1]DEKKER R, BEENAKER F, THIJSSEN L.A realistic fault model and test algorithm for static random access memories[J].IEEE Trans Comp Aid Des,1990,9(6):567-572.
[2]BUSHNELL M L,AGRAWAL V D. 超大规模集成电路测试—数字、存储器和混合信号系统[M].蒋安平,冯建华,王新安,译.北京:电子工业出版社,2005.
[3]MBIST Architect Process Guide[M].Mentor Graphics,2008.
[4]Mentor Graphics. Embedded Deterministic Test(EDTTM)-DFT Technology for High-Quality LowCost Manufacturing Test [M]. Technical Publication,2006-03.
[5]Hwang Sungbae, Abraham J A, Test data compression and test time reduction using an embedded micropr ocessor[J].IEEE T ransactions o n Very Lar ge Scale Integration (VLSI) Systems, 2003, 11(5):853-862.