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 。
在第二步中, 工具检查 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 硬件、IJTAG 网络连接和输入测试 patterns;
-
仿真验证
结果
对于 MemoryBIST,Tessent 插入 MemoryBIST 控制器、接口、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 是一样的。