使用LogicBIST与用户定义OCC实现固定型和跳变故障测试
📑 目录
使用LogicBIST与用户定义OCC实现固定型和跳变故障测试
会议: SNUG TPC DFT 2017
作者: Yunhao Xing, Ken Wang (ZhaoXin, Beijing, China)
页数: 12
源文件: SNUG_TPC_DFT_Xing_Implementation_of_Stuck_at_and_Transition_fault_test_paper.pdf
Page 1
使用LogicBIST与用户定义OCC实现固定型和跳变故障测试
Yunhao Xing, Ken Wang ZhaoXin Beijing, China
摘要
LogicBIST 逻辑内建自测试是一种有效的系统内自测试方法,用于高稳定性应用(如嵌入式CPU、汽车电子、医疗和航空航天)中的数字集成电路。本文将讨论我们如何在子模块中实现LogicBIST 逻辑内建自测试以测试固定型故障(stuck-at fault)和跳变故障(transition fault),而时钟来源于顶层设计中的客户OCC。其中包括我们遇到的挑战和找到的解决方案,如如何处理客户OCC和工具插入OCC在同一时钟路径中共存、如何使用同一LogicBIST控制器测试固定型故障和跳变故障、如何处理设计中的X(未知态)逻辑。还介绍了LBIST扫描综合和LBIST向量生成流程。我们解释了评估过程中遇到的一些问题,并提供了面积/时序开销结果。最后,对使用LogicBIST流程进行了总结。
Page 2
SNUG 2017
目录
1. 引言 .......................................................................................................................... 3 1.1 LBIST解压缩器 ............................................................................................. 3 1.2 LBIST压缩器 ................................................................................................. 4 1.3 LBIST控制器 ................................................................................................. 4 1.4 LBIST时钟控制器 ......................................................................................... 5 1.5 我们的LBIST方案 ........................................................................................ 5 2. 挑战与解决方案 .................................................................................................... 6 2.1 如何处理时钟 ................................................................................................ 6 2.2 如何用同一LBIST控制器测试2种故障模型 ............................................. 6 2.3 LBIST设计需求 ............................................................................................. 7 3. DC流程和TMAX流程脚本 ................................................................................. 9 3.1 DC流程 ........................................................................................................... 9 3.2 TMAX流程 .................................................................................................... 10 4. 时序与面积结果 .................................................................................................. 11 5. 遇到的问题 .......................................................................................................... 11 6. 结论 ...................................................................................................................... 12 7. 参考文献 .............................................................................................................. 12
Page 3
SNUG 2017
1. 引言
LogicBIST 逻辑内建自测试自测试使设计能够使用已为制造测试实现的相同扫描链来测试自身。它使用伪随机向量生成器(PRPG)创建扫描数据,并使用多输入签名寄存器(MISR)捕获设计响应。在测试结束时,如果实际签名与预期签名匹配,自测试将断言PASS信号。LogicBIST架构由四个组件组成——LogicBIST控制器、解压缩器、压缩器和LogicBIST时钟控制器——如图1所示。
1.1 LBIST解压缩器
LogicBIST解压缩器将数据馈送到核心逻辑的内部扫描链中。它负责生成目标故障关注位。
PRPG(PRPG 伪随机向量生成器)由以下两个组件组成: - 线性反馈移位寄存器(LFSR),生成下一个数据位的下一个数据字,作为当前数据字的线性XOR函数 - XOR相位移位器,消除LFSR输出抽头因移位寄存器特性而产生的相关性
在测试程序开始时,用户指定的种子值在一个时钟周期内并行加载到PRPG中。在测试程序期间,PRPG在每个时钟周期生成一个新的伪随机数据字,用于为内部扫描链生成扫描数据。
Page 4
SNUG 2017
1.2 LBIST压缩器
LogicBIST压缩器在卸载过程中接收并压缩来自内部链的数据。它由一个XOR树压缩器和一个MISR 多输入签名寄存器组成。XOR压缩器没有X容忍掩蔽能力。
在MISR中,每个寄存器输入捕获前一个寄存器输入和来自XOR压缩器的数据输入信号的XOR。图3展示了一个简单的MISR示例。
在LBIST测试程序期间,MISR值的序列取决于它捕获的扫描数据。在测试程序结束时,MISR的签名值与用户指定的预期签名值进行比较,设置STATUS_*信号以指示测试完成和通过/失败状态。
根据MISR线性移位寄存器结构,任何广播到扫描链中扫描单元的X都将导致所有MISR寄存器变为X,整个LBIST将被干扰。因此,添加LBIST功能的设计必须是X干净的。
1.3 LBIST控制器
LogicBIST BIST控制器包含以下内容: - 一个控制BIST操作的小型有限状态机(FSM) - 一个应用用户指定测试向量数量的向量计数器 - 一个为每个测试向量应用正确数量的移位时钟周期的移位计数器。每完成一个移位计数器序列,向量计数器减一
当设计处于任务模式且LogicBIST使能时: - LogicBIST控制器控制设计中的扫描使能和包装器移位信号 - 在测试程序开始时,FSM将解压缩器PRPG和压缩器MISR初始化为其初始状态,并将向量计数器和移位计数器加载为用户指定的初始值 - 在测试程序期间,LogicBIST控制器运行向量计数器和移位计数器的序列。当移位计数器计数其序列时,扫描链分别使用PRPG/MISR执行加载/卸载。当移位计数器达到零时,FSM执行单个捕获周期,将向量计数器减一,并开始新的移位计数器序列 - 当向量计数器达到零时,当前MISR签名值与用户指定的预期签名值进行比较。如果匹配,测试通过;如果不匹配,测试失败
Page 5
SNUG 2017
1.4 LBIST时钟控制器
LBIST时钟控制器在移位模式和捕获模式下提供时钟,由LBIST控制器控制。LBIST时钟控制器使用具有额外LogicBIST时钟控制逻辑的片上时钟控制器 OCC控制器设计。ATE时钟被用作BIST时钟。
在LBIST模式下,OCC控制器正常运行,只是时钟脉冲由脉冲向量信号(lbist_clk_enable[])决定,而不是由时钟链决定。该总线的宽度与时钟链长度相同。默认情况下,每个时钟的第一个时钟脉冲位连接到逻辑1,其余位连接到逻辑0。您可以选择从设计逻辑驱动此总线,使脉冲行为可编程。
1.5 我们的LBIST方案
我们选择了一个名为"core"的子模块来添加LogicBIST 逻辑内建自测试。该子模块仅包含1个时钟域,没有复位信号,只有非常少的非扫描单元。整个项目的设计结构如图5所示。Core的时钟来自顶层设计中的客户OCC,我们将使用此OCC在ATE测试期间测试整个芯片的跳变故障。
因此,如果我们在Core设计中添加LBIST功能,对于使用LBIST的跳变故障测试,工具将在Core设计内添加一个额外的OCC用于LBIST测试。在相同的PLL时钟源下将有2个串联的OCC。稍后我们将在图6中展示如何处理这种情况。
使用LBIST功能,我们希望它能够覆盖系统中的大多数ATPG 自动测试向量生成功能,因此我们希望它能够像在ATE测试中一样测试固定型故障和跳变故障。
Page 6
SNUG 2017
本文提出如何使用同一LBIST控制器实现固定型故障和跳变故障测试。
2. 挑战与解决方案
2.1 如何处理时钟
如第1.5节所述,当LBIST测试跳变故障时,必须使用工具插入的OCC,但我们仍然需要使用顶层设计中的客户OCC在ATE测试期间测试整个芯片。如何处理时钟结构?
我们选择在时钟路径中保留两个OCC,但始终确保同时只有一个OCC工作。我们将使用不同的测试模式来实现这两个OCC的工作,如表1所示。
表1:两个OCC如何工作
| 使用场景 | Codec | OCC功能 |
| 功能模式 | ATPG_EN=0 & LB_EN=0 | 两个OCC均旁路 |
| ATE扫描模式 | ATPG_EN=1 & LB_EN=0 | 用户自定义OCC工作,工具添加OCC旁路 |
| 系统LBIST模式 | ATPG_EN=0 & LB_EN=1 | 用户自定义OCC旁路,工具添加OCC工作 |
2.2 如何用同一LBIST控制器测试2种故障模型
通过工具在Core设计中添加一个OCC,在LBIST模式下,所有捕获周期都将由该OCC按我们的要求生成。与普通ATPG模式不同,OCC生成的时钟脉冲使用连接到OCC接口lbist_clk_enable[1:0]的常量值,而不是普通扫描链中控制的时钟位。因此我们可以控制这些常量值,使OCC在捕获时始终为固定型故障测试生成1个时钟脉冲,为跳变故障测试始终生成2个时钟脉冲。需要注意的是,固定型故障测试在捕获时也使用PLL时钟脉冲,而不是移位慢时钟。
表2:工具添加OCC如何工作
| 常量值配置 | 工具添加OCC行为 | 使用场景 |
| lbist_clk_enable[1:0]=11 | 捕获时生成2个时钟脉冲 | 跳变故障测试 |
| lbist_clk_enable[1:0]=01 | 捕获时生成1个时钟脉冲 | 固定型故障测试 |
如前所述,在LBIST开始之前,我们必须给LBIST控制器4个值,它们是"用户向量值"、"用户移位值"、"用户种子值"和"用户签名值"。我们使用TetraMAX为LBIST生成这4个值,并使用Design Compiler工具将这些值写入设计中。
Page 7
SNUG 2017
一旦这4个值被写入设计,我们的LBIST行为就固定了,但我们希望我们的LBIST控制器更灵活,使用同一LBIST控制器测试固定型和跳变故障。因此我们不再将这些值写入设计,而是使用JTAG 联合测试行动组链来配置这些值。我们可以生成多组这些值——一组用于固定型故障测试,另一组用于跳变故障测试——并在LBIST开始之前通过JTAG配置步骤提供这些值。设计结构如图7所示。
2.3 LBIST设计需求
如前所述,设计必须是X干净的,以确保LBIST MISR移位寄存器不会被来自扫描链的X干扰。需要注意以下事项。
2.3.1 非扫描单元
TetraMAX会将所有非扫描单元的输出视为X,X将传播到扫描单元并导致MISR寄存器全部变为X。因此我们应该在非扫描单元之后添加门控单元来掩蔽这些X,确保它不能干扰LBIST,如图8所示。
Page 8
SNUG 2017
2.3.2 所有存储器和PHY
为防止存储器和PHY的输出信号将X带入扫描链,我们应该为输出信号添加旁路逻辑,如图9所示,这是一种简单的方式,添加一个数据输入连接到其输出信号的寄存器的旁路逻辑。
有一种旁路方法需要更加小心使用,即从输入到输出的旁路逻辑,因为如果一个PI引脚直接连接到模拟模块输入且没有时序单元作为负载,该端口将不会添加包装器单元,同时输出信号有DFF作为负载,如果我们将输入直接旁路到输出,PI将连接到负载DFF,来自PI的X将被带入设计。
对于LBIST需求,SRAM的每个输出信号都应被旁路,但由于时序原因或设计需求,有些输出信号没有旁路逻辑。对于这些信号,我们将找到这些SRAM输出的所有寄存器,并使这些寄存器的SE引脚在LBIST模式下恒为1,如图10所示:
2.3.3 输入和双向接口
输入和双向端口会将X带入扫描链,因此我们应该添加包装器链来隔离所有输入和双向端口与设计的其余部分。您可以使用核心包装功能插入一个在自测试期间隔离设计的包装器链。
Page 9
SNUG 2017
通过这种方法,LogicBIST测试模式变为内向模式,将LogicBIST生成的数据驱动到输入包装器链中,并将捕获的输出包装器链数据整合到MISR中。
当为LBIST模式添加包装器链时,包装器链也同时在普通压缩扫描模式下工作。这意味着当我在模块core中添加LBIST时,在普通扫描模式下,由于包装器链的存在,我无法同时测试core和顶层,必须分别测试core和顶层。为不损失覆盖率,我们也添加输出包装器链,因此在内部测试模式下未覆盖的所有覆盖率将在外部测试模式下测试。但这带来了一个新问题:我们不想分别测试core和其他逻辑,如何解决这个问题?我们发现可以使用透明测试模式。
要对带包装核心的设计执行自顶向下扁平化测试,包装核心必须提供额外的测试模式,其中包装器链在逻辑上是透明的。这种核心级测试模式称为透明测试模式。在顶层,包装核心可以置于其透明模式中,以对整个设计执行自顶向下扁平化测试。这种顶层测试模式称为扁平测试模式。
在核心级别,透明测试模式被定义为内向标准扫描或压缩扫描测试模式的扩展。透明模式与其引用的内向模式相同,除了: - 包装器链被视为常规扫描链 - 专用包装器单元在逻辑上是透明的,尽管其触发器保留在包装器链中并充当I/O路径上的观察测试点 - 引用内向模式的任何扫描压缩编解码器被复用 - 馈通链驱动透明模式下的外向包装器扫描I/O
3. DC流程和TMAX流程脚本
3.1 DC流程
我们使用的粗略Design Compiler脚本如下所示,在insert_dft期间,我们将在设计中添加OCC,并同时实现LBIST功能、Ultra DFTMAX功能和包装器功能。
# enable logic bist feature
set_dft_configuration -logicbist enable -wrapper enable
enable Ultra DFTMAX feature
set_dft_configuration -streaming_compression enable
Page 10
SNUG 2017
# enable OCC controller added
set_dft_configuration -clock_controller enable
OCC controller enable
internal OCC configuration for 2 clock bit
set_dft_clock_controller -cell_name pll_controller_lbist -design snps_clk_mux \
-pllclocks {pll_clk_st/Z } -ateclocks {clk_lbist_shift} \
-cycles_per_clock 2 -chain_count 1 -test_mode tm_occ
wrapper chain configuration for used shared wrapper cell
set_wrapper_configuration -class core_wrapper \
-style shared \
-register_io_implementation in_place \
-mix_cells false \
-maximize_reuse enable -reuse_threshold 0 \
-use_system_clock_for_dedicated_wrp_cells disable
remove some port from wrapper list
set_boundary_cell -class core_wrapper -type none -ports {float_in[0] float_in[1] float_in[2]}
logic bist configuration
set_logicbist_configuration -test_mode mode_logic \
-clock clk_lbist_shift \
-base_mode mode_wrp_in \
-max_length 10 \
-prpg_width 10 \
-misr_width 10 \
-pattern_counter_width 10 \
-shift_counter_width 6
create_test_protocol
dft_drc -verbose
preview_dft -show all -test_wrapper all -test_points all
insert_dft
3.2 TMAX流程
我们使用的粗略TetraMAX脚本如下所示,使用此流程,我们可以获得LBIST工作所需的种子、签名、向量计数和移位计数。
read_netlist ./libs/core.v
read_netlist ./vg/lbist.v
run_build des_unit
set_rules x2 warn
set_delay -launch system
set_faults -model transition
set_drc -seq_comp_jtag_lbist_mode light_lbist
set_drc -allow_unstable_set_resets
set_atpg -min_ateclock_cycles 14
run_drc ./spf/lbist.spf -patternexec LBIST
source ./scripts/find_seed.tcl
find_seed -seed_count 20 {run_atpg -auto -jtag_lbist { 1 254 2 }}
write_patterns ./pattern/tmax.serial.stil -format stil -replace -unified -serial
quit -f
Page 11
SNUG 2017
4. 时序与面积结果
将仅使用DFTMAX Ultra功能和使用LBIST+Ultra功能的设计结果进行比较(使用2016.03-SP2工具),我们发现LBIST对时序的影响较小,但会带来约2%的面积增加。
表2:时序与面积结果
| WNS | TNS | AREA | |
| LBIST+Ultra | -50.73 | -49277.6 | 791476 |
| Ultra | -44.40 | -41689.7 | 776001 |
5. 遇到的问题
在评估过程中,我们遇到了一些问题:
1. LBIST控制器时钟:在工具版本2016.03-SP4之前,LBIST控制器中有一个时钟MUX,一个来自LBIST慢速移位时钟,另一个是工具添加的OCC输出。然后工具将把所有LBIST控制器时序单元添加到普通ATPG扫描链中,这是可以的,因为在非LBIST模式下,LBIST控制器将使用OCC输出时钟,这需要LBIST控制器满足PLL时钟的时序检查以进行普通ATPG跳变故障测试。但在2016.03-SP4以上版本中,LBIST控制器只有1个LBIST慢速移位时钟,但工具仍将LBIST时序单元插入普通ATPG扫描链中,这将导致错误,因为我们在普通ATPG模式下不使用此LBIST慢速移位时钟作为移位时钟。此问题在版本2016.12-sp1中通过使用命令解决:
set test_logicbist_exclude_ip_from_scan_chain true
2. 包装器链为馈通接口添加专用单元:在工具版本2016.03-SP4之前,对于仅由组合逻辑连接的端口,不会按手动编写的方式添加包装器单元,但在2016.03-SP4以上版本中,工具将为这些接口添加专用包装器单元,此行为可能导致X带入MISR。例如,如果有SRAM的输出信号直接连接到输出接口,如果工具在SRAM输出和输出接口之间添加专用包装器单元,SRAM引起的X将被带到此专用包装器单元并传播到MISR寄存器。我们可以使用"set_boundary_cell"命令将这些接口添加到非包装器列表中,但DFT工程师仍然难以判断哪些接口不应添加包装器单元。
3. 透明测试模式错误:对于2016.03-SP2工具版本,LBIST+Ultra流程中的透明测试模式存在错误。不是使用我们为所有测试模式定义的相同Scan-Input和Scan-Out接口,而是工具为设计中的透明测试模式添加了大量额外的测试扫描输入和扫描输出接口。最终我们找到了一个变通方案,通过黑入包装器扫描链移位逻辑中的包装器,使普通压缩扫描能够同时与顶层测试。包装器扫描链移位逻辑如图12所示,我们将从此逻辑中移除压缩模式,使普通压缩扫描模式像透明测试模式一样工作。
Page 12
SNUG 2017
6. 结论
我们可以通过使用"串联OCC"时钟结构实现LBIST功能且不改变普通ATPG时钟结构,并可以通过添加LBIST的JTAG链使用同一LBIST控制器测试固定型故障和跳变故障。时序影响较小,面积增加约2%。尽管在评估过程中我们遇到了一些问题,但我们已经找到了解决这些问题的变通方案,最终LBIST可以在我们的综合流程中通过并在仿真环境中通过。
7. 参考文献
[1] DFT Compiler, DFTMAX, and DFTMAX Ultra User Guide
[2] DFTMAX LogicBIST User Guide
[3] DFT_clk_mux and DFT_clk_chain Data Sheet
图片索引
本文共 6 张图片,存放于 _images/ 目录。
第3页:图1、图2 第4页:图3 第5页:图4、图5 第6页:图6 第7页:图7 第8页:图8、图9、图10 第9页:图11 第12页:图12