基于DFT的mbist sdc模板(DFT)

1、DFT需要定义signoff sdc

        DFT(SCAN、MBIST、JTAG等)在测试模式下的电路结构、时钟路径、数据通路与功能模式完全不同,因此必须依靠专门的DFT sdc约束,才能正确的分析DFT相关时序:

        (1)测试时钟(scan shift clock、ijtag clock等)通常是低速的异步时钟,与功能的normal时钟域相互隔离;

        (2)扫描移位过程(shift)、扫描捕获(capture)过程和MBIST测试过程中,数据路径和时序要求存在较大差异性;

        (3)若不做DFT signoff,测试时就会出现setup/hold 时序违例,导致测试向量失效和缺陷漏测;

        (4)DFT SDC是ATPG流程中生成合理测试向量的前提,也是后端PR流程中优化测试逻辑的依据;

2、mbist timeplate

        在DFT的mbist测试过程中的基本数据通路为:BAP ----> Mbist controller ----> mbist interface ----> memory,各个功能模块的功能为:

        (1)BAP

                a. 接收来自TAP的控制指令;

                b. 下发配置信息:选择哪个待测memory,使用什么算法,是否全速测试,是否处于诊断模式等;

                c. 下发启动信号:start、reset、bist_en;

                d. 回收测试结果:done、go、故障信息;

        整个BAP在ijtag_tck的驱动下进行工作,同时产生了两路时钟分支,一路去到了Mbist controller,另一路去到了Mbist interface。

        (2)Mbist controller

                a. 接受BAP下发的指令;

                b. 内部的状态机跑March算法;

                c. 产生地址、数据、片选、读写使能等控制信号;

                d. 回读memory数据并比较;

                e. 输出done、go、故障信息;

        整个controller在ijtag_tck和bist_clk的驱动下工作。

        (3)Mbist interface

                a. 做功能模式和测试模式的MUX切换;

                b. 把controller输出的地址、数据和控制信号送给memory;

                c. 把memory的读出数据传回controller比较;

                d. 隔离功能逻辑,防止测试时相互干扰;

        整个controller在ijtag_tck和bist_clk的驱动下工作。

        因此,mbist的时序场景等效于:先在ijtag时钟的驱动下完成配置信息的加载,接着在bist时钟的驱动下完成算法的执行;最后在ijtag时钟的驱动下将比较结果和debug信息移位到ijtag_tdo进行观察。

        此时ijtag的时序场景和scanshift的场景是不一样的,所以需要在mbist mode下再看一遍;而bist clock的时序场景有一部分是和scanhscap的场景重合,剩下的场景是关于memory本身的,这是需要看的。总的来说,时序收敛的难度体现在与memory本身有交互的path上。

        下面将介绍mbist的约束文件应该怎么定义。注意:该约束文件是在子系统层级完成的。

        (1)先定义所有的与mbist测试相关的function时钟,以此来cover所有memory的路径时序;虽然 scanhscap过程涉及的高速接口不参与mbist测试过程,但是mbist模式的时序收敛更快,能更快的发现接口时序问题,于是仍然定义了针对input ports和output ports的virtual clock,直接follow hscap中的约束就行。

################################################################################################################################
# 1. define mbist function clock, clock is for Q ---> D path. because OCC is not inserted, so design has not high speed reg(free running)
############################################################################################
# 1.1. 800M
create_clock -name func_i_crm2mem_mmu_aclk_800M            -period 1.25     -waveform { 0 0.625 } [get_ports i_crm2mem_mmu_aclk]

create_clock -name tessent_virtual_input_output_800M       -period 1.25     -waveform { 0 0.625 }
############################################################################################

############################################################################################
# 1.2. 50M
create_clock -name func_i_pad2mem_sd_emmc_jtag_tck_50M     -period 20       -waveform { 0 10    } [get_ports i_pad2mem_sd_emmc_jtag_tck]

create_clock -name tessent_virtual_input_output_50M        -period 20       -waveform { 0 10    }
############################################################################################

############################################################################################
# 1.3. 600M
create_clock -name func_i_crm2mem_src_600M_clk_600M        -period 1.66     -waveform { 0 0.83  } [get_ports i_crm2mem_src_600M_clk]

create_clock -name tessent_virtual_input_output_600M       -period 1.66     -waveform { 0 0.83  }
############################################################################################

############################################################################################
# 1.4. 100M
create_generated_clock -name func_i_crm2mem_src_600M_clk_u_duse_div6               -source [get_ports i_crm2mem_src_600M_clk]        -edges { 1 7 13 } -add -master_clock [get_clocks func_i_crm2mem_src_600M_clk_600M]     [get_pins u_duse_subsys_crm/u_duse_div6/clk_top_pll_div_apb_src_inst/clk_div_reg/Q]

create_clock -name tessent_virtual_input_output_100M       -period 10       -waveform { 0 5     }
############################################################################################

############################################################################################
# 1.5. 200M
create_generated_clock -name func_i_crm2mem_src_600M_clk_u_duse_div3               -source [get_ports i_crm2mem_src_600M_clk]        -edges { 1 4 7  } -add -master_clock [get_clocks func_i_crm2mem_src_600M_clk_600M]     [get_pins u_duse_subsys_crm/u_duse_div3/clk_odd_div_inst/clk_out_reg/Q]

create_clock -name tessent_virtual_input_output_200M       -period 5        -waveform { 0 2.5   }
############################################################################################

############################################################################################
# 1.6. scan_cr_clk
create_generated_clock -name dft_top_scan_cr_clk_100M                              -source [get_pins u_duse_subsys_crm/u_duse_div6/clk_top_pll_div_apb_src_inst/clk_div_reg/Q] -edges {1 2 3} -add -master_clock [get_clocks func_i_crm2mem_src_600M_clk_u_duse_div6] [get_pins u_ufs_top_wrapper/mem_subsystem_occedt_tessent_occ_mem_subsystem_scan_cr_clk_inst/tessent_persistent_cell_clock_out_mux/Z]
############################################################################################

############################################################################################
# 1.7. u_duse_div3
create_generated_clock -name dft_top_u_duse_div3_200M                              -source [get_pins u_duse_subsys_crm/u_duse_div3/clk_odd_div_inst/clk_out_reg/Q]             -edges {1 2 3} -add -master_clock [get_clocks func_i_crm2mem_src_600M_clk_u_duse_div3] [get_pins u_duse_subsys_crm/mem_subsystem_occedt_tessent_occ_mem_subsystem_u_duse_div3_inst/tessent_persistent_cell_clock_out_mux/Z]
############################################################################################
################################################################################################################################

               (2) 再定义所有的与mbist测试不相关的function时钟,这里只需要保证避免出现unclocked register的warning就行;

################################################################################################################################
# 2. define nombist function clock, clock is for Q ---> D path. because OCC is not inserted, so design has not high speed reg(free running)
########################################################################################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

murphyrong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值