tessent MBIST insertion

basic Tessent mbist insertion

tessent 的 mbist insert 非常简洁,我们通过tessent的lab 可以简单了解mbist insert的流程,但是实际项目中还需要做很多细节性的处理,下面就是一个简单的tessent lab case mbist insert flow。

由于优快云的代码模块没有tcl 选项,所以就随便选了一个perl 脚本语言用作代码展示,仅供参考。

#! /bin/sh
#\
exec tessent -shell -log logfiles/$0.log -replace -dofile "$0"

# Set the context to insert DFT into RTL-level design
set_context dft -rtl -design_id rtl1

# Use dft_cell_selection that is part of the library
read_cell_library ../../../library/standard_cells/tessent/adk.tcelllib

# Set the location of TSDB. Default is at the current working directory
set_tsdb_output_directory ../tsdb_outdir

# Read the memory library model
set_design_sources -format tcd_memory -y ../../../library/memories -extension tcd_memory

# Read memory verilog model
read_verilog ../../../library/memories/*.v -exclude_from_file_dictionary

# Read the design
read_verilog -f rtl_file_list

set_current_design processor_core

# Set the design level as physical_block
set_design_level physical_block

# Specify DFT requirements to insert memory test
set_dft_specification_requirements -memory_test on 

# Specify the clocks feeding memories
add_clocks 0 dco_clk -period 3.0ns

check_design_rules

# Create and report DFT Specfication that can be modified if necessary
set spec [create_dft_specification]
report_config_data $spec

# Generate and insert the hardware
process_dft_specification

# Extract IJTAG network and create ICL file for the design
extract_icl

# Generate patterns to verify the inserted DFT logic
set spec [create_pattern_specification]
process_pattern_specification

# Point to the libraries and run the simulation
#set_simulation_library_sources -v ../../../library/standard_cells/verilog/adk.v -v ../../../library/memories/*.v
#run_testbench_simulations

# If simulation fails use the command to see which pattern failed
#check_testbench_simulations -report_status

exit

how to define your mbist controller

由上面简单的流程flow 来说,基本上只是操作工具完成了mbist的插入,并未考虑到实际项目中的需求。

operation_set and algorithm

首先理解一些mbist中我们需要设值的这两个东西,一个是算法,一个是操作,对于算法而言,我们使用什么memory,mem lib中就会标明测试这块memory使用什么算法,我们根据需要设上就可以了,对于operation 来说,每个算法也会对应有相应的operation,但是我们可以去修改operation 来达到自己的目的,算法不可修改,那么这两个都起到什么作用呢,简单而言,algorithm 决定了测试的时候往哪个地址写或读什么值,而operation 则是指对这个地址读或写几次或者第几个cycle去读或写,是用来指导实际执行过程的。

我们一般使用的都是Smarch* 算法,这点可以根据使用的mem lib来确定,但是对于tessent 而言,为了cover write disturb faults,还而外提供了四种算法,TessentHammerReadFastX TessentHammerReadFastY TessentHammerWriteFastX TessentHammerWriteFastY, 这种算法就是对同一地址多次写入0 和 1 再read 值来比较检测故障。

对于controller 来说我们既可以设定algorithm 也可以设定extra_algorithms

set_config_values [get_config_element controller/AdvancedOptions/extra_algorithms]  [Smarch TessentHammerReadFastX TessentHammerReadFastY TessentHammerWriteFastX TessentHammerWriteFastY]
set_config_values [get_config_element controller/AdvancedOptions/algorithm] SmarchCHKBvcd

 想要使用这些算法,我们不单单需要对controller 进行设置,还需要读入这些额外算法的lib

read_core_description /memory_bist/algo/TessentHammerWriteFastY.tcd_mem_lib
read_core_description /memory_bist/algo/TessentHammerReadFastY.tcd_mem_lib
read_core_description /memory_bist/algo/TessentHammerWriteFastX.tcd_mem_lib
read_core_description /memory_bist/algo/TessentHammerReadFastX.tcd_mem_lib

对于operation 而言,我们同样先要读入一些额外添加的operation的lib

read_core_description /memory_bist/opset/SyncWRvcd_stretched.tcd_mem_lib

再对controller 进行设置

set_config_value [get_config_element  controller/AdvancedOptions/extra_operation_sets] opset_list

 multicycle_paths

对于controller而言,一个controller下可能会有很多的mem,如果mbist clk时钟频率过高,这些to controller的path的timing可能会很难收敛,这时我们可以对controller设置,bist clk超过多少兆时钟的时候设置mcp,这样对于后端修这部分timing的时候就比较友好,而其中设置的mcp也是对一些静态信号,tdr,enable,timing path through controller buffer的path设置。

set_defaults_value DftSpecification/MemoryBist/ControllerOptions/use_multicycle_paths auto
set_defaults_value DftSpecification/MemoryBist/ControllerOptions/use_multicycle_paths_period_threshold <period>

 mbist power

我们再测试过程中还需要考虑到功耗问题,当你的controller没有设置好,同一时间测试多个mem,这时候测试的功耗就会非常大,有可能超过了限定功耗,这样的设计就不符合项目要求,那么实际情况中我们我们的controller是并行的,但是controller下的step是串行的,这样我们就可以牺牲掉一部分测试时间,来对一个controller下的memory分成多个step测试,这样同一时间测试的mem数量就会变少,功耗就会降低。

set_defaults_value DftSpecification/MemoryBist/max_steps_per_controller 3
set_defaults_value DftSpecification/MemoryBist/max_memories_per_step 10
set_defaults_value DftSpecification/MemoryBist/max_test_time_per_controller 4000000.0ns
set_defaults_value DftSpecification/MemoryBist/max_power_per_step  300

input output pipline 

对于一些bist clk频率较高的controller,我们可以对其input 和output 设上pipline来对timing 友好。

#better for timing for high speed controller.
set_defaults_value DftSpecification/MemoryBist/ControllerOptions/pipeline_controller_inputs on
set_defaults_value DftSpecification/MemoryBist/ControllerOptions/pipeline_controller_outputs on

how to group your memory

为什么要对mem 分组呢,这就考虑到tool虽然默认情况下是一个bist clk domain一个controller,这样就可能会导致一个controller下挂很多个相同clock domain的memory,且这些memory 摆放的位置隔得非常远,这样对于后端而言,无论是从routing还是从timing角度来看都无法接受,这时我们就需要根据后端的floorplan来规划我们的memory group和controller,尽量把摆放在一起的memory挂到同一个controller下,这样对于后端而言,就可以尽量把controller靠近它下面的memory摆放,这样对routing和timing都友好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值