Tessent scan&ATPG(6)测试向量配置 ,at-speed pattern的生成以及OCC的插入

Test pattern management 测试向量管理

生成最佳的pattern

#使用
create_patterns
#时会默认将所有的fault 类型加入到consider中;执行大量的设计分析和DRC;
#创建所有必要的pattern 类型
#监控pattern的生成(包括实时的coverage pattern count 以及执行时间等) 如果必要会修改参数
#如果必要 自动运行top_up的方式

##使用
report_patterns
#报告当前生成pattern的信息; 你可以展示所有pattern的信息 或者使用
-pattern_index
#选择单个的pattern去报告
#如果你使用
set_pattern_filtering
#创建了一个临时的subset
#那么此时report的pattern只是集合中的pattern;

##使用
report_scan_cells
#去查看设计中scan_cell的信息

在这里插入图片描述

report_scan_cell中的memory_type分类

memory_type 是指memory element的分类包括: MASTER;SHADOW;COPY:LOCKUP;如图所示:
在这里插入图片描述

MASTER: 是指scan chain上的 用户hold shift过来的value的memory element;
SHADOW: (直接接在MASTER cell 后边 中间没有逻辑 COPY cell也一样)是指那些跟随 MASTER cell变化而变化的memory element;并且 SHADOW的输出并不是scan path 的一部分;
COPY: 和SHADOW一样是继承上一级MASTER的值(copy上一级的值)但是其输出为scan path的一部分;
LOCKUP:是指那些为了预防"shoot through(击穿??)"保持半个周期值memory element;一般是latch; 其输出也是scan path 的part(比如两个clock domain,中间有latency的问题 影响hold time 可能会插这种cell)

database的pattern进行reuse 和debugging

工具可以将pattern数据保存为不同的格式 主要分三大类: database; verilog; WGL STil ; 其中 database的又分为 Asicii,binary ,PATDB;三种都是可以会读到工具中去做reuse 和debugging; verilog格式的pattern 是去做 Time-based verification的;Wgl 和STil是左后要放在ATE上做测试和分析的;
当然你可以指定将文件直接压缩为.gz或者.z;

pattern文件可以回读(read_back)到Tessent工具中, 方便我们去生成Top-off 的pattern;去debugging仿真的mismatching;去做其他格式的转换;去做tessent的诊断等;
我们也经常将flat model一同保存下来;

write_flat_model <filename>
#利于配合前面的pattern 做回读;

Ascii 是默认的pattern格式,有着完整的可读性和可运行指令性;包含测试的coverage的统计,test procedures 包括timeplate;每个pattern shift的pattern data(激励); 每个pattern的预期结果;以及scan memory elements;
Binary 和ASCII 包含的信息一样 但是以一种压缩的格式 对于非常大的设计采用;
PATDB, 建议用在 core-level的pattern上用于 hierarchical ATPG的时候 将pattern 重定向到top-level;

#使用
read_patterns <pattern_filename>
#来回读pattern
#如果要做 top-off 的pattern
#需要使用
simulate_patterns -store_patterns all
#将数据库中的pattern转化成工具的internal format

基于时序的验证:testbench 的创建;

pattern 其实还分 chain test pattern和scan test pattern??
scan chain还要分两半 就离谱??
pattern 也分 parallel 和 serial ;

Time-based verification ;

AT-speed patterns & On-Chip clock controllers(OCC)

了解 如何生成at_speed 的pattern;二就是在ATPG阶段使用内部OCC的选项去定义内部时钟的控制;

review

at-speed fault主要包括: Transition 和 path delay 两种;
Transition的fault location在 每个instance 的pin /port上;而path delay 考虑的是整条path的 slow-to-rise/fall的累积;

transition fault的观测

默认 工具会为每一个可能的观测点 设置一个期望值;作为fanout tree一部分的所有scan cell都会被附上期望值 capture的时候用;path的选择是随机的,但是如果存在不可预测的长的路径 可能就会在造成pattern验证时的mismatch 或者在ATE上的失败;
可以通过设计false path的方式 去限制工具可用的观测点;
在这里插入图片描述

#指定false path的方式有两种:
#1. 在SDC中添加约束
set_false_paths -from -to -through
#2. 直接在ATPG工具中
add_false_path
# 例如要将 途中的P2定义为false path ,可以将U6 mask掉然后U5声明一个期望值;

multicycle path

信号的传播延迟多于一个时钟周期的path;时钟周期可以被定义为 launch clock 以及capture clock; multicycle path的定义一般在 SDC中;
对于 multicycle path 上fault的detect ,是基于SDC中定义的时钟周期数的;(在PT输出SDC文件时 需要加上 transform_exception before write_sdc)

path delay fault

path delay的fault是针对 静态时序分析出来的 critical path 来说的, 是A到B上element 的transition 的累积,会有指定的launch 和 observation点;

会有path definition files(为ASCII文件); 将path load 进去; 然后工具会看path 是否可以走通;

set_fault_type path_delay -mask_noobservation_points
read_fault_sites paths_file.txt

at_speed pattern的生成

at_speed 的pattern需要去产生一个transition (1->0/0->1 的transition) 使用的方法:
broadside/launch-off-capture method或者 launch-off-shift method
默认优先产生boardside pattern; 当没有解决方案时,才会长生launch-off-shift的pattern;(当然用户可以指定工具产生何种类型的pattern)
两种方法都需要CCD(clock control definition)去配置 at-speed pattern的 launch 和capture;

Broadside

clock sequential pattern

  1. 在最后一次shift之后,当clock pulse来临,transition随即发生;第一个时钟沿 launch the transition;第二个时钟沿 capture;
    在这里插入图片描述

  2. 在capture 阶段(clock sequential cycle)是由两个快速的时钟沿在的,如图是检测点是否有slow to fall的fault ; 如果存在fault, 快速时钟沿检测的是原来的1 而不是更新后的0;
    在这里插入图片描述

  3. 可选择性的加入 Dead cycle 等待足够长的时间 scan_en 拉低
    broadside 的好处就是:

  4. scan enable并不在时序路径里面

  5. 支持多级的non-scan luoji

  6. memories pin上的时序的fault也是可以被测试的;

  7. 支持 false path和multicycle path的标记
    缺点就是: 在pattern生成的时候会比较复杂;

launch-off-shift

顾名思义,就是将transition的launch 作为最后一次shift;在capture 阶段直接capture transition;
在这里插入图片描述

所以broadside 和launch-off-shift 的区别就在于,broadside pattern transition的产生在capture阶段 也就是transition是上级电路运算来的,而launch-off-side pattern中transition是直接shift进去的;

在这里插入图片描述缺点就是: scan_en 无法快速切换到0 时序要求太高(要对scan enable 的布线和时序上的平衡 使它的transition time 能够满足条件)
优点就是 生成pattern会更容易一些,能够跨 false path 进行测试;

创建单个 test_pattern 文件

这里的单个应该是一类 fault’的pattern吧??
在生成单个fault 类型的pattern时(transition.pathdelay,stuckat),pattern之间可能会重合,所以需要做pattern的合并;
在这里插入图片描述

通过fault grade 的方式,先将上次的pattern读入, 做fault grade 看里面是否已有覆盖到的pattern 然后再TOP-up 相对应的pattern;
一般会先测stuck@的fault 再测transition;(先将覆盖率高的 stuck@ pattern生成出来 下面at_speed fault 被覆盖的数量也会增加)

at-speed test:生成快速时钟

at_speed 测试需要工具在慢时钟(shift阶段)和快时钟(capture阶段)进行切换(对于broadside 的方式);默认 片上的PLL 会被用来生成快时钟;但是用MUX 做门控不足以提供对两个时钟的充足的控制,MUX只能在scan clock 和 fast clock之间做switch 但是不能控制 fast clock生成的脉冲数;
为了控制fast clock 我们加入了OCC (on-chip clock control)模块,他的作用如下:

  1. 为每个clock domain提供独立的控制
  2. 根据pattern的情况 为 capture cycle分发正确数量的脉冲
  3. 更加干净的在shift clock和fast clock之间进行切换;
  4. 根据测试的类型,判断capture阶段是使用slow clock还是 fast clock;
    在这里插入图片描述

OCC 功能结构

在这里插入图片描述

重点看 clock chopping control; 里面应该是有 scan-programmable shift register 通过控制clock gate 控制pulse的数量;这里的 scan-programmable shift register 就是scan chain结构,以sub-chain的方式串到scan-chain上 通过shift 出来的布尔变量控制clock chain;

在ATPG中定义OCC

方式1:(建议的)
CCD(clock control definition)
用户定义ATPG能怎样控制时钟;(具体ATPG如何控制 产生多少个pulse 是由ATPG工具在推pattern的时候决定的)
并不会定义特定的时序;所以并不能配置复杂的clock schemes;
对每一个内部时钟做单独的definition;工具会自动决定在capture cycle 使用哪个clock,去detect更多的faults;
DRC的时候会验证 test procedure文件中时钟第一的语法;
方式2:(历史上曾用)
NCP(named capture procedure)
用户指定外部信号和内部生成时钟的关系, 好处是用户可以控制capture cycle全部的失踪时序;
前提是你得先写好procedure;

CCD

两种定义:

per-cycle clock control (最常用的)

允许你使用scan cell的值基于单个的capture cycle 去定义内部时钟的输出;
使用 基于流水线的时钟生成,每个cycle 使用一bit(scan cell里的值 sub-chain里面的值)去控制时钟;
在这里插入图片描述

sequence clock control

使用 scan_cell里的值 基于capture cycle的时序去定义内部时钟; 使用基于计数器的时钟生成电路;不能被用来生成 launch-off-shift’的pattern;

(两个比较着来看 就可以可以很容易的理解 pre-cycle使用sub-chain 直接去存储pulse; 而sequence clock control 使用sub-chain去控制pulse的出现时间)
在这里插入图片描述

Example: pre-cycle clock control

ATPG_cycle

需要在 procedure文件中定义 ATPG_cycle 定义内部时钟在特定的capture cycle 如何做pulse;

CLOCK_CONTROL /clk_ctrl/int_clk1 =
    SOURCE_CLOCK ref_clk;
    ATPG_CYCLE 0 = 
        CONDITION /clk_ctrl/F0/q 1;
    END; #分别定义的是 sub-chain中的每个scan cell的值;
    ATPG_CYCLE 1 = 
        CONDITION /clk_ctrl/F1/q 1;
    END;
    ATPG_CYCLE 2 = 
        CONDITION /clk_ctrl/F2/q 1;
    END;
    ATPG_CYCLE 3 = 
        CONDITION /clk_ctrl/F3/q 1;
    END;

Example: Sequence clock control

ATPG_sequence

与pre-cycle 的clock control 不同, 这里需要定义的是atpg_sequence;

#实现和上例相同的4个脉冲
CLOCK_CONTROL /clk_ctrl/int_clk1 =
    SOURCE_CLOCK ref_clk;
    ATPG_SEQUENCE 0 0 = #两个value 指定开始的cycle 和结束的cycle; 如果不指定的会在每个capture cycle 都会pulse clock;
        CONDITION /clk_ctrl/F0/q 1;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
    END;
    ATPG_SEQUENCE 0 1 =
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 1;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
    END;
    ATPG_SEQUENCE 0 2 =
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 1;
        CONDITION /clk_ctrl/F0/q 0;
    END;
    ATPG_SEQUENCE 0 3 =
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 0;
        CONDITION /clk_ctrl/F0/q 1;
    END;
#不完整的表述会告诉工具 未指定的状态将会关闭CLOCK;

在ATPG中使用CCD

整个flow可以分以下几步:
1. 将 clock control的definition 写入你的test procedure文件中
2. 启动Tessent shell pattern产生的设置
3. 退出 setup mode 然后运行DRC

check_design_rules
  1. 改正DRC上的违例;
  2. 验证 clock control的配置
report_clock_controls

6.开始生成pattern
7. 保存生成的pattern

write_procedure_testbench

创建一个 verilog的testbench 去验证你的 procedure文件中定义的internal signal与你预期的是否一致;

write_procedure_testbench <test_bench_filename> [-replace] \
    [-all | -capture capture_name | -load_unload]

这个步骤 写完procedure 之后就可以执行,

NCP (Named Capture Procedure)

同样是描述OCC的一种方式; 与CCD 平行的概念
除了用于ATPG的OCC之外 还可以用于其他的on-chip 或者internal 的clock;
他与上面的描述方式有所不同:
使用复杂的时钟的schemes定义详细的时钟周期;需要详细的描述每个周期发生的events;
允许用户指定确切的launch capture的时序 包括multiple load patterns中的load points;所以塔索覆盖的pattern类型会更全 包括stuck@ ;path delay ;broadside transitionpatterns; 不能用于 launch-off-shift pattern的生成

为什么叫NCP? 一般我们在Procedure定义的时候 后边直接跟一个capture就好了, 而NCP 有自己独一无二的capture name ;

example : NCP

如生成一个iclk1 0011 的capture cycle;
首先要定义 external signal 和internal signal 之间的关系

#定义 timeplate
timeplate tp_ext_cap = #外部
    force_pi 0;
    measure_po 10;
    pulse refclk 20 10;
    period 40;
end;
timeplate tp_int_cap = #内部
    force_pi 0;
    measure_po 10;
    pulse iclk1 20 10;
    pulse iclk2 20 10;
    period 40;
end; 

## 定义procedure
procedure capture clk_2pulse =
#配置 sub-chain的值
    condition /condition0/Q 1;
    condition /condition1/Q 1;
    condition /condition2/Q 0;
    condition /condition3/Q 0;
    mode external = #外部refclk 的event
    cycle =
        force_pi;
        force testclk 0;
        force refclk 0;
        force ScanEn 0;       
        pulse refclk ;
    end;
    cycle =
        pulse refclk;
    end;
    cycle =
        pulse refclk;
    end;
    cycle =
        measure_po;
        pulse refclk;
    end;
end;
#内部的clk1  clk2的event
    mode internal =
    timeplate tp_int_cap;
    cycle slow =
        force_pi;
        force testclk 0;
        force iclk1 0;
        force iclk2 0;
        force refclk 0;
        force ScanEn 0;       
    end;
    cycle =
        force iclk1 0;
    end;
    cycle =
        pulse iclk1;
    end
    cycle =
        measure_po;
        pulse iclk1;
    end
    

NCP 的一些规则

  1. internal mode和external mode 所用的cycle 的数量 以及他们的timeplate大多数情况下都是不同的 但是他的总的时钟周期需要一致;
  2. 对于那些non-clock的event 他们,嗯发生的顺序在总的周期中应该是相同的;
  3. measure PO只能出现在最后一个cycle;
  4. Force PI 也必须出现在第一个cycle 而且要在 pulse 第一个clock之前发生;
  5. 在external mode下 是不能控制任何internal的signal 的;但是internal mode可以

使用ATPG引擎其定义NCP

使用ATPG 帮助我们写NCP 可以先使用CCD的方式;

  1. 创建一个所有时钟的时序图 方便你理解时钟之间的关系
  2. 设置ATPG工具 为transition pattern的生成
  3. 设置时钟约束,
    set_clock_restrictions
    
  4. 生成pattern
  5. 使用create_capture_procedure 创建 NCPs的timeplate(工具自己写的NCP timeplate)
  6. 使用 write_procfile 保存procedure 文件

pattern verification

会将 OCC 的结构先排除出去,
在这里插入图片描述

  • 10
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺脆兵兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值