一种片上RAM内建自测试方法及电路
技术领域
本发明涉及芯片检测领域,尤其涉及一种片上RAM内建自测试方法及电路。
背景技术
随着集成电路产品中随机存取存储器(Random-Access Memory,RAM)规模越来越大,集成度越来越高,在生产制造过程中不可避免会出现越来越多和越来越复杂的RAM物理缺陷。带有失效存储单元的芯片将引起产品级不可预估的错误,致使纠正成本骤增。因此在晶元(Wafer)阶段对RAM存储器进行高覆盖率的测试和筛选成为芯片全生命周期中重要的一环。而如何通过Wafer测试快速定位缺陷单元,提高检测覆盖率,进而减少测试时间,提高测试效率,是在芯片设计之初需要深入分析和解决的问题。
现有技术的RAM内建自测试(Built-in Self Test,BIST)电路常用的检测算法是March LR算法。该算法具有检测速度较快的特点,而且在检测单一单元的故障和耦合故障上也能达到一定的覆盖率,目前已成为业界主流的测试算法。
要对故障进行分析,首先介绍故障原语。故障原语的形式为<S/F/R>,S表示敏化操作序列,F表示故障行为,R表示读操作的结果。对于故障,由两个基本的组成部分,即对存储单元的操作和相应单元的故障。如果一组操作序列能够让故障单元表现出故障的状态,我们称之为“敏化操作序列”S(Sensitizing operation sequence)。被检测单元表现出的故障我们称之为“故障行为”F(Fault behavior)。为了定义一种故障,必须要有敏化操作序列S,以及与之对应的故障行为F,当敏化序列为读操作的时候,还应该有敏化序列的读取结果R(Result),这三个元素构成了故障源于<S/F/R>,其中S包括(0,1,0w0,1w1,0w1,1w0,r0,r1),分别表示敏化操作序列为状态0,状态1,0状态写0,1状态下写1,0状态下写1,1状态下写0,读取状态0,读取状态1;F包括(0,1,↑,↓),其中“↑”表示状态0至状态1的上升转变,“↓”表示状态1至状态0的下降转变。R包括(0,1,-),如果S不是读操作,那么S为“-”。
有了故障原语,就可以建立并描述故障模型。根据敏化序列的操作次数可以将故障分为静态故障以及动态故障。如果操作次数小于等于1,则称为静态故障,否则称为动态故障。根据敏化序列中涉及到的单元个数可分为“单一单元故障”和“多单元故障”(也可以成为耦合故障)。其中,单一单元静态故障是存储器中最经常出现的故障类型。其中又可以分为:状态故障模型,转换故障模型,写干扰故障模型,读破坏故障模型,伪读破坏故障模型,错误读故障模型。
现有的RAM BIST检测电路,采用March LR算法对单一单元的静态故障进行检测。传统的March LR算法实现方式如下:
其中,Mi表示上述实现方式中的第i个March元素。表示按照地址升序方式进行测试,表示按照地址降序方式进行测试。r0表示进行读0操作,r1表示进行读1操作,w0表示进行写0操作,w1表示进行写1操作。
上述算法的具体执行过程如下:(1)对RAM进行由地址从最小到最大的写全0操作,即M0;(2)由RAM最大地址开始进行读操作,读出结果与0进行比较,并将读取后的地址写全1,一直到RAM的最小地址,即M1;(3)对RAM进行由地址最小到最大的读写操作,每个地址操作顺序为:先读数据,读取结果与1进行比较,然后对该地址写全0,再读取RAM数据与全0比较,然后再写全1,即M2;(4)对RAM由最小地址到最大地址进行读数,并将读取数据与全1比较,然后将该地址写0,即M3;(5)对RAM进行由地址最小到最大的读写操作,每个地址操作顺序为:先读取,读出数据与全0比较,然后再对该地址写全1,之后读出数据,与全1比较,最后写全0,即M4;(6)对RAM进行由地址从最小到最大的读取,读出结果与全0比较,即M5。其中,当此过程中读出数据与期望数据不一致的时候,认为RAM的读取或者写入发生故障,即RAM的检测未通过。如果比较结果全部一致,则RAM检测通过。
虽然采用上述March LR算法对单一单元的静态故障具备一定覆盖率,但不能实现全面检测。
另外,现有RAM BIST测试电路设计不够灵活与高效。首先,在现有方案中,只输出测试结果标志,不输出具体的错误地址,因此无法了解存储器整体“坏区”位置,不利于与芯片制造商沟通、分析存储器“坏区”所占比例修改及分布情况。其次,现有技术从地址“0”开始递增变化检测,初始检测地址不可以配置。如在前次测试中发现错误并报出错误地址后,需要从此地址开始继续了解后面RAM单元的情况,则无法实现。
发明内容
本发明提供一种片上RAM内建自测试方法及电路,用来解决现有技术中March LR算法对单一单元的静态故障不能实现全面检测以及RAM内建自测试电路设计不够灵活与高效的问题。
为了解决上述问题,本发明提供一种片上随机存取存储器(RAM)内建自测试方法,包括以下步骤:配置测试的起始地址;从所述起始地址开始,对预定范围内的各地址进行下述操作:按照地址升序,进行写0操作;按照地址降序,进行两次读0操作及两次写1操作;按照地址升序,进行读1操作、写0操作、读0操作及写1操作;按照地址升序,进行两次写1操作及两次读0操作;按照地址升序,进行读0操作、写1操作、读1操作及写0操作;按照地址升序,进行读0操作;在上述操作过程中,当某个测试地址的读出数据与期望数据不一致时,则判断所述测试地址发生故障,待测试完成后,输出错误标志和发生故障的测试地址。
进一步地,若未检测到故障,待测试完成后,输出正确标志。
进一步地,所述按照地址降序,进行两次读0操作及两次写1操作包括:按照地址降序,对每个地址操作顺序为:先读取数据,读取结果与全0比较,再读取数据,读取结果与全0比较,然后对各地址写全1,再写全1。
进一步地,所述按照地址升序,进行读1操作、写0操作、读0操作及写1操作包括:按照地址升序,对每个地址操作顺序为:先读数据,读取结果与全1比较,然后对各地址写全0,再读取数据与全0比较,然后再写全1。
进一步地,所述按照地址升序,进行写0操作包括:按照地址升序,对每个地址操作为:写全0。
本发明还提供一种片上RAM内建自测试电路,包括:地址配置单元、检测单元、输出单元。所述地址配置单元,用于配置测试的起始地址;所述检测单元,用于从所述起始地址开始,对预定范围内的各地址进行下述操作:按照地址升序,进行写0操作;按照地址降序,进行两次读0操作及两次写1操作;按照地址升序,进行读1操作、写0操作、读0操作及写1操作,按照地址升序,进行两次写1操作及两次读0操作;按照地址升序,进行读0操作、写1操作、读1操作及写0操作;按照地址升序,进行读0操作;在上述操作过程中,当某个测试地址的读出数据与期望数据不一致时,判断所述测试地址发生故障。所述输出单元,用于待测试完成后,输出错误标志和发生故障的测试地址。
进一步地,所述输出单元,用于若未检测到故障,待测试完成后,输出正确标志。
进一步地,所述按照地址降序,进行两次读0操作及两次写1操作包括:按照地址降序,对每个地址操作顺序为:先读取数据,读取结果与全0比较,再读取数据,读取结果与全0比较,然后对各地址写全1,再写全1。
进一步地,所述按照地址升序,进行读1操作、写0操作、读0操作及写1操作包括:按照地址升序,对每个地址操作顺序为:先读数据,读取结果与全1比较,然后对各地址写全0,再读取数据与全0比较,然后再写全1。
进一步地,所述按照地址升序,进行写0操作包括:按照地址升序,对每个地址操作为:写全0。
本发明提供的片上RAM内建自测试方法及电路通过March LR改进算法检测故障,提高了单一单元的静态故障覆盖率。同时增加了输出发生故障的地址和起始地址可配功能,达到节约检测时间,减少检验步骤,降低芯片测试成本,提高测试效率的目的。
附图说明
图1所示为本发明较佳实施例提供的片上RAM内建自测试方法的流程图;
图2所示为本发明较佳实施例提供的片上RAM内建自测试电路的框图。
具体实施方式
本发明较佳实施例提供一种片上RAM内建自测试方法,包括以下步骤:配置测试的起始地址;从所述起始地址开始,对预定范围内的各地址进行下述操作:按照地址升序,进行写0操作;按照地址降序,进行两次读0操作及两次写1操作;按照地址升序,进行读1操作、写0操作、读0操作及写1操作;按照地址升序,进行两次写1操作及两次读0操作;按照地址升序,进行读0操作、写1操作、读1操作及写0操作;按照地址升序,进行读0操作;在上述操作过程中,当某个测试地址的读出数据与期望数据不一致时,则判断所述测试地址发生故障,待测试完成后,输出错误标志和发生故障的测试地址。
具体而言,图1所示为本发明较佳实施例提供的片上RAM内建自测试方法的流程图。如图1所示,首先,配置测试的起始地址。然后,打开使能,RAM内建自测试电路开始工作。如过程中检测到某个测试地址发生故障,等待测试完成后,输出错误标志和发生故障的测试地址;若过程中未检测到故障,待测试完成后,输出正确标志。其中,在检测过程中采用March LR改进算法进行测试。以下详细描述本发明提供的March LR改进算法。
March LR改进算法的实现方式如下:
其中,Mi表示测试方法中的第i个March元素。表示按照地址升序方式进行测试,表示按照地址降序方式进行测试。r0表示进行读0操作,r1表示进行读1操作,w0表示进行写0操作,w1表示进行写1操作。
上述算法的具体执行过程如下:(1)按照地址升序(例如,由RAM最小地址至最大地址),进行写全0操作,即M0;(2)按照地址降序(例如,由RAM最大地址至最小地址),进行读写操作,每个地址操作顺序为:先读数据,读取结果与0进行比较,再读取数据,读取结果与0进行比较,然后将读取后的地址写全1,再写全1,即M1;(3)按照地址升序(例如,由RAM最小地址到最大地址),进行读写操作,每个地址操作顺序为:先读数据,读取结果与1进行比较,然后对各地址写全0,再读取数据与全0比较,然后再写全1,即M2;(4)按照地址升序(例如,由RAM最小地址到最大地址),进行读写操作,每个地址操作顺序为:先读数据,读取结果与1比较,再读取数据,读取数据与全1比较,然后将各地址写全0,再写全0,即M3;(5)按照地址升序(例如,由RAM最小地址到最大地址),进行读写操作,每个地址操作顺序为:先读取,读出数据与全0比较,然后再对该地址写全1,之后读出数据,与全1比较,最后写全0,即M4;(6)按照地址升序(例如,由RAM最小地址到最大地址)进行读取,读出结果与全0比较,即M5。其中,当此过程中读出数据与期望数据不一致的时候,认为RAM的读取或者写入发生故障,即RAM的检测未通过。如果比较结果全部一致,则RAM检测通过。
表1所示为March LR改进算法对故障模型全覆盖的实现方式。参照下表。
表1
其中,Mi,j表示测试方法中第i个March元素的第j个操作。如M1,2表示第一个March元素中的第2个操作,即r0。敏化序列为一组能够让故障单元表现出故障的状态的操作序列。
针对表1所示,具体内容如下:
状态故障:<0/1/->的故障通过M0以后,再通过M1,1可以检测出此故障;<1/0/->的故障通过M1,4操作后,再通过M2,1可检测出此故障。
转换故障:<0w1/0/->故障通过M4,2实现0w1的敏化操作,通过M4,3可以检测出此故障;<1w0/1/->故障通过M2,2实现1w0的敏化操作,M2,3可以检测出此故障。
写干扰故障:<0w0/↑/->故障通过M3,4实现0w0的敏化操作,M4,1可以检测出此故障;<1w1/↓/->故障通过M1,4实现1w1的敏化操作,M2,1可以检测出此故障。
读破坏故障:<r0/↑/1>故障通过M2,1实现r0的敏化操作,M2,2可以检测出此故障;<r1/↓/0>故障通过M3,1实现r1的敏化操作,M3,2可以检测出此故障。
伪读破坏故障:<r0/↑/0>故障通过M2,1实现r0的敏化操作,M2,2可以检测出此故障;<r1/↓/1>故障通过M3,1实现r1的敏化操作,M3,2可以检测出此故障。
错误读故障:<r0/0/1>故障通过M1,2可以检测出此故障;<r1/1/0>故障通过M4,3可以检测出此故障。
表2所示为传统March LR算法与March LR改进算法的故障覆盖对比表。
表2
如表2所示可见,传统March LR算法只覆盖了3/6个故障模型,由表1及表2可见,本发明提供的March LR改进算法可以覆盖单一单元的静态故障中的全部6/6个故障模型。
此外,本发明较佳实施例还提供一种片上随机存取存储器(RAM)内建自测试电路包括:地址配置单元、检测单元、输出单元。其中,所述地址配置单元,用于配置测试的起始地址;所述检测单元,用于从所述起始地址开始,对预定范围内的各地址进行下述操作:按照地址升序进行写0操作,按照地址降序进行两次读0操作及两次写1操作,按照地址升序进行读1操作、写0操作、读0操作及写1操作,按照地址升序进行两次写1操作及两次读0操作;按照地址升序进行读0操作、写1操作、读1操作及写0操作;按照地址升序进行读0操作;在上述操作过程中,当某个测试地址的读出数据与期望数据不一致时,则判断所述测试地址发生故障;所述输出单元,用于待测试完成后,输出错误标志和发生故障的测试地址。
具体而言,图2所示为本发明较佳实施例提供的片上RAM内建自测试电路的框图。如图2所示,clk为时钟信号,rst_n为低复位信号,en为内建自测试(BIST)工作使能信号,all_en为全片RAM BIST工作使能,addr_max为测试RAM的最大地址值。bist_rd_data为RAM读出数据,bist_cen为RAM选择使能(低有效),bist_addr为RAM地址,bist_we为RAM写请求信号,bist_oe为RAM写输出使能信号,bist_wr_data为RAM写入数据,IO_out为正确/错误标志及发生故障地址输出IO。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。