【Tessent MemoryBIST Users Manual】【Ch2】Getting Started

使用 Tessent Shell 插入 Tessent MemoryBIST 的基本方法和一些常用情景下的示例。如果是对 repairable memories 进行 mbist,会有一些额外的步骤。

在 sub-block、physical block 或者 chip level 进行 MBIST 插入的流程和主要步骤基本一致。


DFT Flow Using Tessent Shell


下图给出了对一个设计进行 MBIST 插入的 high-level flow,每一个步骤中都有很多具体的内容。

在这里插入图片描述

【这里的连个分支对应的是 RTL flow 和 Netlist Flow。如果是 RTL flow 就所有的设计一起综合,如果只 Netlist flow 就是只综合新插入的 DFT 电路,然后将其合并到设计中。】

Prerequisites

在对设计插入 MBIST 之前,需要准备好如下内容:

  • RTL 或 gate-level netlist
  • MBIST libraries
  • 如果设计中包含标准单元,还需要 Tessent cell library 或者 ATPG library
  • 对于没有 RTL 或者 library models 的 IP blocks,使用 read_verilog 命令的 -interface_only 命令加载 simulation model。(这样可以使工具忽略 filename 参数中指定的所有 modules 内部结构,只提取 module 的端口定义和参数。)

Design Flow Dofile Example

一个简答的流程的 dofile 如下所示。

在这里插入图片描述

在这里插入图片描述


Design Loading


加载设计是使用 Tesesnt Shell 进行 Tessent MemoryBIST 插入的第一步,包括设置正确的 context、读取库文件、读取设计和 elaborating 设计。

在这里插入图片描述

Set the Context


在 Tessent Shell 中,设置 context 意味着两件事:

  • 第一,必须将 context 设置为 dft,这样才能创建 MBIST 硬件
  • 第二,必须指定读入的设计类型是否为 RTL。如果是 RTL,使用 -rtl;如果是门级 verilog netlist,使用 -no_rtl 选项。

使用 -no_rtl 模式的时候,在 DFT 插入结束之后,输出的是一个拼接的网表(concatenated netlist)。

-rtl 模式中,输入的设计文件的结构会被保留,只有修改后的设计文件和新生成的 test IP 被 writte out 。

如果已经插入过 memory BIST 的 block 要被集成到更高 level 的设计中,必须使用 open_tsdb 命令打开 child block(the
memory BIST inserted sub_block or physical_block)的 TSDB。

如果子模块和父模块的使用了相同的 TSDB,那么是可以复用的,不需要 explicitly open 默认的 TSDB,因为 TSDB 输出文件夹中的内容对工具来说是直接可用的。(具体内容可以看 set_tsdb_output_directory 命令是如何控制 TSDB 输出文件的名称和位置。)

Examples

set_context dft -rtl
set_context dft -no_rtl
open_tsdb ../core_tsdb_outdir

Read the Libraries


在对只有 RTL 的设计插入 MBIST 时,并不是只读取 MBIST 单元库就可以的,因为 RTL design 中会有一些 pad cells 和 clock control 的库单元。

如果 Tessent cell libraries 中不包含 pad 的信息,read_cell_library 命令会自动使用 LV pad library 对 Tessent cell libraries 进行补充,使其带有 pad 信息。

在 Tessent Shell 中,Memory BIST 库被看作是 Tessent core descriptions (TCDs),并且以 TCDs 被加载和引用。LV flow 的 MBIST
模型是可以直接和 Tessent Shell 兼容,可以作为 TCDs 被加载和引用。(LV flow 应该是以前的 MBIST flow,现在不用了。)

Examples

# read in Tessent cell library file for the pad IO macros.
read_cell_libraray ../library/adk_complete.tcelllib

# explicitly read in memory BIST models
read_core_descriptiosn ../library/128x64_RAM.memlib

# use set_design_sources to reference memory BIST libraries
# Using the tcd_memory type for the -format option indicates to the tool to expect a  memory library file to be read in.
set_design_sources -format tcd_memory -y ../library/memlibs -extensions memlib 

Flow Variation for Repairable Memories

Tessent MemoryBIST 的 memory library 输入文件必须要包含特定的 wrappers ,从而能够生成和插入修复逻辑。

RedundancyAnalysis wrapper 是生成用于提供 memory 修复解决方案的 BIRA 逻辑所必须的。

RedundancyAnalysis wrapper 中的 PinMap sub-wrapper 用于将修复方案传输的 memory 中。

Read the Design


在 Tessent Shell 中,设定 context 并加载库文件之后,使用 read_verilog 命令读入设计。

Memory placement(DEF,Design Exchange Format files)、power domain data(UPF(Unified Power Format) 和 CPF(Common Power Format files)) 也可以在该步骤中进行加载。这些数据会影响 MBIST 的规划,主要是 memory partition 和 MBIST 控制器的分配。

Examples

# read in one netlist that can be either RTL or gate level
read_verilog ../netlist/cpu_top.v

# specify a file and a directory library in which to search for Verilog modules. 
# -v is file_path  -y is dir_path 
set_design_sources -format verilog -v ../design/top.v -y ../design -extentions v gv

# read in DEF and UPF
read_upf ../data/design/power/blockA.upf 
read_def ../data/design/layout/blockA.def

如果多次使用 set_design_sources 命令,工具会使用最后一条命令中设定的内容。

Elaborate the Design


设计加载之后,使用 set_current_design 命令对设计进行 elaborate 。

该命令指定是 the root of the design,后续所有的操作都作用于它。

如果设计中有模块缺失,design elaboration 会识别出来。

对于 MBIST 插入而言,如果 modules 中不包含 memories 或者 memories 扇入上的时钟树单元,那么该 module 可以没有定义。可以使用 add_black_box -module 命令对其进行说明。

Examples

#  use the set_current_design command
set_current_design blockA

Report the Design Data


可以使用一些命令检查加载的设计和库文件。

一些常用的示例如下所述。

Examples

示例1

在这里插入图片描述

示例2
下述示例报告了 Tessent Shell 当前加载的 memory model 以及其他的 test core descriptions。-levels 1 是只显示 core 的名称和类型,如果不指定,会显示 model 的所有的内容。

在这里插入图片描述

示例3
下述示例报告了 design elaboration 过程中找到的 memory instances。

在这里插入图片描述

该命令除了显示 memory instance 的路径之外,还给出了一些其他属性信息。这些属性可以通过加载额外的数据间接修改(如 UPF 文件会说明 power domain island),或者使用 set_memory_instance_options 命令直接修改。


Specify and Verify DFT Requirements


使用 Tessent Shell 插入 memoryBIST 的第二步是具体说明(specify) DFT 需求、添加约束和使用 DRC 验证 DFT 需求是否正确。

在这里插入图片描述

Set DFT Specification Requirements


为了插入 MemoryBIST,必须使用 set_dft_specification_requirements 命令指定 DFT specification 需求。这样可以使用用于 MBIST 的特定 DRC,并且告诉 create_dft_specification 命令包含 MemoryBist wrapper。

Examples

定义 MBIST DFT specification 需求和将设计层级定义为 chip-level 的示例:

set_dft_specification_requirements -memory_test on 
set_design_level chip 

Notes

set_dft_specification_requirements 有两个作用:

  • 指定 check_design_rules 命令执行时检查需求(就是说明按照那些规则进行 DRC?)(在上述示例中就是执行 memory test 的设计规则检查)
  • 指定create_dft_specification命令执行的时候, DftSpecification 中需要 include 的 instrument types

DftSpecification 是一个 wrapper,描述了 process_dft_specification 命令需要的使用的信息。( process_dft_specification 命令会创建一系列的 instrument,将其插入到电路中(optionally)。)

DftSpecification 中的 MemoryBist wrapper 就是指定创建一个 memory BIST controllers,然后可以选择是否将其插入到电路中。

Flow Variation for Repairable Memories

当设计中包含可修复的 memory 的时候,使用 set_dft_specification_requirements 是需要考虑一些额外的东西。

(待补充…)

Add Properties and Constraints


添加或者改变一些影响 DFT specification 创建的属性或约束,具体如下示例所示。

Examples1

为了在 chip level 插入 memory BIST,四个 TAP pins(TDI、TCK、TMS 和 TDO)在 chip-level 是可用的,并且要连接到 pad IO macros。

可选引脚 TRST 可以作为 power-up detector 的一个输出引脚。

如果 TAP pins 被命令为 tck、tdi、tms、tdo 和 trst,会自动设置。(什么会自动设置?引脚连接?)

设定上述五个 pins 的具体示例如下所示:
在这里插入图片描述

Notes

set_attribute_value 命令的基本用法:

在这里插入图片描述
object_spec 是对象(一个或者多个),attribute_name是对象的某个属性,attribute_value是设定的属性值。

所以,示例1中的命令的意思就是,将 tck_p 这个对象的 function 属性的值设置为 tck。

这里的示例的意思就是,如果设计中执行 TAP 中的 tck 功能端口的名字不是 tck(这里就是 tck_p),这个时候,就要使用这条命令,告诉工具这个端口虽然名字不是 tck,但是它的功能就是 tck。

Examples2

The following example adds additional attributes for connecting essential fuse box connections at the chip level that are not inferred from the fuse box model. ( 修改 DftSpecification 中的内容 )
在这里插入图片描述

Examples3

可以使用 DefaultsSpecification wrapper 修改一些工具内部的默认属性,从而满足特定的需求。

DefaultsSpecification wrappers 的默认设置机制也是层次化的,可以设定 company、group、user-level 等不同层级的默认配置。【这里就是这个默认配置对谁生效,所有人还是仅某个用户】

下述示例就是创建一个 company memory BIST DefaultsSpecification。

生成一个包含 mbist 所有默认选项的文件:

在这里插入图片描述

company.tessent_defaults 文件中的部分内容如下所示:

在这里插入图片描述

然后使用该文件创建一个 company memory BIST DefaultsSpecification。

在这里插入图片描述

所创建的 DefaultsSpecification 可以在 .tessent_startup 文件中自动读取,也可以使用 read_config_data 命令直接读取。

Define Clocks


使用 add_clock 命令定义时钟。

在对设计进行 elaborating 的时候,Tessent Shell 会自动从 memory 的 clock 引脚 trace 到 clock source。

Examples1

如下示例所示,对于个简单的时钟路径(指的是从原始设计时钟到 memory 的路径上只有 wires 和 buffers),只需要定义时钟周期和参考时钟源的引脚。因为从待测 memory 到 clock source pin 的时钟路径是工具自动 trace 的。(复杂的时钟路可能有多个分支,这个时候就需要具体指定。)
在这里插入图片描述
add_clock 的功能是 declares a pin or a port as a clock。】

上述命令就是将 MBIST 模块的 CLK 输入端口给定一个周期为 12ns 的时钟,-label 选项是便于使用 get_clock 等命令访问到该时钟。(这里定义的这个时钟在实际测试中是怎么给到的?)

(这里是直接添加了一个异步时钟,-reference选项会添加生成时钟,生成时钟才有参考时钟吧。)

Examples2

下述示例定义了一个来自 PLL 的内部时钟源,用以驱动 memories。

在这里插入图片描述

第一个 add_clocks 命令的时钟源是 PLL 的参考;第二个 add_clocks 命令定义的内部时钟驱动 memories
DRC 会 trace 这些 reference pin 到它的 source,这里就是 clk_ref 端口。

(这个 case 好像有点问题,大概知道怎么个情况,后面直接看 add_clocks 这个命令的说明。)

Run DRC


执行 DRC 确保所有的约束都是正确的。DRC 通过之后(clean),Tessent 就会从 SETUP 进入到 ANALYSIS。

如果设计的 memory clock path 上包含 clock gating cells,需要使用 add_dft_clock_enables 命令;如果包含必须控制的 MUX,需要使用 add_dft_control_points命令;如果想要在 memory clock path 上添加 MUX,需要使用 add_dft_clock_mux 命令。

如果设计中出现任何 clock DRC 违例(如时钟定义错误等),必须在进行下一步流程之修复掉。

Flow Variation for Repairable Memories


Create DFT Specification


使用 create_dft_specification 命令,基于前一个步骤中指定的 DFT requirements,创建一个默认的 DFT specification 。

report_config_data 命令可以报告所创建的 DFT specification。

有多种的方法可以对 DFT specification 进行修改或配置,从而满足特定的需求。

在这里插入图片描述

Invoke create_dft_specification


基于之前定义的 DFT specification 需求,creat_dft_specification 命令可以自动创建 DFT specification,并将其保存在内存中。使用 report_config_data 命令可以报告该 DFT specification 的内容。

DFT specification 包含如下内容:

  • IjtagNetwork wrapper :描述设置 BIST 控制器所需的访问电路
  • MemoryBist wrapper:描述 memory BIST 配置

IJTAG network 完全符合 1687 IEEE 标准。

Example

如下所示,将生成的 DFT specification 保存到变量 dft_spec 中,便于使用查看其内容。

在这里插入图片描述

Edit/Configure the DFT Specification According to Your Requirements


如果有一些特殊的需求,可以多所创建的 DFT specification 进行修改。

Method 1: Change design constraints and re-generate the DFT specification

在生成 DFT specification 之后,可以退回到 setup mode,然后修改一些 memory instance 相关的选项之后,重新生成 DFT specification。如下所示,该示例将 physical_cluster_size_ratio 从默认的 20% 更改为 40%。

在这里插入图片描述

Method 2: Use the GUI to edit the DFT specification

使用 display_specification 命令打开 GUI,它会显示已经指定的 DFT 需求。GUI 界面的编辑操作会更新到内存中的 DFT specification 中。

完成编辑之后,可以使用 report_config_data 命令显示所编辑过的内容,然后再使用 read_config_data 命令添加到 DFT specification。

Method 3: Modify the DFT specification in memory

使用 add_config_elementset_config_value 这两条命令也可以对 DFT specification 进行修改。

Validate the DFT Specification


在进行下一步之前,对 DFT specification 进行检查,确保没有错误。
该步骤是可选的,但是推荐执行。执行检查的命令为:

process_dft_specification -validate_only

Process DFT Specification


创建和插入 DFT specification 中定义的所有内容。

在这里插入图片描述

使用 process_dft_specification 命令生成并插入 DFT specification 中需要的所有 DFT hardware 到设计中。

对于 Tessent MemoryBIST,如果是在 chip-level 进行插入,会插入 TAP 控制器。
如果是在 physical 和 sub-block 层级插入MBIST,插入的是 IJTAG host scan interface。


Extract ICL


该步骤是验证使用 process_dft_specification命令插入的 ICL 模块的连接关系是正确的。如果没有 DRC 违例,提取 top-level 的 ICL 描述。

extract_icl 命令还会创建一个用于 synthesis 的 SDC 文件。

在这里插入图片描述


Preparation for Pattern Generation

extract_icl 命令通过查找所有的模块及其对应的 ICL 模块准备当前设计(set_current_design指定的 root of the design)的 pattern generation。

Create Patterns Specification 和 Process Patterns Specification 两个步骤需要使用当前设计的 ICL。

Example

下述示例展示了如何提取 the root of the design 的所有 ICL 模块。

在这里插入图片描述


Create Patterns Specification


Create Patterns Specification 步骤是生成一个默认的 patterns specification。

patterns specification 和 dft specification 的作用相似,是一个配置文件,它告诉 process_patterns_specification 命令创建什么样的测试。

默认的 patterns specification 同样也可以根据特定需求进行修改,然后生成想要的 patterns specification。

在这里插入图片描述


Automatically Created Patterns Specification

使用 create_patterns_specification 命令创建的默认的 patterns specification 只会保存在内存中。在执行 process_patterns_specification 命令并验证无误之后,才会将其写入到 TSDB 输出文件夹的中的 patterns 文件夹中。

如下示例所示,创建一个默认的 signoff patterns specification,然后将其保存在 pat_spec 变量中。使用该变量查看内存中 patterns specification 的内容。

在这里插入图片描述


Edit/Configure the Patterns Specification According to Your Requirements

(待补充…)


Process Patterns Specification


执行 process_patterns_specification命令,根据 patterns specification 创建 patterns 和 test benches。

在这里插入图片描述


Run and Check Test Bench Simulations


memoryBIST 的最后步骤,通过仿真验证 mbist 插入的结果。

在这里插入图片描述


Run Simulations

使用 run_testbench_simulations 命令启动仿真器对 test benches 进行仿真。

test benches 是由 process_patterns_specification 命令生成,存放位置是 <tsdb_outdir>/patterns/.patterns_signoff。


Check Results

使用 check_testbench_simulations 命令检查仿真的状态。

(上述2个命令的具体参考Tessent Shell Reference Manual.)


Formal Verification

Tessent Shell 工具不能生成用于 Synopsys Formality 的脚本,但是可以通过设置约束手动创建一个用于 Formality 的脚本。

(形式验证参考 Tessent Shell User’s Manual 的附录。)


Test Logic Synthesis


RTL 和 gate-level design 的逻辑综合步骤是不一样的

在这里插入图片描述

在 memoryBIST 逻辑的综合过程中,综合工具可能给出的两种类型的 warnings 是可以忽略的,分别为:

  • 无扇出的寄存器及驱动其输入的组合逻辑被移除。(Registers with no fanout are removed, along with the combinatorial logic driving the inputs.)
  • 输入和输出总是相同的寄存器被合并。(Registers with inputs and outputs that are always identical are merged.)

RTL Design Flow Synthesis

集成 MBIST RTL 和 带有测试逻辑的 design RTL 的 RTL synthesis 是一个自动化流程,具体内容如下所示。

Using Generated SDC for MemoryBIST

extract_iclextract_sdc 都可以生成用于 synthesis、layout 和 STA 的 SDC 文件。

【这个 sdc 是对谁进行约束呢?DFT only?entire design?根据下面那句话推测,应该是 DFT only】

extract_icl 命令作用于带有 sub-blocks 的 physical block 时,SDC 会对 physical module 和 physical module 进行约束。

所生成的 SDC 由多个 procedures 中,这些 procedures 可以集成得到 design synthesis 中。详细内容可以参考 Tessent Shell User’s Manual 中的 Timing Constraints SDC 章节。

Synthesizing the RTL Design with Test Logic

synthesis tool 自动对 DFT inserted 的 RTL design 进行综合。

write_design_import_script 命令可以生成一个脚本,综合工具使用该脚本可以加载 DFT inserted 的 RTL design。

更加详细的内容在 Tessent Shell User’s Manual 的 Synthesis Guidelines for RTL Designs with Tessent Inserted DFT 和 Tessent Shell Workflows 中。


Gate Level Design Flow Synthesis

gate level design flow 的综合是一个完全自动的流程,只需要执行 run_synthesis 命令综合测试逻辑然后将其集成到设计中。

Run Synthesis

run_synthesis 命令只会对 TSDB 中的测试逻辑的 RTL 进行综合。

在创建和插入 MBIST、bounday scan 或 IJTAG 逻辑时,所生成的 RTL 会在执行 process_dft_specification 命令时自动写入到 TSDB 中。

Concatenate Netlist Generation

run_synthesis命令成功执行之后,总动创建并包含综合后的测试逻辑和修改后的设计模块的 concatenated netlist,并将其存放在 TSDB 的 dft_inserted_designs 文件夹中。


Run and Check Test Bench Simulations with a Gate Level Netlist


为了能够对带有 MBIST 的 disign 在 gate-level 进行 MemoryBIST 验证,需要重新生成 signoff patterns。主要步骤如下所示:

  1. 将 context 设置为 IJTAG patterns
  2. 指定(point to)用于 MBIST RTL 插入的 TSDB
  3. 读取 cell 和 memory 的库文件
  4. 读取门级网表
  5. 从 TSDB 中读取设计文件,包括 RTL
  6. Set current design and check design rules
  7. Create and process pattern specification
  8. Run and check test benches

Examples

在这里插入图片描述

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值