测试类型
Functional测试
验证电路的功能
Simulation、verification of design logic
模拟、数字、数模混合测试
可以是板级、子系统、系统级进行测试
结构化测试
主要目标是对生产制造过程中的故障进行测试
包括
DC Scan
AC Scan
Logic BIST
BSD
Fault Models
Stuck at fault
如果测试sa-0/1故障,需要将其置于相反的值(1/0)
观察(Observe)这个点的value值,并且与期望的值进行比较来判断是否有故障
对于下面的例子,只需要3 vectors就可以覆盖6个faults。
一些fault是等价的。
Transition fault
Transition faults模型是用于测试是否有大的delay这种故障。
常出现的有:slow to rise和slow to fall故障类型
测试这种故障,需要产生一个翻转,然后在期望的是将窗口内捕获是否能够有期望值。
Path delay
IDDQ
Open
Timing aware
Bridge fault
Two models exist:
Layout aware test based on physical attibutes
Statistical model testing each gate terminal multiple times (multiple detection model)
Testability
Controllability
能够通过primary inputs控制(control)电路的内部状态的能力。
Observability
能够通过primary outputs观察(observe)内部电路状态的能力。
挑战:
集成电路规模的复杂度的提高
DFT能够使用的IO资源有限
通过scan chain提高testability
普通的寄存器替换成scan 寄存器
连接scan寄存器组成scan chain
增加一些scan IO
高测试性电路
测试时电路可以置于已知状态
PIs是可控的
Pos是可观测与可测量
Scan cell类型
Mux scan cell类型:
应用在大部分的设计中
通过MUX选择输入的数据
在normal mode/capture mode下走D pin
在shift mode下走Scan_in(SI)
Scan_enable(SE)用于选择不同的mode
增加了传输延时
增加了5-15%面积
LSSD Scan cell类型
又是会在高速design中应用
常用的mode:
Normal mode:使用系统CLK capture数据D
Test mode:使用non-overlapping clock(ENSA ENSB)通过latch来shift SI
Scan output是SO
Scan chain
Function/normal mode/capture mode下:SE=0,选中D pin
Shift mode下:SE=1,选中SI,scan cell连成串行的链,通过scan chain移入/移出数据
在scan测试时主要的3个阶段:
Setup
Load/unload
Lunch/capture
DC测试是用于测试stuck-at故障
AC测试是用于测试transition故障
ATPG
Automatic Test Pattern Generation的简称,自动化的产生测试向量
Test pattern,有时称为Test vector,是一系列的0和1值
芯片生产测试
Automatic Test Equipment(ATE)是芯片测试仪器
ATE可以存储pattern并将其通过primary input加载到芯片中
ATE可以检测芯片输出,判断是否有生产制造故障
Scan flow
准备综合后的gate level的netlist
Scan insertion来串联scan chian
运行ATPG来产生用于ATE基台的test pattern
Design requirements→RTL Coding→RTL Design→Synthesis→Gate Level Netlist→Scan Insertion→Scan Inserted Netlist→ATPG→test pattern→ATE
基于Tessent扫描插入流程
Introduction to Tessent Scan
Tessent Scan可以识别并插入一系列测试电路:包括不同的scan架构和test point,工具支持如下的structrues:
Scan——Too将通过DRC检查的sequential elements转化成scan cells并串chain
Wrapper chains——Tool识别input/output pin按照一定的rule插入相关的wrapper chain。
Test point——Tool根据user定义或者基于分析插入用于提高test coverage或者降低pattern插入的control/observe的test points。
TCD(for sub-chains):如果有已经存在的scan模块,可以通过tcd文件做相关描述,并将其作为输入文件,该模块的scan chain部分作为整体串入chain。
Test Procedure File:该文件描述scan电路的行为,对于存在scan的电路或者需要初始化的时候会用到。
调用Tessent scan
当tessent scan已经安装并可以使用时,使用tessent -shell调用进入shell mode,并指定context为“dft -scan”
Tool调用后首先进入setup mode,就可准备加载design或者相关config,定义电路以及相关scan data。
Scan insertion flow
如果综合的netlist只有普通的寄存器,scan过程可以进行scan cell的替换。
也可以使用命令强制替换:set_cell_mapping -new_model SDFF -model DFF -model DFF -module ABC
定义scan clock
比如design中存在两个scan clock,“clk1”和“clk2”,关断状态(off-states)为0可以使用如下方式定义:
add_clocks 0 clk1 clk2
如果有相同的off-state,可以在同一命令定义多个clock,必须在进行DRC检查之前定义完clock,不然会导致DRC检查fail或者导致寄存器无法上chain。
如果不清楚当前design中的clock,使用命令analyze_control_signals去识别以及定义所有clock,如果有其它控制信号(set/reset/scan_en)的话,也会被定义上。
根据定义的scan clock来串chain,或者说某个寄存器是否符合上chian的其中一个条件是clcok是否定义的scan clock。
Scan en配置
使用如下命令为scan chain分配scan_enable信号
set_scan_enable [primary_input | scan_enable_pin_pathname]
输入端口初始化
使用如下命令指定输入端口初始化:
set_input_constraints SEL -C1
user-class non-scan/scan
user可以强制的指定某些instance/model为non-scan/scan。
比如:
add_nonscan_instances -instances i_1006
add_nonscan_instances -all
add_scan_instances -instances i_1006 i_1007
delete_nonscan_instances
delete_scan_instances
report_nonscan_models
report_scan_elements
report_scan_models
DRC检查
确保扫描操作可以正常执行;确保寄存器的可控性
使用set_system_mode analysis/check_design_rules&report_drc_rules
出现违例时,工具标记scannability rules(S Rules)
scan clock violation
async set/reset violation
scan chain config
使用set_scan_insertion_options命令控制scan chain相关的配置,使用指定scan chain的最大长度不超过1024,使用如下设置:
set_scan_insertion_options -chain_length 1024
使用-chain_count指定chain的数量
scan chain family
scan chain family是一个智能容器,它控制来自特定扫描元素种群的新扫描的分配
使用create_scan_chain_family命令生成新的chain families。delete_scan_chain_families和get_scan_chain_families相关的命令用于删除和获取chain families。
配置scan mode
工具支持根据用户要求配置任意scan mode,不同的mode包含不同的scan chain/scan family,应用于不同的测试要求。工具也会生出相应的译码电路,使用add_scan_mode命令定义scan mode
例子:定义edt mode以及相关scan chain配置
#find edt_instance
set edt_instance [get_instances -of_icl_instances [get_icl_instances \
-filter tessent_instrument_type==mentor::edt]]
# Specify different modes the chains need to be stitched
# EDT is built-in with Bypass
add_scan_mode edt_mode \
-edt_instance $edt_instance
例子:定义多个mode,不同的mode scan chain配置不一致
add_scan_mode mode1 -chain_count 100
add_scan_mode mode2 -chain_count 300
例子:定义chain families以及scan mode
tegister_attribute -name is_occ -obj_type scan_element -value_type boolean
set_attribute_value [get_scan_elements -below_instances *_occ_*] -name is_occ
create_scan_chain_family occ_chain -include_elements \
[get_scan_elements -filter is_occ]
create_scan_chain_family not_occ -include_elements \
[get_scan_elements -filter !is_occ]
set edt_instance [get_instances -of_icl_instances \
[get_icl_instances -filter tessent_instrument_type==mentor::edt]]
add_scan_mode edt -include_chain_families {occ_chain not_occ} \
-edt_instance $edt_instance
例子:定义scan chain首chain尾
add_scan_mode edt \
-si_connections edt_inst/to_si[199:0]\
-so_connections edt_inst/from_so[199:0]
add_scan_mode multi_bypass -chain_count 12
使用analy_scan_chains命令识别scan chain
使用命令insert_test_logic完成insertion的工作
可以通过该命令指定chain的数量:insert_test_logic -scan on -number 6
插入测试逻辑
report相关信息
report_scan_cell 显示scan cell信息
report_scan_chain 显示当前的scan chain信息
report_scan_elements 显示sequential instances information and testability data
保存结果
writte_design -output_file abc_scan.v
write_aptg_setup abc
Scan考虑因素
时钟域
工具默认行为:不同时钟域,同一时钟域的不同触发沿,被划分到不同scan chain
相同时钟域的不同触发沿的寄存器可以串在同一条chain上,下降沿在前,上升沿在后
不同时钟域的寄存器可以放在同一条chain上
add_scan_mode/create_scan_chain_family/set_scan_insertion_options等命令有相关option设置。
跨时钟域:插入lock_up latch
扫描链长度均衡性的考量
测试向量从测试基台移入到测试芯片时,以芯片最长的扫描链长度为准
为了减少测试时间,在插入扫描链时,尽量保证扫描链长度的均衡性
于物理信息的扫描链连接
如果不考虑scan cell的物理位置,扫描链的连接可能杂乱无章,容易引起后端的绕线和时序问题
在scan chain的同时,通过后端传递回来的DEF文件,标定所有寄存器的物理位置,工具则可以就近串链,对后端时序比较友好。
扫描链长度的考量
扫描链长度和扫描链条数的对应:所有scan单元bit数/扫描链的条数
从减少测试时间的角度出发,希望增加扫描链的条数以减少扫描链的长度
从IO资源角度,希望chain的数量越少越好。