Tessent Mbist(1)Memory分组及DFTSpec编辑

(57) 2024-09-10 13:01:01

  1. 设计和库的需求
  2. 指定验证MBIST的需求
  3. 创建配置MBIST的DFTspec
  4. process MBIST的DFTspec

design & library

加载设计与memory 库;
可以使用 read_core_descriptions 命令读取内存中BIST logicvision设计流程中的旧模型.旧模型会转化为TCD的新的描述.需要注意的是 需要在logic vision MemoryTemplate中指定cell name;

在gate-level的设计插入流程中,需要读取Tessent的单元库.对于顶层设计的插入,必须包含pad单元库;
对于 RTL-level的设计流程,是不需要上述的单元库的直到testbench simulation这一步;

MBIST requirments

#设置dftspec的需求 set_dft_specification -memory_test on #如果你存在 可修复的memory,就必须指定Memory repair的需求 #当前的MBIST流程不允许附加的Memory repair逻辑独立于BIST的逻辑; 
加载layout布局信息;

Memory的物理布局信息是划分Memory controler的众多因素之一;
其他因素包括: power consumption,power domain,测试时间预算;

#使用 read_def #命令去加载layout信息; #使用 set_memory_instance_options -physical_cluster_size_ratio 10 #设置物理簇的大小,以芯片对角线百分比表示物理簇的大小; 
加载power domain的信息
read_upf 
添加时钟
#使用 add_clock #告诉tessent工具所要使用的时钟和他们的频率; #这些信息会在之后的DRC中使用,也会关系到Memory controller的分组; 
更改默认的DFTSpec

有两种方法更改默认的DFTspec;一是直接修改默认的DFTspec文件然后加载到tessent中去;而是使用set_defaults_value或者是更通用的指令set_config_value,去修改各种属性的值;

在DRC之前添加约束

如何设置仅影响一个或者一组Memory的更改;
大多数使用 set_memory_instance_options命令的更改只有在design rule check之后才能可见;

example:
使用 set_memory_instance_options 命令中的-use_in_memory_bist_dft_specification 的选项
,为一个指定的memory 做配置

创建 修改 验证MBIST的DFT Specification;

一旦完成设计规则检查就可以开始创建 DFTSpec
这一阶段比较重要的命令包括:

report_memory_instance get_memory_instance_option create_dft_specification #以及dftspec修改所使用的命令 add_config_element get_config_value set_config_value #以及使用ui展示dftspec的命令 display_specification 
在创建dftspec之前添加约束

有些约束对于dftspec存在全局的影响, 你可以使用 set_memory_instance_options命令去修改这些约束.下面举一个例子展示你改变的加载的power domain的信息所需要的步骤;
check_design_rule指定会分析设计,并将power domain的信息附加到每一个Memory instance上;如果你test setup使用其他的power domain

参数选择对性能和面积的影响

DFTspec中的一些参数会对设计的性能和面积以及其他方面造成影响;

为了获得更高的测试覆盖率,tessent在做Mbist的时候会添加Memory bypas逻辑以及一些用于观测的register,
我们可以通过调整bypass和observation register的数量最小化Memory的面积.

  1. 减少同步bypass register 的数量.
    每个数据输出端口都需要一组bypass register;在tessent 2020.1版本之前,bypass register 的数量是和存储器的字长相等的,现在,对于每个数据输出端口低开销的特性使得寄存器的数量从字长降低到了1.
  2. 减少 control/address observation register;
    存储器的控制和地址信号会被接管到observation register中.在2020.1之前的版本中,信号与观测寄存器的比在2-8之间(两个个信号对应1个observation register),现在,低开销的特性使得一个Memory的所有control/address信号都可以连接到一个observation register上;
关于bypass和observation逻辑;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdkM8zLW-71)(evernotecid://B004F96B-9AA0-47D6-BD23-E56FA9C545DF/appyinxiangcom//ENResource/p872)]
dftspec中的这些属性会影响到 bypass 和observation 寄存器的数量;
默认, 每个存储器接口, 观测逻辑简化后地址控制信号和观测寄存器之比为3,bypass logic不做简化,等于存储器数据输出端口的数量;

调整scan observation register 的数量

插入观测逻辑是可以通过设置AdvanceOptions(observation_xor_size)关闭的,这个选项是通过XOR树来指定地址和控制信号与观测寄存器的缩减比; 这个缩减比从1:1一直可扩大到多:1;

调整 bypass register 的数量

存储器 bypass逻辑的插入取决于Memory的TCD中Transparentmode属性决定.DFTspec中 step/MemoryInterface/scan_bypass_logic属性可以用来覆盖TCD中的设置.

同步bypass方案是默认和最常见的方案,对于一部旁路方案,不使用旁路寄存器就可以实现XOR约简.

DFTspec中 memoryInterface/data_bits_per_bypass_signal 属性用来指定组合到一个XOR tree中的数据输入信息的数量,此设置在为RAM创建bypass logic时十分有用,工具提供了一个灵活的区间,1对1到多对1;
和 observation register一样, 要限制缩减比例需要考虑避免 旁路寄存器的全速时序路径比存储器路径更critical;

bypass& observation logic缩减限制考虑
  1. 当 data_bits_per_bypass_signal 大于1,由于应用于存储器扇出的功能电路的数据相关性,ATPG的覆盖率可能会受到影响,这种影响对于不同的电路也是不同的,而且很难找到导致覆盖率降低的根本原因,在debug poor test coverage时会很困难;
  2. Memory 输入和bypass&observation register之间时序的不同会导致在AC阶段产生违例;由于 XOR tree的深度,到达bypass&observation register的路径要比到达Memory的路径(Memory input的路径)更critical;
  3. 当存储器的TCD中 DataOutStage(数据输出阶段)指定为StrobingFlop,memory bypass register会被复用为流水线将Memory数据输出到MBIST电路中;在这样的配置下,data_bits_per_bypass_signal必须指定为1;否则会在DFTspec 验证的时候报错;
示例

不同配置:

  1. full observation register & reduced bypass register;
  2. minimum observation register & bypass;
    3.disableling observation and bypass;

MemoryBIST的分组规则

outline rule(大致规则)
controller的兼容性规则表示为CCRx;步骤的兼容性规则表述为SCRx;
CCR1

不同种类的Memory分配给不同的控制器;

CCR2

位于同一个controller的DRAMs必须有一致的行列宽度和bank dimensions;

CCR3

Memory通过 physical region,clock domain,Memory cluster 进行分组; 由多个clock domain 驱动的multi-port memory,选用最快的clock domain进行分组;

CCR4

指定不同group lable的memory 分到不同的组中;

memory进一步划分兼容组,以便于在单个Memory controller步骤中对一组的memory进行并行测试;如果并行测试不同size的memory还要比串行测试他们话的时间要长,那么最好把不同大小的Memory放到不同的组中;这经常发生在一个Memory的行地址很多列地址很少而另一个列地址很多行地址很少的情况下;

SCR1

所有的memory必须使用相同的算法;

SCR2

所有的Memory必须使用相同的operation set;

SCR3

所有的memory必须为相同的种类(SRAM ROM DRAM)

SCR4

所有的DRAMs 必须为相同的row column 以及bank adress bits;

SCR5

对于计数范围,所有的Memory的column segments(列段)必须有相同的low value, high value 可以不同;

SCR7

Memory的bit grouping必须全部为偶数或者奇数;

SCR8

所有的Memory必须有一致的bist_data_out_pipelining的设置

SCR9

所有的Memory必须有一致的DataOutStage的设置;

SCR10

内存组的划分要保证没有超过 Max_power_per_step和max_memories_per_step

创建DFT spec

set spec [create_dft_specification] #创建一个 DFTSpec #在这条命令的最后,会报告当前DFTSpec生成的名字 #tip: 使用 tcl 中的set 命令去捕获 create_DFTSpec 返回的数据; #设计 仅在process_dft_specification 时发生改变 
DFTSpec检查和基本的编辑

Tessent工具会分析你设置的信息和约束;下面的例子会展示如何检查和修改DFTSp

report_config_data $spec report_config_data $spec/MemoryBist/Controller(c1) #报告所有未指定的配置(默认配置) report_config_data -show_unspecified 

re-creating the DFTspec

一些信息将你在报告DFTspec的时候才能看到,像 Memory的分组仅影响DFT的解决方案,但只能在创建之后才能看出结果,修改这些信息需要对DFTspec进大量的编辑,更简单的方法是直接改变输入的数据并重新创建DFTspec;

下面的例子中,你想移动一个Memory到一个独立的controller;

改变物理簇(physical cluster)信息并重新创建DFTSpec
report_config_data $spec/MemoryBist/Controller(c1) report_memory_instances -limit2 #报告两个instance的信息; set_memory_instance_options mem1 -physical_cluster_override MyCluster set spec [create_dft_spec -replace] #report_config_data一下检查是否修改成功 
附加的修改DFTSpec的方式
通过 Configuration Data Visualizer
display_specification 

process_dft_specification

这里没什么好说的

More articles You can follow the official account:“IC练习生”
IC民工不定期更新

THE END

发表回复