随着现场可编程门阵列( FPGA) 芯片在商业、军事、航空航天等领域越来越广泛的应用, 其可靠性和可测试性也显得尤为重要。对设计人员来说,FPGA 的使用相当灵活。然而, 正是这种应用的不确定性和重复可编程性, 增加了芯片测试的难度。目前, 已有较多工作集中于基于SRAM 结构的FPGA 测试方法研究[ 1-7] 。其核心问题是建立什么样的测试模型, 以及施加什么样的测试激励, 使故障激活, 同时, 还能在可及端测量出来。因此, 还要确定在什么地方施加激励, 在什么地方进行测量。
根据需求, FPGA 的测试大体可分为面向制造的测试过程( MT P) 和面向应用的测试过程( AT P)两类。MT P 主要是从制造商的角度来测试, 测试成本主要体现在测试向量集长度所决定的测试时间的费用上。MTP 主要针对可编程逻辑块( CLB) 、输入输出单元( IOB ) 、可编程连线( PI ) 及编程用的SRAM 等进行测试。AT P 是在应用级上的测试,也就是把FPGA 配置为特定的功能进行测试, 具有很强的针对性, 测试过程相对简单。但是, 不管是MTP 还是AT P, 都至少有一个{ 测试配置( TC) , 向量实施( TS) } 的过程[ 6] 。完整的测试通常需要反复进行配置和测试。一般来说, 编程比较费时且编程后的配置速度较低。因此, FPGA 测试的关键在于如何在保证故障覆盖率的前提下, 用最少的编程次数, 将FPGA 低速在线配置和高速测试有机地结合起来, 从而实现完整的测试。
本文介绍一种基于SRAM 结构FPGA 逻辑资源的测试编程方法, 并以Xilinx 公司的XC4000 系列[ 8] 为例, 在BC3192V50 数模混合集成电路测试系统上, 通过从串模式, 实现数据的配置和测试。
2 基于SRAM 结构的FPGA从编程原理来说, FPGA 主要有基于反熔丝( arrTIfuse) 结构和基于SRAM 结构两大类。XC4000 系列是基于SRAM 结构的, 其逻辑功能的配置基于内部阵列分布的SRAM 结构, 即通过对这些SRAM 进行不同的加电配置, 确定各个部分的逻辑功能; 也可通过加载不同的配置数据, 实现逻辑功能的不断更新和反复改写。实际上, 就是由加载于SRAM 上的配置数据决定和控制各个CLB、IOB 和PI 等的逻辑功能和相互之间的连接关系。基于SRAM 结构FPGA 的另一个重要特征, 在所谓的逻辑单元阵列( LCA) 结构。正是这个LCA 分布结构, 使之具备门阵列和可编程器件的双重特征。LCA 像一个门阵列, 通过内部可编程连线, 把可编程逻辑块按设计的要求连接起来, 实现阵列中的逻辑功能。
另外, 由于采用了先进的半导体工艺和改进的结构, XC4000E 系列能够支持高达80 MHz 的系统时钟频率和超过150MHz 的内部性能。
3 测试编程通过编程, 将每一行的CLB 连接起来, 形成一个一维阵列[ 1-2] ; 再将每个阵列作为整体进行测试,如图1 所示。
故障模型采用多CLB 混合故障模型, 即一个FPGA 中可有多个逻辑单元发生故障, 而逻辑单元内的故障对不同的电路采用不同的故障模型。对于查找表结构, 假定其可有固定为"0"或"1"的固定故障; 而对于多路选择器和触发器, 则假定可发生各种功能故障[ 4-5] 。
每个阵列中的CLB 都按图1 所示的连接方式进行编程, 前一个CLB 的输出信号作为后一个CLB 的输入信号, 只有左右两端的CLB 与IOB 相连。所有CLB 都设计编程为相同的电路结构, 既是被测电路( CUT) , 也是故障传递电路( CFT) 。CLB 中的两个查找表G 和F, 均设计为具有一个故障激活端( T) 、两个故障传递端( Yn 和Xn) 和一个故障传递方式选择端
( SEL) 的四输入逻辑结构, 且使用相同的T 输入和SEL 输入。查找表F 的两个输入端( Yn 和Xn) 与此CLB 内两个触发器的输出端( QYn 和QXn) 相连, 用于检测和传递触发器的故障信号。查找表G 和F 的两个输出信号( Yn 和Xn) 作为下一个CLB 中查找表G 的输入信号( Yn+ 1 和Xn+ 1) 。
故障传递电路采用基于与门和或门的电路形式[ 4 ] 。用SEL 输入控制是或门传输还是与门传输。此时, 如果有一个或多个CLB 的输入输出端有正常为1( 0) 、错误为0( 1) 的故障信息, 其输出端总能观察到故障信息0( 1) 。
对所有阵列并行地进行测试, 可以减少测试时间和所需要的IOB。同时, 因为所有CLB 都是同样的编程结构, 因此, 可共用时钟和垂直输入, 不同阵列的输入也可共用, 从而进一步减少了所需的IOB[ 1-2] 。
但是, 由于编程后的阵列是一个时序阵列, 故一定程度上增加了测试此阵列所需要的时间。另一方面, 由于每个CLB 在被测试的同时, 还要用来传递故障信息, 因此, 测试精度相对单独用一行CLB 来传递故障信息的方法[ 3-5] 有所降低。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)