1. 基本原理
MBIST(memory-build-in-self test),意为存储器内建自测试。
“内建"是指针对存储器的测试向量由内建的存储器测试逻辑自动产生,而非外部测试机台生成。
MBIST测试中,只需要借助机台通过接口传输测试的指令,就可以从接口获取测试结果。
进行内建自测试的主要原因:
1. 降低测试成本。现代芯片在较小的面积中集成了较多存储单元,ATE的测试成本过高,不适用于从外部灌入针对存储器的测试向量。
2. Memory测试的特殊性。需要测试的单元很多,但分布规整,可利用算法批量产生测试向量。
3. 在线测试的需求。芯片的安全性要求逐步提高,例如汽车电子芯片,需要在芯片运行时仍保持在线测试(即不依赖测试机台,可集成于板级、芯片内或由软件调用,实现随时随需的测试),随时排除可能出现的故障。
MBIST方法是目前大容量存储器测试的主流技术,该技术利用芯片内部专门设计的 BIST电路进行自动化测试,能够对嵌入式存储器这种具有复杂电路结构的嵌入式模块进行全面的测试。
MBIST电路将产生测试向量的电路模块以及检测测试结果的比较模块都置于芯片的内部,在测试完成后,将测试的结果通过芯片的测试引脚送出到芯片的外部。
MBIST的核心思想是在芯片内部,存储器外部建立测试电路结构,实现对存储器的读写控制:写入测试向量,读出响应数据。
MBIST电路的基本结构一般包括测试向量产生电路、BIST控制电路、响应分析电路三部分,如图所示:
2. 存储器故障模型
由于存储器内部复杂,容易出现各种故障,这些故障可能是对存储器进行读写操作的过程中的读写控制电路故障,可能是地址译码电路出现的故障,而存储器的核心存储单元阵列由数以万计的存储单元排列而成,更容易出现故障,并且产生的故障也更加难以应对,因此了解故障模型有利于进一步分析存储器内部可能出现的问题。
故障模型是指逻辑故障模型。发生在真实存储器上的故障通常是物理故障,而引入故障模型的概念是因为物理故障是随工艺而变化的,引起物理故障的原因很多,如果测试人员对每一种物理故障在每一工艺下都去研究是不现实的,可行的办法是不直接研究物理故障,而是去研究模型化了的故障一一故障模型。
2.1 固定型故障(Stuck-At Faults,简称SAF)
也称为粘着故障,存储单元中的值固定为0(简记为SA0,Stuck-At-0)或者1(简记为SA1,Stuck-At-1),无法发生改变。
2.2 跳变故障(Transition Faults,简称TF)
也称为转换故障,存储单元中的值无法从0跳变到1(简记为TF(0→1)),或者从1跳变到0(简记为TF(1→0))。
跳变故障可以通过写入1到0的跳变再读出0,然后写入0到1的跳变再读出1来进行检测。
2.3 耦合故障(Coupling Faults,简称CF)
一个存储单元的值发生改变,导致另一个存储单元的值发生改变。
耦合故障可以通过先升序对所有存储单元进行写读操作,然后再降序对所有存储单元进行写读操作的方法进行故障检测。
2.4 地址译码故障(Address Decoder Faults,简称ADF)
这种故障主要发生在地址译码逻辑中,地址与存储单元是一一对应的,一旦地址译码逻辑发生故障,将会出现以下四种故障类型中的一种或多种:
对于给定的地址,不存在相对应的存储单元;
对于一个存储单元,没有相对应的物理地址;
对于给定的地址,可以访问多个固定的存储单元;
对于一个存储单元,可以通过多个地址访问。
3. MBIST常见算法
常用的确定性测试算法有MSCAN(MemoryScan)算法,跳步(GALPAT)和走步(Walking1/0)算法,Checkerboard算法和March类算法。
每种测试算法总有它针对的故障类型,这样每种算法的测试向量的规模和测试效率不尽相同。
3.1 MSCAN算法
MSCAN算法是一种最基本,最简单的测试算法。
其算法过程是首先对所有待测单元写入全0,然后读取所有存储单元并判断是否有故障,接看写入全1,再读取所有存储单元并判断是否有故障。
这种算法所使用的测试向量实际上是形式固定的存储器扫描序列,其操作次数是4N,与存储器地址位数成正比关系,时间复杂度为O(N)。
这种测试算法时间复杂度低,测试向量简单,但是除可以检测所有SAF故障外,仅支持部分耦合故障的测试,故障覆盖率有限。
3.2 跳步和走步算法
跳步算法和走步算法操作过程类似,首先选定一个存储单元作为基本单元,其他单元作为普通单元,向基本单元内写入1(或0),普通单元写入0(或1),然后读取所有单元的数据,重复该过程,直到所有存储单元都曾经被选定为基本单元为止。
该算法可以覆盖以下故障: SAF、TF、ADF以及部分CF。
3.3 Checkboard算法
也叫做棋盘算法,基本过程是对每个存储单元进行赋值,保证每一个存储单元的值都与相邻单元的值不同,这样就将整个存储阵列分为了两块:存储值是0的为A块,存储值是1的为B块:
该算法的操作数为4N,时间复杂度为O(N),可以检测和定位固定型故障和部分桥连故障,在BIST算法中应用较为广泛。
3.4 March算法
现存的测试RAM的不同算法中,March算法测试更简单、更快捷,是内存测试中最受欢迎的算法。
March算法测试类型多样,覆盖率也各不相同。 March测试是在内存地址上下移动,同时将值写入已知内存位置,之后读取。
算法还需要确定内存的大小和位宽,来选择最合适的参数模型。以标准的March1算法为例:该算法包括递增、递减地址,读、写内存单元等10个步骤。
可以检测各种内存故障(Stuck-At、Transition、Address faults、Idempotent coupling faults)。
当前,大多数行业标准使用March和棋盘格算法的组合,通常称为SMarchCKBD算法。该算法使MBIST控制器能够进行快速行或列访问来检测内存故障。
March算法是一系列的算法,由于这类算法具有较高的故障覆盖率同时测试时间较短,使得其在存储器测试领域得到了广泛研究和应用。
这类算法已经广泛应用于运用于对大容量SRAM和DRAM的测试,随着研究的深入,各种改进算法也相继出现。目前的 March算法主要有MATS,MATS+,MarchX、MarchC、MarchC-、MarchC+、 MarchLR等类型。
4. 验证笔记
BER0
即BIT0 Error统计的是所有bit0的错误个数。
对于普通读模式,这种错误的结果来自于Pattern写入和Pattern读出比较;而针对 PV/EV模式,错误信息则来自于单次写操作的结果,即写入对应地址的patern为0,但是写入操作失败,则此地址会返回BER0的错误。
BER1
即BIT1 Error统计的是所有bit1的错误个数。错误判断依据与 BER0类似。
4.1 Pre-silicon验证
Pre-silicon阶段的MBIST测试,主要是验证设数字设计流程的准确性。和实际流片回来后DFT做的MBIST测试,关注的侧重点并不一样。
要模拟实际芯片memory的情况,测试过程需要手动制造错误。此外,由于测试结果的FAIL的情况,也会包含不同的错误信息,如错误的地址,BER0/BER1/ECC等信息,在测试过程中也需要check这些信息是否能正常输出。
由于Pre-silicon验证的重点是MBIST的各个流程的正确性,在FPGA平台是通过访问SRAM来模拟的,因此一般情况下不会出现内存错误的情况。
造错机制,是根据提供的模型来手动制造的。在模型中,实际patern写入的地址范围为0~0x1FFFF;模型中作比较的对应区间为0x20000-0x3FFFF。
这样在启动MBIST之前,向比较区间写入预期需要设置的data pattern,然后手动制造BIT错误,如BIT0 ERROR即在某个地址的某个bit为0的情况下取反。
后续MBIST启动之后,MBIST会根据模型提供的数据区和比较区进行compare,如果制造的错误超过了设定的阀值范围即会触发MBIST Fail,并且将错误进行输出到OTP或者状态寄存器。
MBIST的测试的memory包括Normal/OTP/Redundancy/ECC区域。每个存储空间造错的方法类似,测试的重点包括:在各自的memory中check BER0/BER1/WFBC和log信息,mbist结果是否符合预期。
在写入的时候,为了check是否是RERAM的写操作失败导致的,将写pattern的过程分成了两种模式:
一种模式单次写入,获取write operation的结果,直到最后一个slice的最后一个地址全部完成结束;还有一种就是普通的一次性全部写入,然后全部读出数据并对比 pattern,不会check单次写入的准确性。
4.2 Post-silicon验证
MBIST功能的最终目的,是能够帮忙定位每块存储芯片中发生错误的地址、统计其错误信息。因此DFT阶段的MBIST对于芯片的良率测试和统计、筛片起到非常重要的作用。
DFT阶段MBIST着重于如何用最小的时间复杂度,最大可能地检测出各种不同的错误类型。
后续根据对这些测试的结果进行统计分析,采用合适的出错处理手段,来repair这些错误,如替换x redundancy或者Y redundancy,来确保芯片的良率。
阈值的设定
DFT使用MBIST作筛片的时候,需要设定BER0/BER1等阈值,来筛选出错率较高的FAIL IC。因此阈值的设定范围显得尤为关键。
错误检测和修复
MBIST本身只做错误检测,错误修复是检测后保证产品质量的手段。通过设定合适的阀值,对大量芯片进行样本测试和数据统计之后,可以筛选出可修复的部分芯片。
如根据对某颗芯片进行测试和统计,发现其出错集中在某条WL上,那可以使用X redundancy进行替换;
或者对另外一颗芯片测试,发现其错误集中在某个BL上,则可以使用Y redundancy进行替换这条出错的BL。
DFT阶段也会对ECC纠错进行统计,当出现的错误超过可纠错范围后,则会被认定为FAIL IC。

