MBIST 方法是目前大容量存储器测试的主流技术,该技术利用芯片内部专门设计的BIST 电路进行自动化测试,能够对嵌入式存储器这种具有复杂电路结构的嵌入式模块进行全面的测试。MBIST 电路将产生测试向量的电路模块以及检测测试结果的比较模块都置于芯片的内部,在测试完成后,将测试的结果通过芯片的测试引脚送出到芯片的外部。

MBIST 的核心思想是在芯片内部,存储器外部建立测试电路结构,实现对存储器的读写控制:写入测试向量,读出响应数据。MBIST 电路的基本结构一般包括测试向量产生电路、BIST 控制电路、响应分析电路三部分,结构如图所示:

一、SRAM基本介绍

1、SRAM的基本结构

SRAM,名为静态随机存储器,它是一种随机存取存储器。它采用双稳态触发器作为存储元件,由于双稳态电路的稳定特性,这种存储器可以实现静态稳定读取:只要不掉电,存储单元就可以长期保存所写入的信息,并且无需刷新。SRAM具有存取速度快,外围电路简单,功耗低等优点,在数据高速缓存和存储阵列中被广泛应用,SRAM 的存储单元如图:

嵌入式存储器结构模型的存储阵列就是SRAM 存储单元阵列。由基本存储单元组成的存储阵列和存储器外围电路共同组成了存储器的整体结构。存储器的外围电路一般包括地址译码电路和读/写控制电路。SRAM 的结构模型如图:

地址译码电路包括地址寄存器和行/列译码器,读/写控制电路由数据寄存器、灵敏放大器和写驱动器组成。当地址信号给定存储单元地址,通过行/列译码器锁定存储单元位置,若当前为读操作则从锁定的存储单元读出数据并经过灵敏放大器放大摆幅,从数据寄存器输出数据;若当前为写操作则将输入数据写入数据寄存器,通过写驱动器写入指定单元。
        由于存储器内部非常复杂,非常容易出现各种故障,这些故障可能是对存储器进行读写操作的过程中的读写控制电路故障,可能是地址译码电路出现的故障,而存储器的核心存储单元阵列由数以万计的存储单元排列而成,更容易出现故障,并且产生的故障也更加难以应对,接下来将介绍存储器的相关故障模型。

2、SRAM故障模型

故障模型是指逻辑故障模型。发生在真实存储器上的故障通常是物理故障,而引入故障模型的概念是因为物理故障是随工艺而变化的,引起物理故障的原因很多,如果测试人员对每一种物理故障在每一工艺下都去研究是不现实的,可行的办法是不直接研究物理故障,而是去研究模型化了的故障——故障模型。

当然故障模型必须要对实际的物理故障实现精确地反映。集成电路中有与故障相关的几个容易混淆的概念:缺陷,故障、误差和漏洞。这几个概念是集成电路设计中的问题在不同阶段的不同表现形式。

  • 缺陷是指集成电路制造过程中,在硅片上所产生的物理异常,比如多余或者错放了某些器件。
  • 故障是指集成电路制造中的缺陷表现在电路功能上的异常现象,比如电路的逻辑功能固定为1 或者0。
  • 误差则是由于故障的存在而导致的系统功能的偏差和错误。
  • 漏洞一般指由于设计问题而造成的功能错误,也就是我们常说的“bug”

故障建模是用数学模型来描述芯片制造过程中可能出现的物理缺陷,用于研究缺陷对系统或者电路功能造成的影响,以及确定故障发生的位置。采用故障模型的另一个原因就是:电路中可能存在的物理缺陷的种类繁多,并且某些物理缺陷可能对电路功能产生非常复杂的影响,分析难度大。而采用故障模型的形式,一个逻辑故障往往可以描述多种物理缺陷行为,从而回避了对物理缺陷的直接分析

常见的存储器故障类型包括:固定型故障(Stuck-At Faults,SAF),跳变故障(Transition Faults,TF),耦合故障(Coupling Faults,CF),相邻图形敏感故障(Neighborhood Pattern Sensitive Faults,NPSF)和地址译码故障(Address DecoderFaults,ADF)。

1)固定型故障(SAF)

固定型故障会在控制信号和存储器单元中出现,表现为控制信号或者存储单元中的值固定为1 或0,也就是持续为高电平或者低电平,简记为SA0(Stuck-At-0)和SA1(Stuck-At-1),固定故障图示为:

固定型故障可以通过对所有待测单元写入0 再读出0,然后写入1 读出1 来进行检测。

2)跳变故障(TF)

跳变故障(也称跳变延迟故障)出现在控制信号和存储器单元中,表现为控制信号或者存储单元中的值无法(或者延迟)从0 跳变到1,或者从1 跳变到0,简记为TF (0->1)和TF (1->0),跳变故障图示为图:

跳变故障可以通过写入1 到0 的跳变再读出0,然后写入0 到1 的跳变再读出1 来进行检测。

3)耦合故障(CF)

耦合故障主要发生在存储单元中,表现为对某个单元的写入操作影响其它单元的值,使其它单元的值发生变化,根据发生的变化不同,耦合故障可以分为反相耦合故障(CFin:inversion),幂等耦合故障(CFid:idempotent)、状态耦合故障(CFst:state)和桥连故障(Bridging Faults,BF)。

耦合故障可以通过先升序对所有存储单元进行写读操作,然后再降序对所有存储单元进行写读操作的方法进行故障检测。

3)相邻图形敏感故障(NPSF)

这种故障主要发生在存储单元中,表现为对某特定单元周围的若干存储单元的赋值或者跳变会影响:

4)地址译码故障(ADF)

这种故障主要发生在地址译码逻辑中,地址与存储单元是一一对应的,一旦地址译码逻辑发生故障,将会出现以下四种故障类型中的一种或多种:

  1. 对于给定的地址,不存在相对应的存储单元;
  2. 对于一个存储单元,没有相对应的物理地址;
  3. 对于给定的地址,可以访问多个固定的存储单元;
  4. 对于一个存储单元,可以通过多个地址访问。

二、MBIST测试算法

存储器内建自测试的中心思想就是在嵌入式存储器周围建立测试电路,测试电路控制存储器按照一定的步骤去工作,得到的输出结果与期望值进行比较来检验存储器的正确性。这些“一定的步骤”就是测试算法,测试算法的好坏决定了MBIST 的质量和效率。

1、性能指标

存储器测试算法的性能指标有两个:测试时间和故障覆盖率。

测试时间可以用算法时间复杂度来表征。算法时间复杂度是算法评价的通用指标,一般用O(f(N))表示,其中f(N)可以是常数、N、N2、NlogN 等,在存储器中,N 是存储器的存储单元数。算法复杂度是对算法效率的一个粗略的定量表示,它只区分常数复杂度、一阶复杂度、二阶复杂度等,而在存储器算法中,大多数算法的复杂度都是一阶的,那么为了更加细致的比较各种测试算法,存储器测试中通常也会用操作数来定量表征测试时间。

故障覆盖率:用来表征测试算法对某种故障类型的检测能力。对于存储器测试算法的评价有时也要考虑故障覆盖范围,它用来表征一个测试算法能覆盖多少种覆盖类型。在保证对能覆盖的故障类型的覆盖率的情况下,能覆盖的故障类型越多越好。

测试时间和测试覆盖率本身就是相悖的一对指标。想达到高的覆盖率,测试时间就可能被延迟;想减少测试时间,也许测试覆盖率就会降低。一个优秀的测试算法应该是在保证测试时间可接受的情况下,尽可能多的去覆盖故障类型并且覆盖率尽可能高。如何权衡测试时间和测试覆盖率是测试算法选择和设计的核心。

2、常见算法

常用的确定性测试算法有MSCAN(Memory Scan)算法,跳步 (GALPAT) 和走步 (Walking 1/0)算法,Checkerboard 算法和March 类算法。每种测试算法总有它针对的故障类型,这样每种算法的测试向量的规模和测试效率不尽相同,我们要综合考虑,选取最适合的测试算法。

1)MSCAN 算法

MSCAN 算法是一种最基本,最简单的测试算法。其算法过程是首先对所有待测单元写入全0 然后读取所有存储单元并判断是否有故障,接着写入全1 再读取所有存储单元并判断是否有故障,这种算法所使用的测试向量实际上是形式固定的存储器扫描序列,其操作次数是4N,与存储器地址位数成正比关系,时间复杂度为O(N)。这种测试算法时间复杂度低,测试向量简单,但是除可以检测所有SAF故障外,仅支持部分耦合故障的测试,故障覆盖率有限。

2)跳步(GALPAT)和走步(Walking 1/0)算法

跳步算法和走步算法操作过程类似,首先选定一个存储单元作为基本单元,其他单元作为普通单元,向基本单元内写入1(或0),普通单元写入0(或1),然后读取所有单元的数据,重复该过程,直到所有存储单元都曾经被选定为基本单元为止。

以跳步算法为例,其操作过程如下:

  • (1) 对所有的存储单元写入0(或1);
  • (2) 选定一个存储单元Cj 作为基本单元:对Cj 内的值求补;
  • (3) 对基本单元Cj 和普通单元Ck(k≠j)进行以下操作:读单元Cj;读单元Ck。
  • (4) 恢复单元Cj 的内容。
  • (5) 重新选定一个存储单元作为基本单元,重复操作(2)(3)。

该算法可以覆盖以下故障:SAF、TF、ADF以及部分CF。

3)Checkerboard 算法

Checkerboard 算法也叫做棋盘算法,基本过程是对每个存储单元进行赋值,保证每一个存储单元的值都与相邻单元的值不同,这样就将整个存储阵列分为了两块:存储值是0 的为A 块,存储值是1 的为B 块:

分块后,按如下过程完成算法:

  • (1) 对A 和B 块分别写入0 和1;
  • (2) 读所有存储单元;
  • (3) 对A 和B 块分别写入1 和0;
  • (4) 读所有存储单元。

该算法的操作数为4N,时间复杂度为O(N),可以检测和定位固定型故障和部分桥连故障,在BIST 算法中应用较为广泛。

4)March 算法

March算法是一系列的算法,由于这类算法具有较高的故障覆盖率同时测试时间较短,使得其在存储器测试领域得到了广泛研究和应用。这类算法已经广泛应用于运用于对大容量SRAM 和DRAM 的测试,随着研究的深入,各种改进算法也相继出现。目前的March 算法主要有MATS,MATS+,March X、March C、March C-、March C+、March LR 等类型。

March 的基本思想是在有限状态机的控制下遍历每个存储单元,并对每个存储单元进行一系列的操作,在对下一个存储单元操作之前,对当前单元的这些操作被称为March 元素,而各种March 类型算法的不同之处也恰恰体现在March 元素上。每个March 元素都有规定的地址升降顺序,当一个存储单元完成一系列操作后,根据地址升降顺序来决定下一个执行操作的存储单元。当某个March 元素对所有的存储单元做完所有操作后执行下一个March 元素。为了便于描述各种March 算法的执行过程,我们首先进行如下约定:

目前March 算法针对不同的测试目的衍生出了各种类型的March 算法,这些算法的不同之处在于March 元素的不同上,也就是对地址的操作顺序和对每个存储单元进行的操作不同。对单个存储单元的操作数和对故障的覆盖率体现了各种March 算法的不同特点,各种March 算法的操作数和覆盖率对比如表:

算法可以覆盖的故障如下:

SRAM BIST技术学习相关推荐

  1. Maya 2022中的硬表面建模技术学习视频教程

    Maya 2022中的硬表面建模 信息: 使用正确的拓扑和边流在Maya中建模硬曲面对象. 你会学到什么 硬质表面工具和技术 细分工作流程 边缘流动控制 正确拓扑 材料设置 Studio Lightn ...

  2. Maya阿诺德室外环境灯光照明和渲染技术学习视频教程

    Maya阿诺德室外环境灯光照明和渲染技术学习视频教程 Maya and Arnold_ Exterior Lighting and Rendering 教程时长 1小时47分 大小 1.1G 1280 ...

  3. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  4. 听听阿里老哥对算法工程师技术学习路线的建议

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 来源丨https://zhuanlan.zhihu.com/p/192633890 前言 知乎 ...

  5. 【技术学习】一次Node.js站点渗透

    前言 遇到一个站,后端是Node.js写的,对于这种类型的站点,一般比较难getshell,但也实现了最终的目标,拿到后台权限 信息搜集 先进行常规的信息搜集,子域名扫描.端口扫描.目录扫描等 这个站 ...

  6. 推荐一个很牛逼的 Github 项目:本人历时半年完成的【Java 面试 + Java 后端技术学习指南】,已拿大厂offer

    今天给大家分享一份[Java 面试 + Java 后端技术学习指南]:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.分 ...

  7. 小五思科技术学习笔记之SSH

    下面介绍一下相关概念: SSH的概念: SSH的英文全称为Secure Shell,SSH使用TCP的22号端口,其目的是要在非安全的网络上提供安全的远程登陆和其他安全的网络服务, 为什么要使用SSH ...

  8. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  9. 【C/C++】从技术学习和实际运用的角度来看,C/C++和Java到底区别在哪?C语言、C++学习路线?

    转自羊哥的公众号 这几个问题都是私信里常被问到的,也是我当时学习过程中的一些疑惑.谁说黑乎乎的命令行里运行的程序就没有用!这跟学什么编程语言.后续从事什么编程方向均无关,只要做编程开发,这四个计算机基 ...

最新文章

  1. 数据蒋堂 | 性能优化是个手艺活
  2. 【进程通信】Socket
  3. pwn入门-PLT表与GOT表、libc入门
  4. java rect 旋转_处理(Java可视化语言):使用rectMode(CENTER)而不是rectMode(CORNER)旋转矩形,留下奇数衰落轨迹效果...
  5. c盘怎么清理到最干净_C盘快满了不敢乱删,该如何清理?这里给你最详细的方法!...
  6. 【企业管理】摆脱三个依赖
  7. 北京内推 | 京东推荐招聘内容推荐研发工程师(2022届校招)
  8. 设计模式初探之模板方法(Template Method)
  9. python字典append_python中字典重复赋值,append到list中引发的异常
  10. golang的sync包例子
  11. springboot listener_Springboot 监听redis key的过期事件
  12. [算法设计题]输出三角形图形
  13. linux发送日志命令,linux:记录不同用户使用的命令发送到指定的目录中(可发送到日志服务器中)...
  14. 但是的近义词是什么,怎么用但是造句?
  15. Android -- Messager与Service
  16. 市场营销案例分析PPT模板-朴尔PPT
  17. html 表格转换为dbf,DBF Excel 文件相互转换-完美教程资讯
  18. 电脑打开应用程序提示配置系统未能初始化--解决方案
  19. 巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On)
  20. 计算机二级wps office考试题库,计算机等级考试题库:WPS Office试题

热门文章

  1. css3 图片放大缩小闪烁效果
  2. PHP-CGI, FastCGI, PHP-FPM的关系和区别
  3. 根据企业信息化应用需求来分析工作流平台的选型
  4. springboot 使用的配置
  5. 数据结构--栈 codevs 1107 等价表达式
  6. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
  7. 老李谈JVM内存模型
  8. 为网格布局图片打造的超炫 CSS 加载动画
  9. [转载]EXT核心API详解(一)-Ext
  10. 通过简易的前台代码实现无限二级域名转向(来自无忧 biyuan老矣)