【Tessent DFT】【Scan ATPG】Basic Tool Terminology and Concepts

【Tessent DFT】【Scan  ATPG】Basic Tool Terminology and Concepts
Tool Terminology and ConceptsScan Elementget_scan_elementsScan Chain Familycreate_scan_chain_familyScan Modeadd_scan_modeScan Chain RetimingTessent 工具和 Scan 相关的一些术语便于更好的理解工具是如何实现 Scan 的。ToDoScan Segmentcreate_scan_segmentScan ElementScan Element 可以是一个 library cell将其称之为 leaf cells也可以是 sub-chains 或 segments。【Scan Element 可以理解为构成 Scan Chains 的最小单位】leaf cell 可以是 single-bit例如一个 filp-flop也可以是 multi-bit。Scan Element 的基本结构如下几种不同类型的 Scan Elements 如下Single Bit Scan ElementMulti-Bit Scan ElementScan Element Memory With Sub-Chains / Segmentsget_scan_elementsget_scan_elements命令可以获取工具识别到所有 Scan Elements其基本用法如下Scan Element 可以是 Scan Chain、Scan Segment、Shift Register 或者是 leaf node默认情况下get_scan_elements命令只会返回 segment 和 leaf_cell segments。Tessent 工具在 DRC 之后才会识别出 Design 中的 Scan Elements所有get_scan_elements命令要在check_design_rules命令之后使用。Scan Chain FamilyA scan chain family is an intelligent container that controls the allocation of new scan chains from a specific population of scan elements.【简单来说Scan Chain Family 是 Tessent 工具中一个用于对 Scan Element 进行逻辑分组的功能位于同一个 Scan Chain Family 的 Scan Elements 会被放到同一条 Scan Chain 上。】使用create_scan_chain_family命令可以创建新的 chain familiesdelete_scan_chain_family和get_scan_chain_family命令可以用来管理已经存在的 scan chain ffamilies。示例1为不同 clock domain 的 scan element 创建 scan chain familycreate_scan_chain_family family_clk1-include_elements\[get_scan_element-filterclock_domain clk1]create_scan_chain_family family_clk23-include_elements\[get_scan_element-filterclock_domain clk2 || clock_domain clk3]get_scan_chain_families示例2针对 block_1 中的 wrapper chains 创建 scan chain familycreate_scan_chain_family block_1_wrapper\-include_elements[get_scan_elements-below_instancesblock_1-classwrapper]\-chain_count2add_scan_mode ext_mode\-typeexternal\-include_chain_familiesblock_1_wrapper\-include_elements[get_scan_elements-classwrapper]\-chain_count4add_scan_mode int_mode\-typeinternal\-include_chain_familiesblock_1_wrapper\-include_elements[get_scan_elements]\-edt_instance$edt_instancecreate_scan_chain_familycreate_scan_chain_family命令的基本用法如下一些常用选项的含义如下-include_elementsobj_spec指定所创建的 Scan Chain Family 中包含的 Scan Eelments-si/so_connectionsobj_spec指定一组现有的 top-level IO 端口Scan Chains Family 的 Scan Chains 将会连接到这些端口。-edt_instancesobj_spec指定 EDT instancesScan Chains Family 的 Scan Chains 将会连接到该 EDT。当工具找到对应的 EDT Instances 时会自动将-si/so_connections的值设置为 EDT 的 Scan Pins。-chain_length {integer| unlimited }指定 Scan Chain Family 中的 Scan Chains 的长度默认可以无限长最小长度是 1。‑chain_count {integer| unlimited }指定需要创建的 Scan Chains 的数量。默认情况下Scan Chains 的数量被设置为‑si/so_connections指定的端口数量或者是使用-edt_instances指定的 EDT controller 的引脚的数量。指定 chain_count 之后工具会自动将 Scan Chain Family 中的 Scan Elements 平分给这些 Scan Chains。Scan Mode在 Scan DFT 实现中可以将整个电路分为几个不同的部分每次只对其中一个部分进行 Scan Test。在 Tessent 工具中使用 Scan Mode 这一术语来表示这种方法。Tessent 工具的 Hierarchical Scan Insertion 允许最多指定 64 个 Scan Modes。通常情况下针对一个完整的 scan element 集合或者是一个大的 subset例如 wrapper elements创建一个 Scan Mode。使用add_scan_mode命令可以创建一个 scan mode并指定该 scan mode 下包含的 scan_element、scan_chain_family 或者其他的 scan mode objects。(也就是说一个 scan mode 可以包含另外一个 scan mode)如果没有明确定义至少一个 Scan Mode工具会将所有的 scan element 和 scan chain family 放在一个 default mode 下。add_scan_modeadd_scan_mode命令的基本用法如下一些基本选项的含义如下‑type { internal | external | unwrapped }指定 scan mode 的类型默认值是 unwrapped。如果 scan mode 的类型是 external只会把 wrapper scan elements 当作默认的集合如果是 internal 或 unwrapped modes会把所有的 scan elements 看作默认集合。‑include_chain_familiesobj_spec指定包含在该 scan mode 下的 scan chain families。如果没有使用 “-include_” 选项工具会默认将所有的 chain families 添加到当前 scan mode。‑si_connections obj_spec -so_connections obj_spec指定 design 中已经存在的 pins 或者ports该 scan mode 下创建的 scan chains 会连接到这些端口。端口的数量就是 scan chains 的数量。如果没有指定端口工具会在 block 的边界上自动创建一些端口这些端口的命令规则可以使用 -si/so_port_format format 选项来指定。-si/so_port_format format指定端口名称的命令格式。默认情况下如果一个 scan mode端口名称的命名格式为 ““ts_si/so[%d]”如果有多个 scan mode命名格式为 “ts_%s_si/so[%d]”。其中%s 表示的是 scan mode 的名称。%d 是 scan chain 的编号。enable_connections obj_spec执行用于 Enable 对应 Scan Mode 的top-levelpins 或 ports。默认情况下工具会创建名称为 “ts_stm_%ds0” 的 scan_mode enable 端口其中%d是 scan mode 的 numeric ID。如果使用多 bits 的端口来控制多个 scan mode 必须为每个 scan mode 指定 enable code。可以使用-enable_code binary选项明确指定也可使用-enable_code -auto让工具自动分配。对于 Block 而言Scan Mode 的控制信号是由其内部的 TDR 控制。工具提供一些默认的信号scan mode 的名称和默认信号的名称一致的时候工具会自动连接。【通常情况下Block Level Scan Mode 的名称和工具提供的默认信号的名称保持一致】Scan Chain Retiming如下图所示Tessent 工具会自动在 Scan Chain 的起点、终点以及 Scan Chain 的 Scan Element 之间插入 Retiming 逻辑。Retiming 逻辑最常见的是 Lockup Latch Cells只会出现在 Scan Path 上不会出现在 Func Path 上。通常情况下当出现下述两种情形时Tessent 工具会在一条 Scan Chain 的两个 Scan Elements 之间插入 Lockup Cell。不同时钟域的 Flops 被串到同一条 Scan Chain当两个不同 Clock Domain 的 Regs 被放在同一条 Scan Chains 上的时候需要插入 Lockup Cells。一般情况下CTS 是在 Func Mode 进行的不同 Clock Domain 之间不会进行 Clock Tree Balance。在 Scan Mode 下不同 clock domain 的两个 flop 被串到同一条 Scan Chain共用同一个 Scan Clock这个时候他们之间的 Clock Skew 就可能会很大。对于 Scan Data Path 来说如果 Clock Skew 很大很容易出现 Hold Timing Violation。因为 Test Clock 是慢时钟而 Scan Data Path 上没有组合逻辑path delay 又很小所以通常来说 Setup Time 是很容易满足的而 Hold Time 容易出问题。有效沿不同的 Flops 被串到同一条 Scan Chain在上述示例中如果 FF1 是在 Leading Edge 捕获数据而 FF2 是在 Trailing Edge 捕获数据那么每个 Clock Cycle FF1 和 FF2 会捕获相同的数据FF2 相当于是一个 Copy Element。为了避免这种情况同样需要在 FF1 和 FF2 之间也需要插入 Lockup Cell。【这种情形相当于是 FF1 和 FF2 之间有半个 Clock Cycle 的 Clock Skew】【Leading Edge Trailing Edge】一个时钟周期有两个edge分别称为Leading edge 前一个边沿 第一个边沿。如果开始电压是1那么 Leading Edge 就是下降沿如果开始电压是 0Leading Edge 就是上升沿。Trailing edge 后一个边沿 第二个边沿。如果开始电压是1那么 Trailing Edge 就是上升沿如果开始电压是 0Trailing Edge 就是下降沿。Tessent 工具会针对自动分析每种情形source 和 destination scan elements 的触发沿和 Clock Domain 的各种组合然后插入合适的 Retiming Logic。默认情况下Tessent 工具插入的 Retiming 逻辑是 Latch也可以指定工具插入 Flops 用于 Retiming Logic。在某些特殊的情形下即使指定 Retiming Logic 的类型为 Latch工具也会插入 Flip-Flop 用作 Retiming Logic。