【转】MBIST总结-程序员宅基地

2. MBIST的插入阶段:
用工具插入Mbist时,我们既可以在RTL代码插入,也可以在netlist里面插入。目前,常见的做法是在netlist插入。但是,由于插入的Mbist逻辑是RTL代码,这样如果在netlist里面插入的话,我们还需要再进行一次综合。如果在RTL代码中直接插入Mbist,则只需要综合一次。为什么现在都推荐在netlist里面插入Mbist,而不是在RTL插入呢?
 
回答1:综合通常是针对unit来做的,而布局布线通常针对partion,而mbist逻辑会涉及到很多个unit,如果把mbist逻辑划分到每个unit里面去,会使得mbist逻辑变得有些杂乱,如果一个unit里面的mbist出错了,将来拼起来就不容易找出来,所以现在把mbist作为一个独立的unit来综合,得到了netlist以后,然后插回到正常逻辑的netlist里面去,这样一方面mbist逻辑本身的完整性和控制性更好,另一方面,function逻辑的设计者并不需要知道mbist怎么实现的,减少了function逻辑设计者的设计effort。但是,把mbist逻辑独立来处理也有不好的地方,因为把mbist与function逻辑分开综合并不是最接近实际芯片设计情况的,因为mbist和function逻辑本身就是互相渗透的,如果完全独立开来并不能很好的符合实际情况。综合来说,分开综合,然后将mbist插入到netlist里面实践起来比较简单!但是如果可以使得一起综合的方式更便于管理和控制,显然也是一种不错的做法。
 
回答2:At rtl coding and synthesis stage, normally the focus is on the timing/area/power optimization, designer do not want to be involed too much in the DFT task, such as scan chAIn insertion and BIST test, therefore most people would like to insert the bist logic in the netlist instead of RTL. Actually the recommended way is to compile the bist block into gate level block first and then insert them into the design.
 
注解1:mbist可以在rtl中添加,就是把一些规则数据写入memory,然后再读出来,如果一样就是通过了。不需要DC做什么。
 
3. MBIST技术详细说明(转载)

 

随着半导体工艺尺寸不断缩小,IC设计的规模越来越大,高度复杂的IC产品正面临着高可靠性、高质量、低成本以及更短的产品上市周期等日益严峻的挑战。一方面随着半导体工艺尺寸的缩小,嵌入式存储器可能存在的缺陷类型越来越多;另一方面,随着IC产品的复杂度的提高,ROM、RAM、EEPROM在IC产品中的比重越来越大。

嵌入式存储器的可测试设计技术包括直接测试、用嵌入式cpu进行测试和内建自测试技术(MBIST)。直接测试方法利用自动测试设备进行测试,可以轻易实现多种高质量测试算法,但是这种方法存在着一些不足之处,一是在ATE机上实现的算法越复杂,对ATE机存储器的容量要求越高,测试的费用也就越高;二是在ATE机上不易实现对嵌入式存储器的“全速”测试,测试时钟的工作频率越高,测试成本越高;三是由于芯片外围管脚的限制,对芯片内大容量嵌入式存储器进行直接测试往往不大现实。利用嵌入式CPU进行测试的好处在于不需要对设计硬件做任何修改,而且测试算法的修改与实现可以通过灵活修改CPU软件程序完成。但是这种方法也存在缺点,首先是设计中的CPU并没有和所有的嵌入式存储器直接相连,其次编写或修改软件程序实现测试算法需要耗费大量的人力,另外这种方法还很难对存储CPU程序的存储器进行测试。

 

MBIST技术的缺点是增加了芯片的面积并有可能影响芯片的时序特性,然而,随着存储器容量的增加,这种方法所增加的芯片面积所占的比例相对很小,而且这种测试技术还有很多其它技术优势首先它可以实现可测性设计的自动化,自动实现通用存储器测试算法,达到高测试质量、低测试成本的目的;其次MBIST电路可以利用系统时钟进行“全速”测试,从而覆盖更多生成缺陷,减少测试时间;最后它可以针对每一个存储单元提供自诊断和自修复功能此外MBIST的初始化测试向量可以在很低成本的测试设备上进行。所以,从高测试质量、低测试成本的角度考虑,MBIST是目前嵌入式存储器测试设计的主流技术。

MBIST概述

BIST是一种结构性DFT技术,它将器件的测试结构置于该器件内部。BIST结构可以测试多种类型的电路,包括随机逻辑器件和规整的电路结构如数据通道、存储器等。BIST电路视其应用对象不同其实现存在显著差异,但任何类型的BIST都有共同的用途。BIST结构可以针对目标电路自动生成各种测试向量,并对输出响应进行比较。目标电路的类型也呈现多样化特征,它可以是整个芯片设计,也可以是设计模块或设计模块中的某个结构。此外,测试向量生成以及输出比较电路也可能存在差异。

下面我们主要探讨MBIST。大型、复杂电路通常包含多处难以测试的逻辑部分,即使就可测试性最好的大型设计而言,也同样需要耗费大量测试生成时间、占用大量的ATE存储器和ATE测试时间,所有这些都是非常昂贵,但对于采用ATPG方法进行测试而言又是必需的。另外,由于存储器缺陷类型不同于一般逻辑的缺陷类型,存储器在较大规模设计之中层次较深,ATPG通常不能提供完备的存储器测试解决方案,而MBIST技术则可以解决这些问题。BIST能够在不牺牲检测质量的前提下提供一种存储器测试解决方案,在很多情况下,BIST结构可以彻底消除或最大限度减少对外部测试向量生成(以及ATE机存储器容量)和测试应用时间的需要。设计人员可以在某设计内部执行MBIST电路,并由于MBIST电路邻近被测试的存储器而轻易实现全速测试,设计人员也可以从该设计的较高层次运行MBIST流程。

MBIST电路以某项设计中的RAM和ROM模型为目标。前面已经提到,由于存储器缺陷类型不同于一般逻辑的缺陷类型,所以检测RAM和ROM不同于检测随机逻辑,MBIST针对检测RAM和ROM共有的缺陷类型采用了有效的电路和算法。MBIST电路还可以基于各种算法生成多种测试向量,每种测试向量都着重测试一种特定的电路类型或错误类型。比较电路具有多种独特的实现方式,其中包括比较器和标签分析器。存储器电路模型一般由三个基本模块组成,分别是地址译码器、读/写控制逻辑以及存储单元阵列(图1)。

<!--[endif]-->

图 1

MBIST架构

MBIST通常采用一种或多种算法为测试存储器一种或多种缺陷类型而特别设计,MBIST电路包括测试向量产生电路、BIST控制电路、响应分析器三部分(图2)。

<!--[endif]-->

图 2

测试向量产生电路可生成多种测试向量,不同的测试算法实现的电路所产生的测试向量内容也不同;BIST控制电路通常由状态机实现,控制BIST对存储器的读写操作,响应分析器既可以用比较器实现,也可以用压缩器多输入移位寄存器(MISR)电路实现,它对照已知正常的存储器响应,比较实际存储器模型响应并检测器件错误。

采用比较器实现的MBIST电路如图3所示,该电路提供两个标志输出信号tst_done和fail_h通知系统测试进程的状态和结果。tst_done在测试结束时被置为有效状态,在测试过程中发现任何错误,fail_h信号即置为有效并保持到测试结束。采用压缩器实现的MBIST电路如图4所示,该电路提供了基于MISR的比较技术,测试结束后可以输出压缩后的标签寄存器结果。

<!--[endif]-->

图 3 比较器实现的MBIST电路

 

<!--[endif]-->

图 4 压缩器实现的MBIST电路

通常情况下,MBIST电路不仅可以筛选出失效的器件,还能够自动分析失效的原因,此时测试数据同时被用来分析定位存储器失效的具体地址空间。

此外,特殊的MBIST电路还可以提供自诊断和自修复功能。在MBIST电路中引入内建自分析模块,BIST模块根据失效的数据和地址等信息输出相应的控制信号R2R1R0,把系统对存储器失效地址空间的读写操作指向用于自修复冗余设计。

MBIST电路通常还包括BIST Collar模块,BIST Collar模块的内容包括流水处理电路、扫描旁路电路、多路复用器电路和MISR电路等,其中扫描旁路电路最为常用(图5)。

<!--[endif]-->

图 5 带扫描旁路电路的MBIST

MBIST实现与EDA工具

MBIST工具允许设计人员将更多时间花在设计工作中,而不是在有关测试的问题上忧心忡忡。工具已经内建了开发存储器测试和管理BIST电路所必需的知识,其生成的故障诊断电路允许设计人员对故障数据进行识别和分析。它可以产生相应的testbench,方便对MBIST外围电路逻辑开展验证,还可产生相应的自动化脚本文件以有助于逻辑综合的自动化运行。此外对任何EDA工具来说,要想有效工作就必须能够适应设计者现有的设计流程,遵循各种行业标准。

MBISTArchitect是Mentor公司提供的MBIST自动化EDA工具。它可以针对一个或多个嵌入式存储器开发嵌入式测试电路,自动实现存储器单元或阵列的RTL级内建自测试电路。它支持多种测试算法,可对一个或多个内嵌存储器自动创建BIST逻辑,并完成BIST逻辑与存储器的连接,另外还能在多个存储器之间共享BIST控制器,实现并行测试,从而缩短测试时间并节约芯片面积。MBIST结构中还可以包括故障的自动诊断功能,方便了故障定位和开发针对性的测试向量。

 

 

 
4. 基于mbistarchitect的Top-Down mbist生成(转载):
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/74731326.html
 
mbistarchitect的top-down的步骤很简单:
加载库->setup(设置一些参数clocks,pin sharing,new port)->进入bist模式->添加生成好的bist或者
新的bist->插入bist->保存设计->将bist的pattern转换成top的pattern->集成pattern->保存测试.
 
进入work目录运行scripts的mbist_run即可,sim_run为仿真.
由于mbistarchitect不能读入vhdl代码所以混合的和vhdl的需要综合成网表.
结合mentor的mbist_ref.pdf,mbist_pg.pdf可以很全面的了解和使用mbistarchitect.
步骤说明:
1.top-down flow
 
 
2.bist insert
 
5. Mbistarchitecture产生各种类型的memory bist(转自EETOP)
 Mbistarchitecture产生各种类型的memory bist
1. ROM bist
ROM由于只能读,所以不能任意的输入特定的测试向量,但是通过读出ROM内容,逐个地址比较的方法对于大容量的ROM非常的浪费时间,于是有人提供了一种算法,即读出一个地址,该地址的内容做校验(CRC?),校验值参与下一个地址的校验,扫描所有的地址之后得到一个最终的校验值,将这个值通过scan port shift出来进行比较。也可以内部比较这个值,输出fail/pass结果。请看这个例子。
model DROM (Q, CLK, CEN, A)
(
bist_definition (
        address A(array=11:0;);
        data_out Q(array=63:0;);
        clock CLK high;
        output_enable CEN low;
        tech = smic18;
        vendor = arm;
        version = "1.0";
        message = "synchronous 4096X64 ROM";
        address_size = 12;
        min_address = 0;
        max_address = 4095;
        data_size = 64;
        read_port (
                read_cycle (
                        change A;
                        assert CEN;
                        wait;
                        wait;
                        expect Q move;
                        )
                )
        )
)
以上是以mentor语法描述的ROM,我们产生其bist生成脚本
// rom_bist.do
=================================================
reset state
load lib ../bist_model/DROM.vm
add memory model DROM
add memory model DROM_B3
add memory model IROM_B1
add memory model IROM_B1_MR
add memory model IROM_B2
add memory model IROM_B3
setup mbist algorithms Rom2
set design name controller -module SPROM_4096X64_bist
set file naming -bist_model ../result/SPROM_4096X64_bist.v
set file naming -connected_model ../result/SPROM_4096X64_bist_con.v
set file naming -testbench ../result/SPROM_4096X64_bist_tb.v
set file naming -script. ../result/SPROM_4096X64_bist.v_dcscript
set file naming -ctdl ../result/SPROM_4096X64_bist.v_ctdf
set file naming -wgl ../result/SPROM_4096X64_bist.v_wgl
run
save bist -verilog -script. -replace
exit –discard
=================================================
// run_bist
mbistarchitect \
-bistgen \
-dofile ./rom_bist.do \
-logfile ./rom_bist.log \
-replace \
-nogui
 
运行run_bist即可得到ROM bist的rtl文件。
2. SRAM bist
SRAM是一种单口的静态RAM,可以读写,所以我们可以控制往RAM中写入的内容,然后读出来比较。这类bist算法很多,常用March2算法,可以检查address decoder faults (AF), stuck at faults(SAF), transition faults (TF), stuck open faults (SOF), inversion coupling faults (CFin), and linkedidempotent coupling faults (CFid)这些问题。
下面给出一个model的例子,运行脚本和ROM类似。
model SPRAM_512X32 (Q,CLK,CEN,WEN,A,D,OEN)
(
bist_definition (
        address A(array=8:0;);
        data_in D(array=31:0;);
        data_out Q(array=31:0;);
        clock CLK high;
        chip_enable CEN low;
        write_enable WEN low;
        dont_touch OEN high;
        tech = smic18;
        vendor = ARM;
        version = "1.0";
        message = "synchronous 512X32 RAM";
        address_size = 9;
        min_address = 0;
        max_address = 511;
        data_size = 32;
        read_write_port (
                write_cycle (
                        change A;
                        change D;
                        assert CEN;
                        assert WEN;
                        wait;
                        )
                read_cycle (
                        change A;
                        assert CEN;
                        wait;
                        wait;
                        expect Q move;
                        )
                )
        )
)
3. DRAM
DRAM是双口的RAM,一般有两种类型,第一种是两套接口都可以完成读写操作,第二种是一套口专门读,另一套口专门写,所用的bist算法与SRAM相同。下面给出一个例子。
model DPRF_128X32 (QA,AA,CLKA,CENA,AB,DB,CLKB,CENB)
(
bist_definition (
        address AA(array=6:0;);
        address AB(array=6:0;);
        data_in DB(array=31:0;);
        data_out QA(array=31:0;);
        clock CLKA high;
        clock CLKB high;
        read_enable CENA low;
        write_enable CENB low;
        tech = smic18;
        vendor = ARM;
        version = "1.0";
        message = "synchronous 128X32 dual port RAM";
        address_size = 7;
        min_address = 0;
        max_address = 127;
        data_size = 32;
        write_port (
                write_cycle (
                        change AB;
                        change DB;
                        assert CENB;
                        wait;
                        )
        )
        read_port (
                read_cycle (
                        change AA;
                        assert CENA;
                        wait;
                        wait;
                        expect QA move;
                        )
                )
        )
)
总结:Mentor的工具在产生bist的时候比较强大,美中不足的是需要我们用它自己的语法来描述memory对象,不过好在其语法比较简单。所以model能不能写的符合要求,能不能与vendor提供的model一直十分的重要,也是要特别注意的地方。
 
6.
 
 
 
 
 
 
 
 
 
 
  DFT流程中,大公司基本都采用混合的流程,即hybrid flow,一般顺序如下:
 
  • mbist:RTL或gate level插入,采用TMS或SMS。
  • scan:gate level插入,采用dftc,很少公司用tessent。
  • edt:gate level插入,采用tessent或testkompress。
  • atpg:采用tessent或testkompress(业界一骑绝尘的atpg工具)
  • formal:采用synopsys的fm。
  • timing:采用synopsys的pt。
  • dv(dft verification):采用vcs或irun。

     mbist方面,小一点的公司一般会采用TMS,就是tessent mbist system,mentor的工具。大的公司,比如海思等,采用SMS,就是star memory system,synopsys的工具。

     重点是scan方面,我比较了tessent和dftc工具。
 

工具

优点

缺点

tessent

1. 插scan十分快,时间短。

2. 直接生成供atpg的dofile和testproc文件

3. 通过比较,atpg覆盖率比dftc强。

需要配置scan工作环境

dftc

1. 可以直接使用DC的环境

2. 优化能力强(此处有疑问)

1. 耗用大量时间,插scan时间极长。

2. 需要用脚本或人工生成供atpg的dofile和testpro文件。

2. 通过对比,覆盖率不可能强过tessent



tessent
     优点:
          1. 插scan很快,节省时间,40多万个寄存器的电路,几分钟就插好scan。而且大部分时间是在check_design_rules。可能tessent只是把general register替换成scan regist,然后连接起来。
          2. 直接生成供atpg的dofile和testproc文件,少不少麻烦,也避免许多drc问题。
          3. 在同样scan情况下,感觉atpg的test coverage要高一些。
     缺点:
          需要配工作环境。

dftc
     优点:
          1. 使用DC的环境。
          2. 据说是因为其优化能力强。可是插scan时,没添加过约束啊,何来优化?
      缺点:
          1. 插scan时,极耗时。40多万个寄存器的电路,要半个小时,大部分时间在map。
          2. 需要用脚本或者人工生成供atpg的dofile和testproc文件。
          3. 做atpg时,会碰到大量drc问题,尤其不好解决的D1 violation,就是那种报disturb的现象。
          4. 通过对比,覆盖率强不过用tessent插的scan。



  在插scan时,tessent和dftc工具,对方功能两者互有。个人比较喜欢使用tessent插scan,省事。
  另外,感觉用一家公司工具的覆盖率都要高,dftc+tmax的atpg覆盖率,也比混合流程要高。
  大家做edt时,考虑过压缩比了吗?内部扫描链设多长?dftc也有compress结构,我没做过对比,我觉得肯定不好。

  但好多公司用dftc插scan,就连mentor都推荐这种混合方案。



欢迎大家留言,或者本人有说的不全不对的地方,望大家补充。给个面子,说说各位同行用什么插scan的,大家共同进步。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lijiuyangzilsc/article/details/117960263

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法