Tessent Shell Flow for Hierarchical Designs(1)
- Hierarchical DFT Terminology
- How the DFT Insertion Flow Applies to Hierarchical Designs
- RTL and Scan DFT Insertion Flow for Physical Block
- First DFT Insertion Pass: Performing Block-Level MemoryBIST
- Second DFT Insertion Pass: Inserting Block-Level EDT and OCC
- Specifying and Verifying the DFT Requirements: DFT Signals for Wrapped Cores
- Performing Scan Chain Insertion: Wrapped Core
- Verifying the ICL Model
- Performing ATPG Pattern Generation: Wrapped Core
- Running Recommended Validation Step for Pre-Layout Design Sign Off
Tessent Shell 使用名为 “divide and conquer” (分而治之)的方法学进行 hierarchical DFT,在 sub-physical block level 进行 RTL and Scan DFT 插入。
从最低层级的 bolck 开始,自底向上(bottom-up process)进行层次化 DFT 实现。
层次化设计方法学使大规模芯片设计变得十分高效,设计者将设计拆分为多个 RTL blocks,并行设计不同的功能模块。
Hierarchical DFT Terminology
Tessent Shell 的 hierarchical flow 中的一些专用术语。
Physical Block
Physical Block 是在 TO 过程中保持完整的逻辑实体,它们是综合和 layout 的区域。在芯片的顶层模块之下,这些 blcoks 可在一个 chip 或者多个 chips 内复用或实例化。 可以独立于整个 chip 对这些 blocks 进行综合。
在对 Physical Block 进行 DFT 插入的时候,Tessent 保留s the ports at the root of the physical block。当使用 ungrouping 时, 当前 Physical Block 内部的 Physical Block 实例在最终的 layout 中可能不会被保留。
在 Tessent Shell 中,hierarchical DFT insertion 流程将 physical blocks 分为三种类型:wrapped cores,unwrapped cores 和 chip。
-
Wrapped core. Wrapped core 包含用于隔离 core 内部逻辑的 wrapper cells。 wrapper cells 在 scan chain insertion 阶段插入。
Wrapped cores 需要通过 ATPG pattern retargeting 使 core 是可复用的。
Wrapped cores 可以包含 sub-blocks。 -
Unwrapped core. 不包含 wrapper cells ,但是可以包含 sub-blocks。
-
Chip. top-level 的 physical block,即完整的设计,通常在此处寻找 pad IO macros 和 时钟控制器。chip 可能包含其他的 physical block 或者是 sub-block,这些 block 可是以是 wrapped cores 或 unwrapped cores。不同于其他 physical blocks,chip 是 layout regions。
【layout regions 的概念不是很清晰,后面学习的时候留意一下。】
Sub-Block
Sub-Blocks 是存在于 parent block 中的设计,和 parent blocks 一起综合(被合并到 parent physical block 中 )。
Sub-Blocks 不是 layout physical regions。在 post-layout 的网表中,sub-block 模块的边界(boundary)可能保存也可能不保存。如下图所示,相同的 sub-block 会同时在 physical block level 和 chip level 实例化。
可以对 sub-block 进行 DFT 硬件(MBIST、EDT、OCC等)插入,但是综合和 scan insertion 要在 sub-block 的 parent physical block
level 。
Instrument Block
一个特殊的空模块(module),其中插入了 DFT elements。这个特殊的模块在 parent block 中手动实例化,它的引脚被也是手动的连接。
ATPG (or scan) pattern retargeting
为了在 parent instantiation level 测试逻辑块的时候实现复用,Tessent Shell 保留和 wrapped cores 相关的 ATPG patterns。这样,只需将 wrapped core ATPG patterns 重定向(retarget)到 top level,不需要重新生成 patterns。
为了 ATPG pattern retargeting 和 graybox 建模,Tessent Shell 对 wrapped core 的内部电路和外部电路做了区分。
-
Internal mode。从 wrapper cells 往 wrapped core 的内部看,即 core 内部的所有逻辑。Tessent Shell 在 chip-level design 的 ATPG patterns 生成过程中对 internal mode 的 ATPG pattern 进行 retarget。
-
External mode 。从 wrapper cells 向 wrapped core 的外部看,即连接 wrapped core 到外部逻辑块的逻辑电路。Tessent Shell 使用 external mode 构建 graybox models(灰箱模型),他会被 parent physical block 的 internal modes 使用。
Graybox
灰盒模型是 wrapped core models,只保留 core 的 external mode 逻辑电路和部分 IJTAG 网络。
在自底向上的层次化 DFT 过程中,灰盒模型的目的是保留 parent physical blocks 生成 internal mode 的 ATPG patterns 所需的最小逻辑。
How the DFT Insertion Flow Applies to Hierarchical Designs
在基于 flat design 的 DFT 插入流程中,进行了两步 pre-scan insertion 过程。对于层次化设计而言,流程是一样的,只不过是以自底向上的方式对设计中的每个 core 和 sub-block 应用该流程。在对低层级的 physical blocks 完成 DFT 插入之后,对 parent blocks 执行相同的插入过程,直到达到芯片的 top-level。
在对 hierarchical design 进行 DFT 插入时,部分注意事项如所述。
- 在进行 hierarchical DFT 时,必须指定 DFT 插入过程所在 hierarchical design level。对于 flat design吗,
set_design_level
总是设置为 chip。但是在层次化设计中,它就会是 physical_block 或 sub_block。 - 第一个 DFT 插入过程中的 Boundary Scan 通常要应用到 chip design level。在层次化设计中,这意味着在第一次 DFT 插入过程中, cores 和 sub-blocks 只需要插入 MemoryBIST,除非 cores 中带有嵌入式 pad IO macros。(具体流程参考 Tessent Boundary Scan User’s Manual 中的 embedded boundary scan flow)
- 在层次化设计中,每一个 physical block 和 sub-block 都有各自的 design name 和 TSDB。(为了便于数据管理,每个 block 最好都有自己的 TSDB 文件夹,这样可以避免并行执行时的读写错误。具体参考该手册的 “TSDB Data Flow for the Tessent Shell Flow”)
- 在处理(process)wrapped cores 的 parent physical block 时,可以对 core-level 的 patterns 进行 retarget。
RTL and Scan DFT Insertion Flow for Physical Block
对于每一个 wrapped core,整体流程和 flat design 一样,只是第一步的 DFT 插入流程不插入 Boundary Scan (除非有 embedded pad IO macros)。
First DFT Insertion Pass: Performing Block-Level MemoryBIST
因为没有在插入 MemoryBIST 的同时插入 boundary scan,所以可以直接使用 Tessent MemoryBIST 给出的流程。
Procedure
-
加载 RTL 设计数据
a.
set_context -design_id
设置为 rtl1和 wrapped core 的 MemoryBIST 插入相关的所有数据在 wrapped core’s TSDB 的 ID 为 “rtl1”。
b.
read_verilog
命令读取和编译设计。c. 将 design level 设置为 physical_block,以便该 core 的 layout 在 tapeout 中保持为一个独立的独立的实体。
-
创建 DFT Specification
-
生成 MemoryBIST 硬件,提取 ICL。
-
创建输入测试向量和仿真 testbenches
-
执行仿真以验证设计
Second DFT Insertion Pass: Inserting Block-Level EDT and OCC
wrapped cores 的第二个 DFT 插入过程是插入 EDT 和 OCC 硬件。和 flat design 使用的标准 OCCs 有所不同,wrapped cores 需要选择所插入的 OCCs 类型是 child 还是 standard。( Scan and ATPG User’s Manual 的 “Tessent OCC Types and Usage” 有更加详细的介绍)
如果物理设计实现的 clock path 上不支持 clock MUX,可以使用 child 类型的 OCC。用在 wrapped core 的内部的 child type 的 OCC 只有 clock chopping 和 clock gating 功能,只要 chip-level 有 parent OCC 或者是其他能够进行时钟选择的硬件,它可以满足 ATPG pattern retarget 的需求。
在为 core 的内部模式(internal mode)生成 ATPG patterns 的时候,Clock selection 用于在 shift 和 capture 时钟之间进行选择。通常情况下,scan chain 的 shift 过程的时钟要比 capture 过程的时钟慢很多,所以需要进行时钟选择。
wrapped cores 的第二步 DFT 插入过程和 flat design 的很相似,简单示例如下所示。
Procedure
-
加载设计
-
Specify and verify DFT 需求(Wrapped cores 有自己的 DFT 时钟信号需求);
-
创建 DFT 规范(specification)
-
生成 EDT 和 OCC 硬件
-
提取 ICL 模块描述
-
生成 ICL patterns 并执行仿真
Specifying and Verifying the DFT Requirements: DFT Signals for Wrapped Cores
从 TSDB 中加载设计数据,为 EDT 和 OCC 硬件定义 DFT 需求,包括添加 DFT 信号和执行 DRC 两部分。
Procedure
-
设置 DFT 需求
(第一步 DFT 插入过程中的设定的 design level 会保持,所以这里不需要再次设置。) -
为 wrapped cores 定义 DFT 信号
a. 定义全局 DFT 信号以进入逻辑测试模式
b. 定义 DFT 信号
(如果这些端口不存在,工具会自动创建新的端口。)c. Specify the following command to test with multiple load ATPG patterns in MemoryBIST
d. 在逻辑测试中测试 STI network
e. 为 hierarchical DFT 定义内部模式和外部模式。Scan 插入的时候需要。
该命令指定 wrapped cores 具有内部模式和外部模式(这是必须的),便于后续 scan chain 的 stitch 、 ATPG patterns retarget 和 graybox 建模。 -
DFT 信号定义完成之后,执行 DRC。
如果设计的 RTL 中包含 clock gating,并且不是集成的 clock gating cell,就必须使用add_dft_clock_enables
命令指定 func_en 和 test_en 端口。
Tessent 会检查时钟、异步置位和复位的控制能力。
Results
DRCs 结束之后,如果有问题,Tessent Shell 生成 DFT_C 错误。 (具体内容在 reference manual 的 pre-DFT Clock Rules)
Examples
下述示例给出了 wrapped cores 在第二步 DFT 插入过程中所需要的 DFT 信号。
Performing Scan Chain Insertion: Wrapped Core
wrapped cores 的扫描链插入需要进行 wrapper analysis,即准备将 flops( functional scannable sequential elements)复用为 wrapper cells(它们被称为 shared wrapper cells)。
analyze_wrapper_cells
命令用于执行 wrapper analysis。除了准备 shared wrapper cells 之外,该命令还会为扇出或扇入较大的 ports 提供(原文是 infer)专用的 wrapper cells。set_wrapper_analysis_options
命令的 -input_fanout_flop_threshold
和 -output_fanout_flop_threshold
选项可以设定扇入扇出的阈值(默认值是32)。
shared wrapper cells 和 dedicated wrapper cells 可以在相同的 wrapper chains 上共存,有助于帮助 Tessent 将 wrapper chains 配置为接近的长度。
扫描插入使用的 DFT 信号 int_ltest_en 和 ext_ltest_en 配合扫描使能信号一同控制 wrapper cell。
Prerequisites
在执行扫描链插入之前,首先要进行综合。
Procedure
-
设置 DFT context
-
加载综合后的设计
-
指定和 DFT 插入过程相同的输出文件夹
-
加载 rtl2 设计数据
-
DRC
-
配置 wrapper cells
a. 指定分析 wrapper cells 的选项
b. 添加特定的 wrappers (如果需要)
c. 使用analyze_wrapper_cells
命令分析 wrapper cells
d. 确保 wrapper analysis 是排除了 EDT channel IO ports
-
使用
add_scan_mode
命令将 scan chains 连接到 EDT 信号和第二个 DFT 插入过程插入的 EDT 硬件
wrapper cells 的 Scan Insertion 需要使用 multi-mode scan insertion。a. 为所有的 scan cell 创建一个 scan mode
(使用int_mode
命令将所有的 scan cells 串(stitch)在构成第一个 scan mode。b. 为 shared 和 dedicated wrapper cells 创建第二个 scan mode
在第二步插入过程中定义的 int_mode DFT 信号用来控制该 scan modeadd_scan_mode ext_mode
命令将 shared 和 dedicated wrapper cells 连接(stitch)在一起,
Verifying the ICL Model
ICL-based verification 是在生成向量之前验证 ICL network 。
在验证过程中,工具根据语义规则(semantic rules)检查 ICL网络,以验证网络连接的正确性。工具会验证可以通过 iWrite 和 iRead 访问 的每一个 IJATG 测试数据寄存器。如果设计中存有 MBIST,还会对其进行检查。
Tessent 在串链(scan chain stitching)过程中,复杂端口产生 loops(导致 ports 和 instances 名称在在综合之后发生变化)时,工具会自动更新 ICL 模型。
使用第三方工具进行扫描链插入的时候,为了完成 ICL-based verification,可能需要额外的和规则匹配的 ICL module。
验证SNN 的 ICL model 的示例如下所述。
Procedure
- Set the context to patterns to create ICL-based patterns
- 设置 tsdb_outdir 文件夹,加载单元库
- 读取 scan-inserted netlist
- 在 scan insertion 之前,从最后一个 DFT 插入步骤中加载附件
- 创建和写出 ICL-based 向量集合,包括 ICLNetwork 验证patterns 和 MBIST patterns(如果有 memory)。
- 指定 Verilog 仿真库、仿真 patterns、检查仿真结果
Examples
Performing ATPG Pattern Generation: Wrapped Core
wrapped core 的 ATPG patterns 生包含一个生成 graybox 模型的步骤。此外,要进行两次 ATPG,一次是 core 的 external mode,一次是 core 的 internal mode。
graybox model 不包括 wrapped core 的 internal mode logic,只保留了在 parent level 需要测试的 external mode logic。
具体来说,Tessent 保留的外部逻辑包括:
- PI 和 wrapper cells 的输入之间的逻辑
- wrapper cells 的 输出和 PO 之间的所有逻辑
IJTAG infrastructure 也会被保存在 graybox 中。
可以使用 external mode patterns 来计算整个 core 的 fault coverage。internal mode ATPG patterns 在顶层设计的时候 retarget。
Procedure
-
生成 graybox 模型
a. 加载设计并使用和 scan insertion 过程相同的 design ID 将 graybox 写入到 TSDB
b. 使用
analyze_graybox
命令生成 graybox 模型
使用相同的 design ID 便于 Tessent 访问完整的设计数据下述示例为一个 scan-inserted 的设计创建 graybox 模型,并将数据保存在 TSDB 的 “gate” 中。
-
为 wrapped core 的 external mode 执行 ATPG。该 patterns 只能用于计算真个 core 的故障覆盖率,不能再 chip-level 复用。
a. 使用
read_design
命令读取设计的 graybox model
使用set_current_mode
命令指定一个独特的 ATPG mode 名称来表示 patterns 目的。mode type 是 external。b. 使用
import_scan_mode
命令检索(retrieve) core 的 external mode 数据。Tessent 使用 core 的 graybox 模型。使用import_scan_mode
命令是假定你使用 Tessent Scan 进行 scan chain 的 stitch。c. 执行 DRC (
check_design_rules
)d. 生成 ATPG patterns(
create_patterns
)e. 使用
write_tsdb_data
命令将 TCD、flat model、fault list 和 PatDB 文件保存在 TSDB 中。f. 使用
write_patterns
命令写出向量仿真所需的 testbench
(set_fault_type
命令的默认值是 Stuck,该默认值在工具启动的时候就有了,所以这个脚本中没有出现该命令) -
为 wrapped core 的 internal mode 执行 ATPG。所得到 ATPG patterns 可以在 chip 的 top level 进行 retarget。
a. 加载包含 child wrapper cores 的 wraper cores 的 graybox views
b. 如果使用 Tessent Scan 进行 scan insertion,使用
import_scan_mode
指定 internal modec. 使用
set_current_mode
指定唯一的 ATPG mode 名称。current mode type 是 internal,常用的 mode name 是 scan_mode_name_sa 或 scan_mode_name_tdf。d. 执行 DRC
e. 生成 ATPG patterns
f. 使用
write_tsdb_data
命令将 TCD、flat model、fault list 和 PatDB 文件保存在 TSDB 中。g. 使用
read_faults
命令合并 external mode 的 fault list 到 wrapped core 的总故障覆盖率
-
执行 core-level ATPG patterns 的 Verilog 仿真
该任务是为了确保向量在 parent level 被重定向之后能正常使用。对于并行加载的 patterns,所有的 patterns 都要仿真。对于串行加载的 patterns,只需要对其中一部分进行仿真即可。gate-level 串行加载 patterns 的仿真时间是十分重要的。
Running Recommended Validation Step for Pre-Layout Design Sign Off
在 wrapped core 的层次化 DFT 插入流程的第一步中,大多是在 RTL-level 对 MBIST 硬件进行插入和仿真。为了确保 MBIST 仿真能够在 core 的 pre-layout netlist 的 sign-off 之前通过,在 core 的 scan-inserted netlist 上对 MBIST 进行 gate level 仿真。
Procedure
- 从 TSDB 读取 scan-inserted netlist
- Elaborate 设计并执行 DRC
- 生成 input test patterns 和仿真文件
- Simulate the testbench
Tesent Shell 将生成的 testbench 保存在 Patterns directory 的 TSDB 中,design ID 为 gate。
Examples