【Tessent Shell Users Manual】【Ch5】Workflows(1)【Tessent Shell Flow for Flat Designs】

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。

具体过程

  1. 加载 RTL 设计 数据

    在这里插入图片描述

  2. 在第一步的插入过程中,set_context -design_id 选项一般设置为 “rtl1”。
    -design_id会将特定 DFT 插入过程的所有的数据存储到 TSDB 中。对于第一个插入过程,rtl1 包含了 MBIST、Boundary Scan 和 IJRAG 的数据。(rtl1只是一个推荐名称,可以任意指定。)

  3. set_dft_specification_requirements命令的-memory_test 设为 “auto” ,-boundary_scan选项设置为 “on”,告诉工具同时进行 MBIST 和 Boundary Scan 的生成。

    在这里插入图片描述

  4. 设定 design-level;

  5. 配置测试引脚和特殊引脚;
    在这里插入图片描述
    在这里插入图片描述

    (从命令上看,这些应该只是对设计中现有的引脚进行配置,没有增加新的引脚。)

  6. 使用 check_design_rules命令使工具从 setup mode 进入到 analysis mode,如果设计存在问题,工具会保持在 setup mode;

  7. 创建 DFT 规范 ;(33-43)

    在这里插入图片描述

    为了使功能引脚能够被共享为 EDT channel 的引脚,在插入 boundary scan 的时候必须插入备用输入和输出,避免沿着功能路径级联多个选择器(multiplexers);(详细内容参考reference manual 的 AuxiliaryInputOutputPorts wrapper )

  8. 创建 DFT 硬件、IJTAG 网络连接和输入测试 patterns;

    在这里插入图片描述

  9. 仿真验证

    在这里插入图片描述

结果

对于 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

  1. 使用 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 来加载设计及其相关文件。

  2. 使用 set_tsdb_output_directory 命令指定 tsdb 输出位置和第一个过程的一样

    在这里插入图片描述

    如果在第二步的 DFT 插入过程中忘记设定, Tessent 会在当前工作文件夹下创建一个默认的 tsdb_outdir 文件夹。如果两个插入过程中使用了不同的文件夹,确保使用 open_tsdb 命令打开第一个插入过程中中使用的 TSDB 。

  3. 使用read_cell_library命令读取标准单元和 IO pads 模块的库文件。

    在这里插入图片描述

    (需要多个库文件就使用该命令读取多少个库文件)

  4. 使用 read_design 命令加载设计文件
    在这里插入图片描述
    该设计是在第一个 DFT 插入过程中使用 read_verilog 命令时创建的。read_design 命令也会加载 TCD、TCL、PDL 等相关文件(如果TSDB中存在)。

    为了在第二个插入过程中正确的加载设计,read_design命令会参考第一个 DFT 插入过程中创建的设计源文件并其保存在 dft_intertd_designs文件夹。

  5. 使用 set_current_design 命令 elaborate 设计
    在这里插入图片描述

    如果有模块描述丢失,design elaboration 会检查出来。可以通过添加丢失的模块来修复 elaboration 错误,或者使用 add_black_boxes -module 命令。

Specifying and Verifying the DFT Requirements


设计加载完成之后,为想插入的硬件定义 DFT 需求。需求定义包括添加 DFT 信号和 DRC 检查。

在这里插入图片描述

Procedures

  1. 使用 set_dft_specification_requirements 命令执行 pre-DFT 的设计规则检查。
    在这里插入图片描述
    因为在第一步的插入过程中已经指定工作在 chip-level ,所有在第二步的插入过程中就不需要指定。

  2. 使用add_dft_signals命令定义 DFT 信号
    在这里插入图片描述
    DFT 信号用于确定各种每种测试模式下的工作模式、控制值和信号行为。

    Tessent Shell 的 DFT 信号功能可以自动完成如下任务:
    (1)添加 DFT 信号
    (2)为各种工作模式配置 DFT 信号
    (3)传递将 DFT 信号的信息

    基于特定的工作模型,Tessent 创建创建必要的 setup procedures,通过 IJTAG 网络来控制 DFT 信号。

  3. 使用 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

  1. 配置crete_dft_specification命令
    在这里插入图片描述

  2. 通过下述接口使用命令定制 DFT 规范

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

  1. 使用 process_dft_specification 命令插入 EDT、LBIST 和 OCC ;

    在这里插入图片描述

  2. (可选内容)如果你想只生成硬件,但是不插入到设计中,可以使用如下命令。

    在这里插入图片描述

    后续可以手动将其插入到设计中。

Extracting the ICL Module Description


完成硬件插入之后,验证使用 process_dft_specification 命令插入的 ICL 模块的连接关系。这是进行 ICL pattern 生成的准备工作。

在这里插入图片描述

Procedure

  1. 使用 extract_icl 命令找到所有的模块(Tessent instruments 和非 Tessent instruments)和它们对应的 ICL 描述,执行 DRC 验证它们的连接关系;

    top-level 的 ICL 描述对应于再第一步插入过程中使用 set_current_level 命令指定的设计名称(同样是第二步一开始的时候 elaborate 设计时指定的设计名称)。

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

  1. 生成测试向量
    在这里插入图片描述

  2. 验证和 process 测试向量

    在这里插入图片描述

  3. 执行和检查 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

  1. 设置 DFT context

    在这里插入图片描述

    在设置 context 的时候,确保 design ID 是唯一的,flat design 推荐的 ID 是 gate。gate-level netlist 推荐的名称是 gate3。

  2. 加载综合后的网表

    在这里插入图片描述

    该网表中包含原始的 RTL 设计和 DFT 插入的硬件。

  3. 指定 tsdb 输出文件夹(和前两步 DFT 插入过程一致)

    在这里插入图片描述

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

    在这里插入图片描述

    -no_hdl 选项指定读入所有的 DFT 数据文件(如 ICL、PDL 和 TCD 等,设计文件除外。)(从这里开始用的就是综合后的设计)

    在完成 design elaboration 和 DRC 之后,Tessent Shell 从setup mode 跳转到 Analysis mode。

  5. 使用 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

  1. 准备工作

    • 如果使用 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 信号)

  2. 使用 set_current_mode 命令指定你要生成的 pattern 的类型。

    ATPG patterns 集合的名称不能和 import_scan_mode 执行的 mode name 一样。

  3. write_patterns 命令输出 Verilog testbenches 和 STIL patterns

  4. 使用 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

  1. 设置 context

    在这里插入图片描述

  2. 读取单元库

    在这里插入图片描述

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

    在这里插入图片描述

  4. Elaborate the design

    在这里插入图片描述

  5. 导入扫描插入数据

    在这里插入图片描述

  6. 定义 LBIST core 的实例

    在这里插入图片描述

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

    在这里插入图片描述

  8. 执行包含 proc 定义的 dofile 文件

    在这里插入图片描述

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

    在这里插入图片描述

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

  10. 规则检查

    在这里插入图片描述

  11. 读取包含 NCP 定义的 test proc file

    在这里插入图片描述

  12. 执行向量故障仿真

    在这里插入图片描述

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

    在这里插入图片描述

  14. 输出向量结果

    在这里插入图片描述


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 是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值