黄姣英, 李 鹏, 高 成
(北京航空航天大学可靠性与系统工程学院, 北京 100191)
现场可编程门阵列(FPGA)器件具有功耗低、稳定性强、可重复编程等优点,在航空航天、国防、电子通讯、医疗等各领域都有广泛应用。FPGA 的潜在缺陷对整个系统的可靠性和稳定性有着举足轻重的影响,因此对FPGA 的潜在缺陷进行检测有重要意义。 随着FPGA 器件朝着高集成度、大规模的方向不断发展,其测试难度越来越高,耗费时间越来越长,如何快速、高效地测试FPGA 成为人们关注的焦点。
FPGA 主要由4 部分组成, 分别是可编程逻辑资源模块(CLB)、输入输出模块(IOB)、互联线资源模块(IR)、内嵌核模块。 因此FPGA 的测试可以分解为对这4 大模块的分别测试, 分析各个模块的典型故障有助于简化测试工作,针对特定故障给出恰当的测试方法可以提高测试效率,本文对各模块的主要缺陷类型和常用的测试方法进行了简要介绍和总结。
CLB 是FPGA 的主要组成部分,CLB 有规则地分布在芯片内部,是实现逻辑功能的基本单元;IOB 主要负责内部逻辑资源和器件引脚之间的信息传输,通常均匀地分布在芯片的四周;IR 主要由决定线路模式的开关矩阵(SM)和实现信息传递的金属互连线组成,开关矩阵就是可编程连接点(PIP),决定线路的导通和断开;FPGA 内嵌核主要有随机存储器(RAM)、时钟管理模块(DCM)、数字信号处理器(DSP)、乘法器等模块,目的是实现更加强大又丰富的功能。 典型的静态随机存储器(SRAM)型FPGA 主要构成如图1 所示。
图1 FPGA 结构示意图
FPGA 整个寿命周期中, 总是伴随着各式各样的潜在缺陷, 缺陷机理和对电路产生的影响各不相同。为了便于分析和研究影响FPGA 可靠性的主要潜在缺陷,将潜在缺陷模型化是非常必要的方法,让测试聚焦于最典型的缺陷[1]类型对简化测试工作有很大帮助。
2.2.1 固定型故障
所谓固定型故障是指电路中某一个电平信号不再随输入信号的改变而变化,成为固定的值。 如CLB模块中查找表的断开故障,IR 模块中开关矩阵的常开、 常闭故障,IOB 端口始终保持高或低电平故障等,这些故障都可以称之为固定型故障。 固定型故障主要分为两种:固定1 型故障和固定0 型故障。
2.2.2 桥接故障
互连线资源占FPGA 面积的一半以上,芯片内部连线非常复杂,很容易发生故障,桥接故障是互联线的一种典型故障。 桥接故障一般可以理解为短路故障,导致该故障的原因比较复杂,桥接故障主要分为两种,即输入管脚与输入管脚、输入管脚与输出管脚之间的桥接故障。
2.2.3 暂态故障
暂态故障表现为短时间内器件功能无法正常实现,随后又可以自动恢复正常,甚至反复出现,也就是经常遇到的“ 死机”现象,此故障会对用户产生相当大的困扰。 该故障主要分为两种:瞬态故障和间歇性故障。 电磁环境干扰以及生产制造工艺不达标是导致暂态故障的主要原因。
2.2.4 延迟故障
延迟故障表现为输出无法在预定的时间内正确响应,主要由结构设计不合理等原因引起,延迟故障集中发生在IR 模块和内嵌核模块,如响应和触发的延迟等。 这种故障对时序电路的影响非常大,可通过故障仿真对结构的不合理之处进行改进。
FPGA 的可编程特性是对其进行测试的基础,通过编程使之具有特定功能,然后进行测试来验证是否存在故障。 FPGA 测试流程如下:1)配置下载,使芯片具有特定功能;2)施加测试向量;3)对比标准响应和测试响应, 确定被测FPGA 是否存在故障。 在实际测试中,完成对所有待测资源的全面测试一次配置肯定不够, 故而需要进行多次配置来覆盖所有待测资源。FPGA 的测试基本流程如图2 所示。
图2 FPGA 测试基本流程
阵列法就是利用FPGA 内部资源排列的规律性将其组成阵列进行测试的一种方法,通过编程将阵列中待测资源配置成相同的功能,逻辑单元“ 排成队”前者的输出作为后者的输入,依次进行测试,故障信息传递通路就是整个被测逻辑资源阵列,阵列的两端分别接入输出和输入端口,用于测试信号的输入和测试响应的输出。 阵列法只需少量的IO 端口,测试时不会因为IO 资源的不足受到限制或者影响。 阵列法测试如图3 所示, 使用此方法首先要假定阵列中只有一个逻辑资源存在缺陷,因为从故障信息无法准确识别多个逻辑资源同时存在故障。 测试时,针对FPGA 不同的配置,故障模型也应随之变化。
图3 基本阵列的测试方法示意图
该方法与阵列法大体相似, 但两者也有区别,故障信息的传输通道不再是整个被测阵列而是将相邻行编程形成的异或门电路。 用异或门电路传递故障信息虽然可以将任意故障信息输出,但是存在故障屏蔽的问题, 输出端只能观测到数量为单数的故障问题,双数个数的故障无法观测到;阵列法中逻辑资源排成队依次测试,异或门级联电路测试法中被测逻辑单元可以并行测试,测试向量都是相同的。 此方法同样不会受到IO 接口数量的限制。
此方法与阵列法类似,也是将被测逻辑组成阵列进行测试。 区别是传递故障信息的通路是相邻行逻辑资源通过编程形成的与门和或门级联电路而不是被测逻辑资源阵列。 此方法可以检测多逻辑单元故障,如果将电路单独配置为或门级或者与门级电路,可以分别检测到正常的低电平信号转变为高电平信号的故障和正常的高电平信号转变成低电平信号的故障,如果要检测所有错误信号,只需将电路同时配置为与门和或门级电路即可。
基于异或门、基于与门和或门的CLB 测试如图4所示,这两种测试方法在一定程度上解决了故障信号传输的问题,但是要完成全面测试还需要将作为传输故障信号的行或者列重新进行配置,这样导致的问题是配置次数会翻倍增加。
图4 基于异或门、基于与门和或门的CLB 测试示意图
以上3 种测试方法原理相似, 只是故障信息的传递途径有所不同。IOB 常见故障如断开故障、固定型故障以及CLB 之间的互联线的桥接故障、开路故障等都会影响整个测试过程, 但是使用以上方法测试FPGA时,假定IOB 和互联线一切正常,主要检测CLB 的固定型故障,即通过检测正确信号是否转换为错误信号来确定CLB 是否正常。
内建自测试(BIST)通俗地讲就是“ 利用自己本身来测试自己”,因为FPGA 具有动态可编程特性,测试需要的向量生成器(TPG)和输出响应检验电路(ORA)可以通过对自身的一部分逻辑资源编程来实现[2],剩余的逻辑资源称之为待测电路(WUT),TPG 生成的测试矢量施加到WUT 上, 将输出导入ORA 进行对比,如果与标准响应相同则被测对象没有故障,否则认为其存在故障。 测试完成后三者互换角色直至覆盖所有逻辑资源,直至测试完毕。 BIST 的基本构造如图5 所示。
图5 BIST 构造简图
内建自测试所需IO 端口少、测试时间较短,观察ORA 的输出响应仅需简单的设备和仪器, 成本较低。但是,BIST 方法中测试向量不是从外部施加而是由FPGA 内部产生,这会导致内部电路更加复杂,而且无法同步测试IO 端口。 BIST 测试法不仅可以测试CLB模块,还可以对IR 模块以及内嵌核进行测试,测试IR部分时,认为其他部分均正常,IR 部分的固定型故障、桥接故障以及延迟故障均可通过BIST 测试法检测出来。
边界扫描是一种新的芯片测试方法,由国际联合测试行动组(JTAG)在1987 年提出,并在3 年后形成了IEEE1149.1 标准。边界扫描结构主要由测试存取接口(TAP)、TAP 控制器、数据寄存器、旁路寄存器、边界扫描寄存器、指令寄存器组成[3],存取接口主要担任测试矢量输入、响应输出、测试控制等任务,其包含测试模式选择(TMS)、测试时钟(TCK)、测试数据输入引线(TDI)、测试数据输出引线(TDO)、测试重置(TRST)5 个端口,其中TRST 端口是可选的,可有可无。 具有该端口的FPGA 会预先将具有某些功能的模块植入其中,可通过边界扫描通道使其处于某种功能模式。
边界扫描测试技术就是将IO 端口的移位寄存器串联成移位寄存器链,在测试模式下,边界扫描单元能够对器件的引脚和逻辑资源进行观察和控制,可以往寄存器中移入数据作为测试激励,也可以移出数据获取响应, 通过对比测试响应和标准响应判断FPGA芯片是否存在故障。 边界扫描结构如图6 所示。
图6 边界扫描结构简图
根据边界扫描测试的原理,FPGA 内部状态只能通过IOB 的状态来确定,当出现响应输出和预期不同时,只能确定连接输入和输出接口的整条FPGA 布线中发生了故障,而无法确定是CLB 资源的故障,还是开关矩阵的固定型故障或者常开、常闭等故障。
基于位流回读技术的测试方法测试原理是:读取配置寄存器中有用的位流信息并与标准响应对比,判断芯片是否存在故障。 回读模式可分为两种[4]:抓取回读与验证回读。 验证回读可读取全部配置存储单元中的数据,抓取回读在验证回读的基础上还可以读取逻辑资源和IOB 寄存器的当前值。 测试流程如下:首先将测试向量通过边界扫描施加给IOB 端口,进而施加给待测电路,然后将测试输出连接到待测电路邻近逻辑资源的触发器上,触发器状态值由位流回读技术来读取, 读取的触发器状态值就是待测电路的测试响应,再将测试响应与标准响应对比,如果两者相同,则待测电路不存在故障,反之存在故障。 该方法主要有以下优势:可以更精准地确定故障位置;可通过编写复杂的测试向量来提高覆盖率;配置次数可以大大降低。 基于位流回读的测试平台如图7 所示。
图7 基于位流回读的FPGA 测试平台
位流回读技术测试范围较广,如CLB 资源中的查找表、 触发器,IR 资源中的互联线段和PIP 节点以及内嵌核中的乘法器和块RAM 等, 主要测试断开、桥接、固定型故障和功能故障等。
FPGA 也可以通过自动测试设备(ATE) 进行测试,此方法自动化程度较高,测试矢量的施加和测试响应的回收都可以自动进行,操作非常便捷,而且通用性很强,可以测试多种电路。 ATE 测试流程如下:首先要对FPGA 进行配置,使其具有特定功能,然后从配置位流中获取管脚的相关信息,测试信号通过管脚施加给FPGA, 对被测逻辑资源的时序和逻辑状态进行控制,测试响应也同样由管脚回收,对其进行分析得出结果,由此定位和诊断FPGA 的故障[5]。
ATE 测试同时也存在以下问题:ATE 测试需要依托昂贵的相关设备, 成本太高, 无法大规模应用;对FPGA 的全面测试,往往需要多次配置,但是设备的存储空间有限,可能无法满足要求;许多信息需要人工分析,处理起来非常繁琐,需要耗费大量精力。
ATE 测试主要测试CLB 模块, 使用此方法首先假定管脚和互联线不存在桥接、固定型故障、延时故障或其他故障,通过观测输出响应判断CLB 是否存在故障。
各种测试方法的优缺点如表1 所示。
表1 各种测试方法的优缺点
CLB 里面主要有查找表、触发器以及快速进位逻辑等模块,所以,对CLB 的测试可以拆分为对这几个主要模块的测试[6],对所有逻辑资源全面测试往往需要多次配置。
LUT 是逻辑资源的主要组成部分,查找表有3 种不同的配置模式, 只有RAM 模式利用到了查找表内部的全部资源, 测试时可以认为查找表就是一个RAM[7]。查找表故障模式主要有译码故障[8]、断开故障、固定故障、转换故障等,断开故障是固定型故障的一种特殊形式。
查找表的测试也是基于其阵列式分布特点和可编程特性[9],4 输入查找表在主流FPGA 中广泛使用,以此为例,测试时将逻辑资源划分为2 类,将被测试行中每个查找表设计成4 输入异或门, 故障信息传递行中查找表设计成4 输入与门和4 输入或门; 故障信息传递行的输入就是被测试行的响应输出,最后根据逻辑门运算结果判断被测行是否存在故障,要完成对所有LUT 的测试,需要把被测行和故障信息传递行互换角色,重新配置一次,验证故障信息传递行是否存在故障。 测试方案如图8 所示。
图8 LUT 测试方案
触发器故障主要为功能性故障[10],表现为能否正确存储与接收数据, 是否被正确的时钟边缘触发,能否被正确置位、使能,是否拥有正确的初值等。 该模块测试的关键在于覆盖所有功能组合并保证故障输出能正确被检测。
触发器测试一般采用阵列法,将触发器串接成移位寄存器阵列,从阵列输入端施加测试信号,如果任何信号都可以从输出端正确输出, 则触发器功能正常;如果信息传递断开,输出端的信号会发生异常,则说明该阵列中存在故障问题。 在阵列两端分别接入一个输入端口和输出端口,采用时钟上升沿触发。 触发器测试示意图如图9 所示。
当然,也可以采用位流回读技术对触发器进行测试,直接对触发器施加测试信号,利用读取的响应值对触发器进行故障诊断,该方法不会产生故障屏蔽问题,但是过程会非常繁琐,费时费力。
图9 触发器测试示意图
快速进位逻辑主要承担提升FPGA 性能和运算速度的任务,大大提高了加法器、累加器、比较器、计数器的效率,进位逻辑模块的主要故障表现为功能故障。
快速进位逻辑测试原理是把每个Slice 设计成全加器,再使用其内部的进位输入和进位输出把全加器串接成加法器链,将前者的进位输出连接到后者的进位输入,改变全加器链首端的进位输入,如果尾端的输出值等于前一个全加器的进位输入值,则全加器链不存在故障,否则,可以认为进位逻辑链存在故障。 测试时,还需要设计相应的数据发生器、比较器以及移入、移出数据的移位寄存器等,在这些辅助模块共同参与下方可完成对进位逻辑的完全测试。
金属互联线是FPGA 内部传递信息的通道,根据其结构的不同[11],主要有2 种类型,一种称之为分段互连型,另一种称之为连续互连型。 连续互连型金属线跨度较大,如全局时钟线等。 分段互连型金属线通过开关矩阵中的可编程连接点连接, 长度各不相同,具有布线灵活等特点。
一般而言, 互联线故障类型主要有以下几种:互联线开路故障、短路故障、桥接故障、固定型故障(固定1 型和固定0 型),开关矩阵常开、常闭故障[12-13],延迟故障等。测试时一般不考虑延迟故障。图10 给出了常见的几种故障模型示意图。
改进内部结构测试法的主要原理是将移位寄存器植入开关模块,配置只下载一次,测试时在对被测电路施加测试向量、 测试响应结果处理完毕之后,下一次配置由植入的时序逻辑产生,并写入SRAM 存储单元,再次对被测电路施加测试响应、处理输出结果,直至测试全部完成。 但是此方法会浪费芯片的面积。
互联资源的测试一般不考虑逻辑资源与互联线的连接部分,测试时通过编程将开关和互联线配置成特定模式,然后对其施加恰当的测试向量,根据结果做出判定。 为了覆盖所有的开关和连线往往需要多次编程。
图10 FPGA 常见互联线故障模型
3 次编程法就是通过3 次编程达到对开关和互联线的全覆盖,第一次采用正交配置,对纵向和横向的互连线进行诊断, 第二次和第三次采用斜向配置,对剩余的线段进行诊断。 3 次编程法配置图形如图11(a)、(b)、(c)所示。
6 次编程的方法如下[14]:
第一次,闭合所有NE 和WS 开关,其余开关全部断开;
第二次,闭合所有ES 和NW 开关,其余开关全部断开;
第三次,闭合双数号纵向线路中全部的NS 开关,单数号纵向与单数号横向线路交接处, 闭合SE、EW、WN 开关,单数号纵向与偶数号横向线路交接处,闭合SW、WE、EN 开关,其余开关全部断开;
图11 3 次编程法配置图形
第四次,闭合单数号纵向线路中全部的NS 开关,双数号纵向与单数号横向线路交接处,闭合SW、WE、EN 开关,双数号纵向与双数号横向线路交接处,闭合SE、EW、WN 开关,其余开关全部断开;
第五次, 闭合双数号横向线路中全部的WE 开关,单数号横向与单数号纵向线路交接处,闭合WS、SN、NE 开关, 单数号横向与双数号纵向线路交接处,闭合ES、SN、NW 开关,其余开关全部断开;
第六次, 闭合单数号横向线路中全部的WE 开关, 单数号横向与单数号横向线路交接处, 闭合ES、SN、NW 开关,单数号横向与偶数号纵向线路交接处,闭合WS、SN、NE 开关,其余开关全部断开。
6 次配置示意图分别如图12 (a)、(b)、(c)、(d)、(e)、(f)所示。
IOB 端口是FPGA 芯片与外界实现信息传输的交通枢纽。 只有保证了IOB 的稳定性,才可以通过这个交通枢纽对FPGA 芯片进行全面的测试。 IOB 的故障模型可以分为恒为0 状态故障、恒为1 状态故障、断路故障和三态故障等[15]。 对于I/O 接口的测试现在主要有以下几种方法。
一般的功能测试无法检测到晶体管的栅氧化层短路、常开、常闭等故障,FPGA 是采用CMOS 工艺生产制造的,IDDQ测试正是依据CMOS 的自身特性对FPGA 进行检测的一种方法,按照理论,当系统无故障时,PMOS 和NMOS 网络不可能同时导通, 流过管脚的是微安级的漏电流,但是,如果电路存在缺陷或者短路故障,那么流经电路的静态电流值会突然增大几十倍甚至更高。 通过观测电流值是否异常可以判断IOB 端口是否发生故障, 但是这种测试方法需要大量的时间,因为等待电流出现异常是一个较为漫长的过程。
边界扫描主要测试IOB 的功能是否正常,即能否正确、快速地完成外界和FPGA 的信息交换,绝大多数FPGA 拥有边界扫描存取接口, 而且支持IEEE1149.1 的测试协议,在设计、生产时就已经将独立的边界扫描测试结构镶嵌在IOB 端口内部,边界扫描的指令和结构毫无保留地向用户开放,将这些植入的结构打包并定义为测试专用模块,需要对IOB 进行功能测试时调用此模块即可。
基于阵列的IOB 测试就是把FPGA 的一部分IOB 端口配置为输入端口,另一部分IOB 端口配置为输出端口,将整行或者整列的逻辑单元配置成特定功能的逻辑电路,再通过内部互联线将输入端口、逻辑资源和输出端口连接成整体,测试时,从输入端口输入高电平或者低电平,通过编程将相邻行配置成传递故障信息的异或门级联电路,串接的整个资源是否存在故障[16]可以通过观测输出端口的输出信息来确定,测试时将高电平和低电平分别在输入端口施加一次,以防止造成测试误判。 连线资源测试如图13 所示。
FPGA 强大又丰富的功能离不开DSP、DCM、块RAM、乘法器等内嵌核,DSP、DCM 功能强大、独立性强、测试复杂且意义不大,本文主要叙述块RAM 和乘法器的测试方法。
图12 6 次配置示意图
图13 连线资源测试示意图
块RAM 主要应用于构造数据高速缓冲存储器[17]。常见的故障主要有跨接故障、耦合故障、译码故障、转换故障、粘结故障和固定型故障等。 存储器测试算法主要有以下几种:跳步法、对角线法、棋盘格法、走步法、March 法、蝴蝶法等[18]。其中,March 算法灵活性强、覆盖率高、测试矢量复杂度低,在实际测试中较为常用。
7.1.1 基于阵列的测试法
块RAM 彼此之间互相连接可以构成更大的SRAM,测试时将块RAM 组成移位寄存器阵列,从阵列顶端写入数据,上级RAM 的输出作为下级RAM 的输入,观测最后读出的数据并与顺序写入的值进行对比,如果相同,则说明功能正常,否则认为存在故障,将所有RAM 串联编程, 再经过合理的布局布线等操作覆盖率可以达到100%。
7.1.2 基于位流回读技术的块RAM 测试
利用边界扫描技术通过IOB 端口将含有March测试序列的测试矢量施加给块RAM 的地址空间和写输入[20],将逻辑资源中的触发器作为中介传输数据,通过位流回读技术读取块RAM 的状态值, 再由相应的诊断和定位模块对输出进行比对分析, 判断块RAM是否存在故障。
乘法器故障主要表现为功能故障,测试时主要检验其功能是否正常,穷举法[19]虽然简单、直接、覆盖率高,但是需要耗费大量时间,难以在实际测试中应用。乘法器主要由加法器单元、部分积分单元、再编码单元等构成,因此针对乘法器的测试可以转换为对这几个单元的集中测试。
乘法器测试主要用到边界扫描和位流回读两种技术,首先通过边界扫描技术将测试矢量施加给乘法器的输入端口,将乘法器的输出接到逻辑资源中的触发器上, 再利用位流回读技术读取触发器的状态值,相当于间接得到乘法器的响应值, 对其进行比对分析,进而判断乘法器是否发生故障。
FPGA 功能强大、 应用范围广, 但是内部结构复杂,对芯片潜在缺陷的检测难度较大。 目前FPGA 测试主要存在配置时间过长、故障定位精度低以及测试成本高等问题。 本文对常见的测试方法进行简要的总结和概述,梳理了逻辑资源模块、互联线资源模块、接口资源模块以及内嵌核模块4 部分的主要潜在缺陷,针对各模块的潜在缺陷分析了缺陷的具体表现形式,归纳了对应的测试方法。 采用分块测试的思想可以提高测试效率,减少不必要的人力、物力的浪费,本文研究成果可用于现有主流FPGA 的测试工作之中。