Tessent Shell Flow for Flat Designs
- Overview of the RTL and Scan DFT Insertion Flow
- First DFT Insertion Pass: Performing MemoryBIST and Boundary Scan
- Second DFT Insertion Pass: EDT, Hybrid TK/LBIST, and OCC
- Performing Synthesis
- Performing Scan Chain Insertion (Flat Design)
- Performing ATPG Pattern Generation
- Simulating LBIST Faults
- Considerations for Using Gate-Level Verilog Netlists
Tessent Shell 的 workflow 可以分为两大类:pre-layout 和 post-layout。
pre-layout DFT 流程是使用 Tessent Shell 对 flat 或者 hierarchical 设计进行操作;post-layout flow 是对完成布局布线的网表进行操作。
在 flat design 的 RTL 和 Scan DFT 插入流程中,可以对整个 chip-level 的设计进行 DFT 插入。
flat DFT 实现的过程和设计的物理实现过程一致,主要流程包括如下步骤:

(工具手册中带有示例,后面有时间看一下。)
Overview of the RTL and Scan DFT Insertion Flow
无论是 flat design 还是 hierarchical design ,RTL 和 Scan DFT 插入流程都需要两个过程(two-pass insertion process)来完成 DFT 硬件的插入,如下图所示。
在这里,EDT 仅指 embedded deterministic test IP,LBIST 指的是 TK/LBIST IP,它也会包含 EDT。(EDT是 LBIST 的子集,可以只有 EDT 没有 LBIST,但是 LBIST 不能没有 EDT 。)

在第一步中, Tessent 插入 IJTAG 网络和使用 ICL(Instrument Connectivity Language)描述的 IJTAG instruments 。【MBIST Controller 也属于是 IJATG Instrument】
在第二步中, 工具检查 MemoryBIST 逻辑和剩余的功能逻辑,防止 DFT 信号和 IJTAG network 连接关系导致的覆盖率丢失和 pattern 数量增加。
scan insertion 可以和 synthesis 同时进行(就是在综合的时候,使用第三方工具进行扫描链插入),这不会对 DFT 的插入产生影响, 但是后面用 Tessent Shell 进行 ATPG pattern generation 的时候会麻烦一些。
下图所示为 DFT 插入前后的电路结构:



MemoryBIST (黄色)的时钟用的是 memory 的功能时钟;IJATG network(蓝色)使用 IJTAG 时钟(也就是 TCK 时钟)进行扫描测试。TAP network (红色)不进行 sacn test(non-scan during ATPG)。
First DFT Insertion Pass: Performing MemoryBIST and Boundary Scan
Memory BIST 和 Boundary Scan 在 EDT 和 OCC 之前插入,这样可以较为准确的估算的需要被测试的扫描时序单元( scannable sequential elements ,often referred to as “flops”)的数量。
Flops 的数量决定了第二步中 Tessent 生成的 EDT 控制器的大小。
Memory BIST 和 Boundary Scan 的插入过程具体可以参考对应的手册,
准备工作
- 如果使用的是 chip-level 的 design,为了插入 Boundary Scan,必须有带有实例化 IO pads 的 RTL design。
- 对于 RTL netlist,必须有 Teseent Cell Library 或者是 IO pads 对应的 pad library。
具体过程
-
加载 RTL 设计 数据

-
在第一步的插入过程中,
set_context -design_id选项一般设置为 “rtl1”。
-design_id会将特定 DFT 插入过程的所有的数据存储到 TSDB 中。对于第一个插入过程,rtl1 包含了 MBIST、Boundary Scan 和 IJRAG 的数据。(rtl1只是一个推荐名称,可以任意指定。) -
set_dft_specification_requirements命令的-memory_test设为 “auto” ,-boundary_scan选项设置为 “on”,告诉工具同时进行 MBIST 和 Boundary Scan 的生成。
-
设定 design-level;
-
配置测试引脚和特殊引脚;


(从命令上看,这些应该只是对设计中现有的引脚进行配置,没有增加新的引脚。)
-
使用
check_design_rules命令使工具从 setup mode 进入到 analysis mode,如果设计存在问题,工具会保持在 setup mode; -
创建 DFT 规范 ;(33-43)

为了使功能引脚能够被共享为 EDT channel 的引脚,在插入 boundary scan 的时候必须插入备用输入和输出,避免沿着功能路径级联多个选择器(multiplexers);(详细内容参考reference manual 的 AuxiliaryInputOutputPorts wrapper )
-
创建 DFT 硬件、提取 current design 的 ICL 、生成仿真仿真验证所需要的 patterns;

-
仿真验证

结果
对于 MemoryBIST,Tessent 插入 MemoryBIST 控制器、interface、BIST Access Port(BAP)、segment insertion bits(SIBs)。这些硬件结构会使用后续插入的 EDT 进行 scan test。
此外,Tessent 还会自动将预先存在的 scan testable instruments 和 scan resource instruments 分别连接到 IJTAG 网络的 Scan Tested Instrument(STI) 和 Scan Resource Instrument (SRI) 。
对于 Boudary Scan,可以将 Boudary Scan chain 分成(segment)更短的 chains,然后在逻辑测试中使用。为了对其进行 segment,可以在 BoundaryScan wrapper 中使用 max_segment_length_for_logictest 命令。或者在 creat_dft_specification之前使用如下命令:

Second DFT Insertion Pass: EDT, Hybrid TK/LBIST, and OCC
第二步的 DFT 插入过程会有一些不同于第一步的需求和注意事项,以及 DFT 信号的插入,其整体流程如下图所示:

Loading the Design
在为第二步的 DFT 插入加载设计文件的时候,必须确保:
- 指定一个新的 design ID;
- 使用和第一个插入过程相同的 TSDB 文件夹;
- design 来自第一个插入过程并对其进行 elaborate

Prerequisites
对于 chip-level 的设计, 源节点(source nodes)必须出现在 RTL 设计中,以便能够定义动态 DFT 信号。动态 DFT 信号指的是在特定的测试中需要变化的信号,如 scan enable、edt_clock、edt_update等,
Procedure
-
使用
set_context命令将 design ID 设为 “rtl2”。

手册使用了推荐的命名规则:第一个插入过程为 rtl1 ,第二个插入过程为 rtl2,扫描链插入过程为 gate。对一个特定的设计,design ID 存储了和 DFT 插入过程相关的所有数据。对于一个插入过程,“rtl1” 包含了 Memory BIST 和 Boundary Scan 的所有数据;在第二个插入过程开始的时候,将 design ID 设置为 “rtl2”,那么 “rtl2”就会保存 EDT、LBIST、OCC 等第二个插入过程中生成的数据。
rtl2 的数据时累积的,即除了新生成的数据之外(EDT等),它还包含必要的 rtl1 数据。rtl2 表示的是在在第一个插入过程的结果之上进行第二个插入过程。在后续的插入过程中,可以使用任意的 design ID 来加载设计及其相关文件。
-
使用
set_tsdb_output_directory命令指定 tsdb 输出位置和第一个过程的一样
如果在第二步的 DFT 插入过程中忘记设定, Tessent 会在当前工作文件夹下创建一个默认的 tsdb_outdir 文件夹。如果两个插入过程中使用了不同的文件夹,确保使用
open_tsdb命令打开第一个插入过程中中使用的 TSDB 。 -
使用
read_cell_library命令读取标准单元和 IO pads 模块的库文件。
(需要多个库文件就使用该命令读取多少个库文件)
-
使用
read_design命令加载设计文件

该设计是在第一个 DFT 插入过程中使用read_verilog命令时创建的。read_design命令也会加载 TCD、TCL、PDL 等相关文件(如果TSDB中存在)。为了在第二个插入过程中正确的加载设计,
read_design命令会参考第一个 DFT 插入过程中创建的设计源文件并其保存在dft_intertd_designs文件夹。 -
使用
set_current_design命令 elaborate 设计

如果有模块描述丢失,design elaboration 会检查出来。可以通过添加丢失的模块来修复 elaboration 错误,或者使用
add_black_boxes -module命令。
Specifying and Verifying the DFT Requirements
设计加载完成之后,为想插入的硬件定义 DFT 需求。需求定义包括添加 DFT 信号和 DRC 检查。

Procedures
-
使用
set_dft_specification_requirements命令执行 pre-DFT 的设计规则检查。

因为在第一步的插入过程中已经指定工作在 chip-level ,所有在第二步的插入过程中就不需要指定。 -
使用
add_dft_signals命令定义 DFT 信号

DFT 信号用于确定各种每种测试模式下的工作模式、控制值和信号行为。Tessent Shell 的 DFT 信号功能可以自动完成如下任务:
(1)添加 DFT 信号
(2)为各种工作模式配置 DFT 信号
(3)传递将 DFT 信号的信息基于特定的工作模型,Tessent 创建创建必要的 setup procedures,通过 IJTAG 网络来控制 DFT 信号。
-
使用
check_design_rules命令进行 pre-DFT 设计规则检查。当错误被检测到时候,Tessent Shell 会生成 DFT_C 违例。具体信息参考 reference manual 的 Pre-DFT Clock Rules (DFT_C Rules) 。
Results
DRC 通过之后,Tessent 从 setup mode 转换为 analysis mode。
Pre-DFT DRC 的作用:
(1)验证所有用于scan test 的 flops 都被定义了时钟;
(2)标记异步复位和置位,以便在 shift 过程中关闭它们。
此外, 如果使用了 add_dft_clock_enable命令,Tessent 还会检查时钟门控逻辑和模块类型的时钟(module-type clocks)。
Examples
(关于 DFT 信号的一个示例)
DFT 信号包括静态和动态两种类型,静态 DFT 信号包括全局 DFT 控制、逻辑测试控制和扫描模式信号。
DFT 信号通常被 IJATG 网络中的 Test Data Register 控制。
大部分动态 DFT 信号来自于原始的输入端口。对于 chip-level 的设计,这些原始输入端口必须已经存在于 RTL 设计中,并且预连接到 pad 缓冲单元。来自于原始输入端口的三种动态 DFT 信号分别为:test_clock、scan_en 和 edt_update。
为了和功能模式共享输入端口,确保在边界扫描插入中为其添加 auxiliary input logic 。 Tessent 不能创建 nodes 作为 ports。
下图所示内容为在第二步的插入过程中,插入EDT、LBIST、OCC 时需要的 DFT 信号。

(DFT signals 在实际电路中时怎么样的一个存在?就是新增一条信号线?)
其他一些和 DFT signals 相关的命令:


Creating the DFT Specification
在 setup mode 中定义好 DFT 信号的需求之后,就可以在 analysis mode 中创建 EDT、LBIST 和 OCC 的 DFT 规范。
DFT specification 定义了如何将硬件插入到设计中。

Prerequisites
对于 EDT、LBIST 和 OCC,必须首先生成一个 DFT specification 框架,它包含三个空的 SRI SIBs,用于指定 IJTAG 网络的 EDT、LBIST 和 OCC 部分。
EDT、LBIST 和 OCC 的 DFT specifications 的创建过程和第一个插入过程中 MemoryBIST、Boundary Scan 的有所不同。
Procedures
-
配置
crete_dft_specification命令

-
通过下述接口使用命令定制 DFT 规范
- 为了能够在命令行定制 DFT 规范,输入 EDT、LBIST 和 OCC 数据作为
read_config_data -from_string命令的参数; - 使用
add_config_element和set_config_value命令修改带有 introspected data 的 DFT 规范;(Tessent 会自动将修改内容保存到脚本文件目录中)
(DFTSpecification 就是一个文本文件,你可以按照 Spec 的语法直接对其进行修改,也可以通过命令行对其进行修改,这是就是告诉你如何通过命令行进行修改。)
- 为了能够在命令行定制 DFT 规范,输入 EDT、LBIST 和 OCC 数据作为
-
使用下述命令确保 DFT specification 中没有错误

该步骤需要在生成 EDT、LBIST 和 OCC 硬件之前完成。
Examples
下述示例修改了 DFT specification,增加了 LBIST(包括 EDT)和 OCC。




(这一部分脚本还不是很懂,后面再回头看吧。)
Generating the EDT, Hybrid TK/LBIST, and OCC Hardware
process_dft_specification 命令会根据 DFT specification 中定义的内容将 DFT 硬件插入到设计中。

Procedures
-
使用
process_dft_specification命令插入 EDT、LBIST 和 OCC ;
-
(可选内容)如果你想只生成硬件,但是不插入到设计中,可以使用如下命令。

后续可以手动将其插入到设计中。
Extracting the ICL Module Description
完成硬件插入之后,验证使用 process_dft_specification 命令插入的 ICL 模块的连接关系。这是进行 ICL pattern 生成的准备工作。

Procedure
-
使用
extract_icl命令找到所有的模块(Tessent instruments 和非 Tessent instruments)和它们对应的 ICL 描述,执行 DRC 验证它们的连接关系;top-level 的 ICL 描述对应于再第一步插入过程中使用
set_current_level命令指定的设计名称(同样是第二步一开始的时候 elaborate 设计时指定的设计名称)。 -
使用
analyze_drc_violation命令调试 DRC 违例;当检测到 ICL 提取错误的时候,Tessent 会生成 I-rules 错误并打开 Tessent Visualizer 以电路图的形式展示错误。
extract_icl命令还会生成一个 Synopsys DC 文件用于综合。
Generating ICL Patterns and Running Simulation
为 EDT、LBIST 和 OCC 生成 ICL 验证 patterns,然后以验证 testbench simulations。
第二个插入过程的最后一部分内容如下图所示。

Procedure
-
生成测试向量

-
验证和 process 测试向量

-
执行和检查 testbench simulations

Performing Synthesis
对原始的 RTL 以及 DFT 插入(MemoryBIST、BoundaryScan、EDT、LBIST、OCC)之后的 RTL 进行综合。
Prerequisites
- 第三方综合工具和 Tessent 的 DFT 方法学进行融合;(具体内容在该手册的附录B)
- Tessent Shell 支持使用 Synopsys DC 进行综合;(Cadence 的综合工具是 Genus)
Precedure
使用 write_design_import_script 命令创建一个dc_shell 设计加载脚本,用于加载完成两个 DFT 插入过程之后的 RTL 设计。

如果不使用 DC 进行逻辑综合,也可以使用该命令生成 dc_shell 脚本,然后对其进行调整之后用于第三方工具。

Performing Scan Chain Insertion (Flat Design)
在扫描链插入阶段,Tessent 在完成 DFT 插入之后综合得到的门级网表(gate-level netlist)上进行 scan chain 的插入和连接(stitch)。
在使用 Tessent Scan 进行扫描链插入时,non-scan 实例(如 EDT )会被自动识别。OCC 内部的 sub-chains 也会被 stitch 到 scan chains。
Tessent 会使用之前定义的 DFT 信号(如 scan enable 等),不许再再次定义 DFT 信号。
Procedure
-
设置 DFT context

在设置 context 的时候,确保 design ID 是唯一的,flat design 推荐的 ID 是 gate。gate-level netlist 推荐的名称是 gate3。
-
加载综合后的网表

该网表中包含原始的 RTL 设计和 DFT 插入的硬件。
-
指定 tsdb 输出文件夹(和前两步 DFT 插入过程一致)

-
加载所插入的 DFT 硬件的 rtl2 设计数据

-no_hdl选项指定读入所有的 DFT 数据文件(如 ICL、PDL 和 TCD 等,设计文件除外。)(从这里开始用的就是综合后的设计)在完成 design elaboration 和 DRC 之后,Tessent Shell 从setup mode 跳转到 Analysis mode。
-
使用
add_scan_mode edt_mode命令将 scan chains 连接到 EDT 信号和所插入的 EDT 硬件。
Results
对于 RTL 设计,扫描链插入和 stitch 完成的设计在 TSDB 中的 design ID 为 gate ,gate-level netlists 为 gate3。(这些名称都是自定义的,手册中使用的是推荐命名)
Examples
scan 插入和 stitch 的流程如下所示:

Performing ATPG Pattern Generation
在完成 scan chains 插入之后,就基于各种故障模型(stuck-at、transition、path delay、IDDQ)生成 ATPG patterns。
Procedure
-
准备工作
-
如果使用 Tessent Scan 进行的 scan chains 插入,执行
import_scan_mode edt_mode -
如果不是使用 Tessent ,使用 TCD IP 映射 flow。(Scan and ATPG manual)
执行
import_scan_mode命令时,Tessent Shell 为 EDT、LBIST、OCC 逻辑传递 scan-insert 设计数据。这些数据主要是存储在 TSDB 中 design ID 为 gate 的 scan structures(scan chains 和 scan channels)。 扫描插入过程中的insert_test_logic命令执行之后,对应的设计数据被存储在 gate 中。
Tessent 自动创建并启动 EDT、LBIST 和 OCC 静态信号初始化所需的 test_setup procedures cycles,用户只需要指定一些非默认的参数值。
import_scan_mode命令使用和add_scan_mode(扫描插入过程) 命令相同的扫描配置(即 DFT 信号) -
-
使用
set_current_mode命令指定你要生成的 pattern 的类型。ATPG patterns 集合的名称不能和
import_scan_mode执行的 mode name 一样。 -
write_patterns命令输出 Verilog testbenches 和 STIL patterns -
使用
write_tsdb_data命令将 flat model、fault list、PatDB 和 TCD 文件保存到 TSDB 。
Examples
Stuck-at ATPG patterns
该示例通过使用 set_current_mode edt_stuck 命令来生成 stuck-at ATPG patterns。可以选择 ATPG 过程是使用 boundary scan chains 还是 chips 的原始引脚(pads)进行capture。

Transition at-speed ATPG patterns
import_scan_mode 命令的 -fast_capture_mode 选项表示在 capture 阶段使用 OCC 提供的快速时钟。

Notes:
set_current_mode [mode_name] [-type mode_type] 命令是设置当前的测试测试模式,不同的测试模式类型((unwrapped, internal, external, and
retargeting)下 scan chains 的工作方式是不同的。在这两个脚本示例中,只是给测试模式起了一个名字,并没有指定类型。在 pattern -scan 环境下,默认的测试模式类型为 unwrapped。(具体是什么意思后面再看)
Simulating LBIST Faults
如果设计中包含 logic BIST,在完成扫描插入之后,必须执行 LBIST 故障仿真。
Prerequisites
-
设置 context

-
读取单元库

-
加载插入扫描链的 gate-level design

-
Elaborate the design

-
导入扫描插入数据

-
定义 LBIST core 的实例

-
定义和默认值不同的 DFT 信号

-
执行包含 proc 定义的 dofile 文件

-
添加需要的引脚约束和 output mask

(output mask 就是忽略这些 pin 上的信号。Ignores any fault effects that propagate to the primary output pins you name )
-
规则检查

-
读取包含 NCP 定义的 test proc file

-
执行向量故障仿真

-
报告测试覆盖率和其他测试数据

-
输出向量结果

Considerations for Using Gate-Level Verilog Netlists
在只有 gate-level Verilog netlist 的情况下,也开始使用 Tessent Shell 进行 DFT 插入,整理流程和基于 RTL 的流程相似,最大的不同是 DFT 插入完成之后必须进行综合。
如下图所示,每进行一次 DFT 插入过程之后,都要进行一次综合。

其他的不之处还包括:
- 除了IO pads 的 Tessent 单元之外,必须要有标准单元的 Tessent 单元库或者是 ATPG 库
- 加载设计时,
set_context的选项为-no_rtl - 在设置 context 是,design ID 使用推荐的命令惯例,第一个插入过程为 gate1,第二个插入过程为 gate2,扫描插入过程为 gate3
- 使用
read_cell_library命令读取设计中使用的标准单元和 IO macros 的单元库文件
除了上述内容之外,其他 flow 和基于 RTL 的 flow 是一样的。

1023

被折叠的 条评论
为什么被折叠?



