Tessent scan ATPG(2) ATPG basic flow
ATPG 的基本步骤
DFT lib
一般vendor会提供
也可使用 tessent 的libcomp工具 将simulation lib转化为 DFT lib
什么是 simulation lib ? 是仿真专用的库吗? 那仿真和综合 布局布线为什么要分开来?
black boxes
存在一些block 不需要做scan chain的 就可以定义为black box;
#example
add_black_boxed -module core
#改变black box 的输出行为
add_black_boxes -instances /instA -pin Aout Z
#恢复原始的模型
delete_black_boxes -module core
#or
delete_black_boxes -ALL
# report
report_black_boxes -ALL
ATPG setup
在此之前 你需要准备好 已经插入扫描链的门级网表. 以及DFT library.
同样存在两个 flow ,区别在于其输入的文件不同
- legacy flow
需要 test procedure 文件以及 setup文件即dofile(包含扫描链插入工具导出的setup信息,插入到设计中的test structure信息以及时钟和控制信号的定义). - TSDB flow
其输入为tessent 工具专用的数据库结构
procedure 文件
主要是 测试的具体流程 每个动作发生的周期等信息;主要分下面几个部分:
timeplates:
定义test cycle的时序,就是下面每一个具体操作的周期.
test_setup: 一个初始化,就是将设计切换到test mode
load_unload/shift : 定义如何在一个scan group中load unload 我们的扫描链.
capture : 一般会有专门的定义.不是必须的,默认不在procedure文件中表达
从下图也可看出 整个test procedure所要描述的东西:
example
#example 对应上图的时序
timeplate tp1 =force_pi 0;measure_po 10; #measure po 是在10ns 也就是 这是pre_clock 的measurepulse Clk 20 10; #20-30ns 是clock处于on状态的时间 也就是时钟的高电平的持续时间是10ns.period 50;#时钟周期是50nsend#定义procedure 每个步骤都会执行 force pulse 的操作. 都会调用 template 的单周期的配置.
procedure test_setup = #可见此单个procedure中 有两个 cycle 每个cycle 在无其他force 的情况下 应该与 timeplate 中的配置一致.
timeplate tp1 ;
cycle =force Clk 0 ; #force clk为0 force ScanEn 0;pulse Clk ; # 没有参数 怎么pulse 按timeplate的?
end;
cycle =pulse Clk;
endprocedure load_unload =scan_group grp1 ;timeplate tp1 ;cycle = force Clk 0;force ScanEn 1;end ;apply shift 2;#调用shift 的procedure 两次
end ;procedure shift =scan_group grp1 ;timeplate tp1 ;cycle =force_sci;measure_sco;pulse Clk ;end
end;procedure capture =
scan_group grp1;
timeplate tp1;cycle =force ScanEn 0;force_pi;measure_po;pulse_capture_clk;end;
end;
下面再单独详细的介绍每一个部分;
1. timeplate
timeplate 定义的是一个周期内的信号变化,以及测试的操作.是和ATE (自动测试设备)的cycle强相关的; 所以timeplate内的操作并不是随便设置的 需要和测试工程师沟通. timeplate定义的数量 也和ATE机台的限制,也要结合设计的需求去设计.
两个经常用到的statement:
- pulse 后面有两个参数 一是脉冲发生时间,一是脉冲持续时间.像上例中没有 时间标注的 怎么理解.
- force 强制赋值non-return 的输入. 后边也有参数 为强制赋值的周期坐标.
2. force_sci & measure_soc
在 shift 的操作中 使用force_sci 和 measure_sco
指定数据输入和测试输出的时间点. 默认force_pi和force_sci measure_po和measure_sco 在cycle内发生的时间点是一样的,只是一个在shift 阶段一个在capture 阶段.
如图所示, 0ns force_sci
10ns measure_sco
20ns pulse shiftclk
(老师只是嘴上说,没有参数 如何判断timing point)
Dofile
example
#里面只要是 scan chain 的相关信息
proc tessent_scan_common {} {
add_clcoks 0 clk
}
proc tessent_scan_unwrapped_mode{}{
add_scan_groups grp1 results/pipe_scan.testproc
#定义scanchain 的分组 以及其使用的tesproc文件
add_scan_chains chain grp1 {/ts_si[1]}{/ts_so[1]}
#添加 设计中已经存在的scan chain 到我们定义的scan group 中 并说明 scan chain 的输入输出.
tessent_scan_common
}
proc tessent_scan_setup {{mode unwrapped}}{
switch -exact -$mode{unwrapped {tessent_scan_unwrapped_mode}default{display_message -error "invalid scan mode: $mode"}}
}
tcl中的proc 过程, 类似C 中的函数, proc add{x y}{expr x+x+x+y} 第一个中括号是参数列表 第二个中括号是具体的执行内容.
Dofile 中对scan chain 的定义
也就是说 工具在 ATPG 的DRC 阶段 会借助Dofile 和test procedure文件中的定义 对scan chain 进行trace;
默认情况下 是从scan chain的输出 往前trace,为scan cell 进行排序也是从后往前.
Dofile 中的 clock 和control信号的定义
两种定义的方法
使用analyze_control_signals 去自动识别(识别每一个时序单元(DFF,latch,RAM,ROM,等)上所有控制信号(包括 clock,set,reset,read_control,write_control等)),他trace 的全都是普通的组合逻辑门,也就是说不一定完全符合你的额要求.
使用 add_clock是 去手动添加.
add_clocks 中clock 的off状态 决定了cycle中的leading edge.
add_clock 0 /CLkA
#参数1 为clock 的off state, 参数2,Clk4 为时钟引脚;
时钟从off state 到on state 的转变 叫leading edge;
DC scan insertion flow
如果使用DC 去插扫描链, 如何走ATPG的flow
使用 stil2mgc 指令将SNPS STIL文件转化为 Dofile 和 procedure文件,再走下面的flow.
stil2mgc -stil cpucore.stp -tpf cpucore.tpf -dofile cpucore.do
ATPG process
setup -> design_rule check -> configure ATPG -> Generate Patterns -> save Results
1. setup
set_context patterns -scan #设置Tessent shell context
read_verilog #读入 scan inserted 的网表
read_cell_library ../libs/adk.atpg #读入ATPG的库
set_current_design #指定设计的顶层
add_black_boxes -auto #根据需要添加 blackbox
analyze_control_signals -auto_fix # 定义时钟 和控制信号
add_input_constraints control -C0 #设置测试的输入约束
# add_input_cons的优先级是没有 testprocedure中的高的,
# C-type的constraints
# C0 CT0 有什么区别??;
dofile atpg_setup.dofile #定义scan chain 读入test_procedure文件
2. DRC
主要是 逻辑DRC的检查 验证setup 以及设计是否为ATPG 做好准备;
check_design_rules
#当DRC的检查通过之后 Tessen 会将mode从setup 转为analyze
常见的DRCs 有
- RAM rules A rules
- CLock rules C rules
- Data rules D rules 数据的稳定性
- extra rules E rules 设计中 潜在的风险
- EDT finder rules
- Flattening rules (包含 Fn FP FG rules 包括线网 引脚和门上的DR)
- General rules (扫描链和设计中其他定义的矛盾);
- Procedure Rules P rules
- scanability rules S rules
10.sacn chain trace rules
etc.
报告会以 设计规则分类的方式 报出来 如:C1-1 C1 是DRC的类型 - 1是 第几次出现;
3. configuring ATPG
一般会在配置的时候 配置为指定的block 或者instance 添加或者减少 fault的种类
或者设置一个指定的fault 模型;
4. Generate Pattern 生成pattern
create_patterns
# 这条命令会干啥?
#首先 本职工作是生成pattern
# 其次 它会帮助你 分析当前的设计 通过打开一些选项 帮助你修复一些DRC的问题
# 在没有 add_fualts 的指定下 工具默认是吧所有的fault 分析进去 生成pattern
#会将 运行时间 当前生成的pattern的数量 (没记错的话 是64个64个的Generate) 以及当前的覆盖率等信息 打印在控制台上.
5. save results
flattened model 对应的是Hierarchical model 扁平化的模型还是层次化的模型
对于pattern 而言 最好将其ASICII binary以及PATDB的格式的数据库都存下来,方便复现.
verilog的test bench 用于基于时序的仿真和验证
WGL STIL 是用于机台测试的文件;
write_pattern <filename> <format_switch> -replace
# 用于之后使用tessent diagnosis去做诊断,将扁平模型保存下来
write_flat_model <file_name> -replace
Faults Coverage & Transcripts
Faults
刚才说了 ATPG工具会将所有的fault model读进去 去生成pattern , 那这些Fault model又是怎么来的呢?
在test pattern 的generation之前 工具会对设计进行学习,将fault的location (这里的location一般是指对于门级模型来说的是在其内部还是外部,内部就上升到版图中的潜在fault),设计中总的faults 的数量,以及特殊的fault的种类;
当然你也可以选择性的手动去添加fault location ,将fault location 添加到fault list 中或者从fault list中排除某些fault location.
从而组成我们的fault universe
fault location
默认 fault 会定位在 库模型的输入输出端口.他和verilog的门的端口是匹配的,
也就是说 设计中faults 的数量取决于设计中 standard cells的数量.
如果把 set_internal_fault on 打开的话 会将标准单元在拆成基本的门,对于基本门的输入,输出也会设置fault site.
使用add faults 指定fault universe
add_faults -all # 自动将所有的faults 加进去
/core/cpu/ix342/Y -pin # 以某个pin为条件 添加单个的fault site for both state1 and 0
/core/cpu/alu32* -instanc # 以实例的名字为条件 为所有与名字匹配的instance添加fault site
/bus_ctr/tsd/*/EN -pin -Stuck 0 # 筛选符合条件的pin 添加 stuck at 0 的fault site
-clock_domain /clk_ctr/clock001 #为匹配的clock domain 添加fault site点;add_nofault #的用法与add_fault是类似
fault sampling 抽样
如果只是try run的话 可以先用sampling 跑一下.
set_fault_sampling 10 # 10%的fault 去出pattern; 是随机去挑选的;
add_faults -all
Tessent scan ATPG(2) ATPG basic flow相关推荐
- ATPG Practice ATPG Practice II
文章目录 General ATPG Flow ATPG DRC example clock to data ATPG setting delay test的两种方法 single capture do ...
- Tessent scan ATPG(7) 设计规则检查 (DRC)
写在前面, DFT compiler 和Tessent 都有自己独立的DRC的检查, 可能在命名上有所重复,注意区别. Flat model的创建(不是fault model哦) 这里的flat的意思 ...
- Tessent scan ATPG(8) Debug low test coverage(低测试覆盖率的原因及debug方法)
如何利用工具提高测试覆盖率 low coverage 的原因 每个fault点的可控性和可测性; 部分设计规则违例会影响测试覆盖率 好的电路和错误的电路之间必须可以观测到不同; 那些没有被detect ...
- Mentor-dft 学习笔记 day27-Timing-Aware ATPG vs. Transition ATPG
Timing-Aware ATPG vs. Transition ATPG 以下是starc03的testcase来评估timing-aware ATPG,为了对比transition fault A ...
- Tessent专栏第4篇:TessentMemoryBIST用户手册第二章上
这篇主要是翻译<Tessent MemoryBIST User's Manual For Use with Tessent Shell>的第二章前五节的内容,在这里作为一个学习的记录,仅供 ...
- Azkaban配置Work Flow案例实操
Work Flow案例实操 目录 Work Flow案例实操 1. Yarm语法简介 2. HelloWorld案例 3. JavaProcess案例 4. 作业依赖案例 5. 自动失败重试案例 6. ...
- 【Basic Use Case】
Demo Code: https://github.com/googlesamples/android-Camera2Basic https://github.com/googlesamples/an ...
- RxJava VS kotlin flow
1.基础概念介绍 1.1 观察者模式 观察者模式,其实对于Android开发者而言,并不陌生,button的setOnClickListener,就是一个典型的观察者模式.控件button是被观察者, ...
- Tessent专栏第二篇:Tessent Shell ETChecker介绍(1)
目录 前言 1. Tessent Shell ETChecker与传统ETChecker的对比 1.1 工具比较 1.1.1 TS-ETChecker支持的功能 1.1.2 TS-ETChecker和 ...
最新文章
- python安装后怎么配置环境变量_Python安装与环境变量的配置
- 31 多线程同步之Lock(互斥锁)
- ubuntu 配置 jdk 环境
- how to deal with Demodex
- 查看家庭组组计算机用户名密码是什么,windows10系统如何查看家庭组密码
- 【TCP传输数据-键盘录入】
- ubunt16.04 安装3090显卡驱动 cuda cudnn pytorch
- 4.9 利用对应的泛型替换Hashtable[转]
- 2021开发者最想学的编程语言,Go荣登榜首!
- 和华为云一起做件“伟大的事”,24万奖金等你来!
- 上游供应链厂商确认高通已获准向华为出售4G芯片
- springcloud工作笔记095---springcloud项目后端验证_hibernate validator后端校验字段_自己实现_快速开发
- php 如何打乱数组顺序,【PHP打乱数组顺序的方法有哪些,这样的程序你真的会写吗】- 环球网校...
- php中的class的用法,PHP get_class_vars() 函数用法及示例
- 设计了一个JavaScript的源代码混淆器
- 1053 Path of Equal Weight (30 分)一般树的遍历 DFS+vector容器+sort排序
- 北大清华人大中关村周围二手书店淘书全攻略
- 【ubuntu工具】ubuntu下文件对比软件meld
- Cisco路由器保存设置重置密码
- 操作系统清华 向勇 陈渝(RISC-V)(2)---操作系统与系统结构和程序设计语言
热门文章
- mysql where 与having_正确理解MySQL中的where和having的区别
- CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式
- 计算机名影响网络,影响电脑网速的原因有哪些
- Linux性能优化—内存实战篇
- 数据结构之——《单链表》
- 怎么为图片添加流烟烟雾?可以使用25种流烟烟雾效果PS笔刷
- 计算机检测维修与数据恢复国赛培训线上直播课火热进行中
- UnityShader - 屏幕特效 - 高斯模糊(Gaussian Blur)
- python简单网格五子棋_python制作简单五子棋游戏
- c语言中printf%12d,C语言系列之printf和%12d的用法(三)