当创建新的扫描链时,新的扫描插入能力提供了对扫描元素分组/排序的更好控制。flow有三个主要步骤。
首先,在设置期间,在加载设计和Tessent Cell library(也接受ATPG库文件)的同时,还必须描述任何现有扫描段(也称为子链)和现有扫描链(来自先前扫描插入过程)。add_scan_segments和add_scan_chains命令可分别用于此目的。
第二,在系统模式从SETUP转换到ANSYSTEM期间,该工具将运行DRC并从手头的设计中提取所有可用的库单元/叶单元扫描元素。此时,所有现有的扫描元素都已定义,可以使用get_scan_elements命令进行自检。
第三,在分析过程中,可能会根据一些命令创建虚拟扫描元素;例如,如果请求插入用包装单元。同样,可以使用get_scan_elements命令对所有创建的虚拟扫描元素进行自检。
Controlling Scan Insertion
命令set_scan_insertion_options允许控制一些影响扫描插入的参数。例如,如果希望所有链的最大链长度为1024,请使用以下命令:
> set_scan_insertion_options -chain_length 1024
当使用add_scan_mode命令添加扫描模式时,您可以通过简单地用新值重新指定它们来覆盖大多数常规扫描插入设置。该命令基本上获取活动扫描插入设置的简单描述,并覆盖任何add_scan_mode中明确指定的选项。如果要为模式ext_mode创建具有长度为512的较短链的外部模式,可以按如下操作:
> add_scan_mode ext_mode –type external -chain_length 512
或者,如果想在full_mode中创建一个没有长度限制的单个OCC链,对于其余的扫描元素填充,该链长度为256,您可以按如下方式操作:
> create_scan_chain_family occ \
-chain_count 1 \
-chain_length unlimited \ // overrides to no length limit!
-include_elements [get_scan_elements -filter is_occ]
> add_scan_mode full_mode -chain_length 256 \
-include_elements [get_scan_elements] \
-include_chain_families occ
Scan Insertion for Unwrapped Core
本节介绍未包裹核心的扫描插入。对于unwrapped的核心,没有创建包装单元,因此扫描插入流程使用之前描述的通用扫描插入步骤。

在此扫描插入流程中,首先识别设计中存在的扫描元素。接下来,可以创建scan_chain_family对象,指示工具如何分配特定的扫描元素子总体。在此阶段,定义一个或多个扫描模式。每个扫描模式的填充是通过包括scan_element和scan_chain_family对象来定义的。如果您没有明确添加至少一个扫描模式,该工具将推断一个默认模式,其中包括每个scan_element和scan_chain_family对象。一旦读入了预扫描缝合的网表以及所需的库,就可以详细设计(使用set_current_design)。如果已经使用DftSpecification插入了EDT IP,并且使用了DFT信号,则在扫描插入期间,这些信号在此处可用,并且工具知道并使用它们。例如,如果扫描启用被声明为DFTSignal,则无需再次声明扫描启用。该工具知道哪个端口被声明为scan enable,并在不使用set_scan_enable属性的情况下使用它。 如果已插入EDT IP,并且DFT信号用于指定不同的模式,那么对于EDT_mode,在指定时可以使用-EDT_instance连接到EDT IP添加扫描模式。工具自动理解此模式的启用解码。Example 1: If EDT IP was inserted and an ICL for EDT IP exists then use:
>set edt_instance [get_instances -of_icl_instances \
[get_icl_instances -filter tessent_instrument_type==mentor::edt]]
>add_scan_mode edt_mode -type unwrapped -edt_instance $edt_instance
Example 2 : If EDT IP was inserted and an ICL for EDT IP does not exist, then use:
>set edt_instance [get_instance -of_modules *_edt_c1 ]
>add_scan_mode edt_mode -type unwrapped -edt_instance $edt_instance
在check_design_rules期间,运行DRC。如果存在任何预先存在的扫描段,请之前文章中的“预先存在扫描段”,了解如何处理它们。 如果请求包括多个模式并且使用DFT信号,那么下面的示例将说明如何做到这一点。
Example 3: EDT IP未内置bypass。可使用DFT信号edt_mode、multi_mode和single_mode。默认类型是unwrapped的,因此没有必要指定它们。
>set edt_instance [get_instance -of_modules *_edt_c1 ]
>add_scan_mode int_edt_mode -edt_instance $edt_instance
>add_scan_mode multi_mode -chain_count 6
>add_scan_mode single_mode -chain_count 1
下面的示例分为三个主要部分。第一部分-设计、库和设计精化,展示您如何阅读Tessent Cell Library和Synthesized Verilog Gate级设计。如果已插入EDT IP,则使用set_tsdb_output_directory指向tsdb数据库所在的位置。然后使用read_design从最后一次插入中读取所有其他支持文件,如ICL、PDL、TCD,并详细说明设计。
# Design, Library loading and design elaboration.
>set_context dft -scan -hierarchical_scan_insertion
# Sets and opens the tsdb_output directory.
>set_tsdb_output_directory ../tsdb_outdir
>read_cell_library ../../../library/tessent/adk.tcelllib
# Read synthesized netlist
>read_verilog ../3.synthesis/processor_core_synthesized.vg
# Use read_design to read in information(DFT signals etc) performed in previous pass.
>read_design processor_core -design_identifier rtl2 -icl_only
>set_current_design processor_core
本示例的第二部分定义了需要声明的时钟和设计约束(如果存在)
# Define clocks and design constraints if any
>add_clock clock1
>add_clock clock2
# Run DRCs, specify different scan insertion options, and write scan stitched design
>check_design_rules
>report_clocks
>report_dft_signals
最后一部分是运行DRC的地方,如果使用了DFTSignal,那么可以使用add_scan_mode命令来指定它们。如果未指定tsdb_outdir,可以使用insert_test_logic-write_in_tsdb On指定它,以将设计文件和相邻文件写入tsdb目录数据库。
# Find edt_instance
>set edt_instance [get_instances -of_icl_instances [get_icl_instances \
-filter tessent_instrument_type==mentor::edt]]
# Specify different modes the chains need to be stitched
# EDT is built-in with Bypass
>add_scan_mode edt_mode \
-edt_instance $edt_instance
# Before scan gets inserted can analyze the different scan modes and scan chains
>analyze_scan_chains
>report_scan_chains
# Insert scan chains and writes the scan inserted design into tsdb_outdir directory
>insert_test_logic
>report_scan_chains
>exit
Example 1: 1 mode: 32 flat scan chains
这个非常基本的示例中,使用默认分布约束(多个时钟域、多个时钟边沿、功率域和每条链的单个簇),在32个扫描链上分配(展开/平坦)所有扫描元素。该工具将链连接到名为ts_si[31:0]和ts_so[31:0]的新顶级端口。
> add_scan_mode unwrapped_mode -chain_count 32
> analyze_scan_chains
> insert_test_logic
Example 2: 2 modes: edt, multi bypass (EDT controller already present)
在此示例中,对于edt模式,从所有扫描元件分配200条链,并连接到指定的edt控制器si/so引脚。
对于多旁路模式,所有扫描元素都分布到12个多旁路链,并连接到新的顶级端口,称为ts_multi_bypass_si[11:0]和ts_multi_bypass_so[11:0]。还创建了名为ts_stm0s0和ts_stm1s0的默认顶级ScanTestMode端口,以控制两种模式的激活
> add_scan_mode edt \
-si_connections edt_inst/to_si[199:0] \
-so_connections edt_inst/from_so[199:0]
> add_scan_mode multi_bypass -chain_count 12
> analyze_scan_chains
> insert_test_logic
Example 3: 3 modes: edt, multi bypass, single chain (EDT controller already
present)
这个例子是前一个例子的变体。edt模式由200条链组成 多模式旁路有12条连接到顶级端口的链,在单链时有 只需一次扫描输入和一次扫描输出。顶层ScanTestMode端口称为edt_mode_enable,
创建multi_bypass_mode_enable和single_modeenable以控制3种模式。对于多旁路模式,所有扫描元件分配到12个多旁路并连接到名为tsmulti_bypasssi[11:0]和ts_多通道_ so[11:0]。对于单链模式,所有扫描元素都分布到1个并连接到名为tssingle_chain_si和tssingle-chain_so的新top-level端口。
> add_scan_mode edt -si_connections edt_inst/to_si[199:0] \
-so_connections edt_inst/from_so[199:0] -enable_connections edt_mode_enable
> add_scan_mode multi_bypass -chain_count 12 -enable_connections \
multi_bypass_mode_enable
> add_scan_mode single_chain -single_class_chains off \
-single_power_domain_chains off -single_cluster_chains off -chain_count 1 \
-enable_connections single_mode_enable
> analyze_scan_chains
> insert_test_logic