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 ,区别在于其输入的文件不同

  1. legacy flow
    需要 test procedure 文件以及 setup文件即dofile(包含扫描链插入工具导出的setup信息,插入到设计中的test structure信息以及时钟和控制信号的定义).
  2. 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:

  1. pulse 后面有两个参数 一是脉冲发生时间,一是脉冲持续时间.像上例中没有 时间标注的 怎么理解.
  2. 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信号的定义

两种定义的方法

  1. 使用analyze_control_signals 去自动识别(识别每一个时序单元(DFF,latch,RAM,ROM,等)上所有控制信号(包括 clock,set,reset,read_control,write_control等)),他trace 的全都是普通的组合逻辑门,也就是说不一定完全符合你的额要求.

  2. 使用 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 有

  1. RAM rules A rules
  2. CLock rules C rules
  3. Data rules D rules 数据的稳定性
  4. extra rules E rules 设计中 潜在的风险
  5. EDT finder rules
  6. Flattening rules (包含 Fn FP FG rules 包括线网 引脚和门上的DR)
  7. General rules (扫描链和设计中其他定义的矛盾);
  8. Procedure Rules P rules
  9. 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相关推荐

  1. ATPG Practice ATPG Practice II

    文章目录 General ATPG Flow ATPG DRC example clock to data ATPG setting delay test的两种方法 single capture do ...

  2. Tessent scan ATPG(7) 设计规则检查 (DRC)

    写在前面, DFT compiler 和Tessent 都有自己独立的DRC的检查, 可能在命名上有所重复,注意区别. Flat model的创建(不是fault model哦) 这里的flat的意思 ...

  3. Tessent scan ATPG(8) Debug low test coverage(低测试覆盖率的原因及debug方法)

    如何利用工具提高测试覆盖率 low coverage 的原因 每个fault点的可控性和可测性; 部分设计规则违例会影响测试覆盖率 好的电路和错误的电路之间必须可以观测到不同; 那些没有被detect ...

  4. Mentor-dft 学习笔记 day27-Timing-Aware ATPG vs. Transition ATPG

    Timing-Aware ATPG vs. Transition ATPG 以下是starc03的testcase来评估timing-aware ATPG,为了对比transition fault A ...

  5. Tessent专栏第4篇:TessentMemoryBIST用户手册第二章上

    这篇主要是翻译<Tessent MemoryBIST User's Manual For Use with Tessent Shell>的第二章前五节的内容,在这里作为一个学习的记录,仅供 ...

  6. Azkaban配置Work Flow案例实操

    Work Flow案例实操 目录 Work Flow案例实操 1. Yarm语法简介 2. HelloWorld案例 3. JavaProcess案例 4. 作业依赖案例 5. 自动失败重试案例 6. ...

  7. 【Basic Use Case】

    Demo Code: https://github.com/googlesamples/android-Camera2Basic https://github.com/googlesamples/an ...

  8. RxJava VS kotlin flow

    1.基础概念介绍 1.1 观察者模式 观察者模式,其实对于Android开发者而言,并不陌生,button的setOnClickListener,就是一个典型的观察者模式.控件button是被观察者, ...

  9. Tessent专栏第二篇:Tessent Shell ETChecker介绍(1)

    目录 前言 1. Tessent Shell ETChecker与传统ETChecker的对比 1.1 工具比较 1.1.1 TS-ETChecker支持的功能 1.1.2 TS-ETChecker和 ...

最新文章

  1. python安装后怎么配置环境变量_Python安装与环境变量的配置
  2. 31 多线程同步之Lock(互斥锁)
  3. ubuntu 配置 jdk 环境
  4. how to deal with Demodex
  5. 查看家庭组组计算机用户名密码是什么,windows10系统如何查看家庭组密码
  6. 【TCP传输数据-键盘录入】
  7. ubunt16.04 安装3090显卡驱动 cuda cudnn pytorch
  8. 4.9 利用对应的泛型替换Hashtable[转]
  9. 2021开发者最想学的编程语言,Go荣登榜首!
  10. 和华为云一起做件“伟大的事”,24万奖金等你来!
  11. 上游供应链厂商确认高通已获准向华为出售4G芯片
  12. springcloud工作笔记095---springcloud项目后端验证_hibernate validator后端校验字段_自己实现_快速开发
  13. php 如何打乱数组顺序,【PHP打乱数组顺序的方法有哪些,这样的程序你真的会写吗】- 环球网校...
  14. php中的class的用法,PHP get_class_vars() 函数用法及示例
  15. 设计了一个JavaScript的源代码混淆器
  16. 1053 Path of Equal Weight (30 分)一般树的遍历 DFS+vector容器+sort排序
  17. 北大清华人大中关村周围二手书店淘书全攻略
  18. 【ubuntu工具】ubuntu下文件对比软件meld
  19. Cisco路由器保存设置重置密码
  20. 操作系统清华 向勇 陈渝(RISC-V)(2)---操作系统与系统结构和程序设计语言

热门文章

  1. mysql where 与having_正确理解MySQL中的where和having的区别
  2. CSS媒体查询@media (prefers-color-scheme:dark)判断系统白天黑夜模式
  3. 计算机名影响网络,影响电脑网速的原因有哪些
  4. Linux性能优化—内存实战篇
  5. 数据结构之——《单链表》
  6. 怎么为图片添加流烟烟雾?可以使用25种流烟烟雾效果PS笔刷
  7. 计算机检测维修与数据恢复国赛培训线上直播课火热进行中
  8. UnityShader - 屏幕特效 - 高斯模糊(Gaussian Blur)
  9. python简单网格五子棋_python制作简单五子棋游戏
  10. c语言中printf%12d,C语言系列之printf和%12d的用法(三)