DFT下release的sdc讨论

devtools/2024/11/16 10:22:45/

DFT下release的sdc主要包括三部分:

1、shift_sdc:

主要是检查scan_chain上寄存器q到si的timing情况;同时还要注意edt_logic和scan_chian之间的时序关系;channel_in/out或者wrap_cell_input/output的接口处的timing;处理的难点也在EDT和chain之间存在半周期收敛,即在shift_mode的时候,一正一负或者一负一正,存在setup只有半周期的slack,hoid的却有一个周期的slack,后期一旦setup出问题,只能降频。

Timing的处理方式:scan_chain上采用eco打拍(场景:跨时钟域时候,Q到si,Tessent工具会自动加lockup_latch_cell(向后借time)处理由于clk_skew过大导致的hold问题,同时还要考虑异步时钟分叉点过早,ocv影响,导致setup窗口被吃掉,对于大于100M的shift来说窗口更小,更危险,所以一般都是单时钟域收敛;对于带IP的模块,考虑ip内部的shift_timing是否和外部一致?ip_chain一般都固定好了,只能ip_chain_family处理;无法和外部同时去clk_domain,工具会报error);(场景:模块的规模可能很大,位置是畸形摆放,根据实际的pr位置来决定是否对链首链尾打拍或者链中间打拍,或者只针对违例的chain打拍)

edt逻辑内解压缩和压缩逻辑打拍(采用reg_cell,而不是lockup_latch_cell);edt到DFT逻辑打拍;latch到edt逻辑打拍;

寄存器和mem之间的打拍:根据项目经验一般对弈mem_clk大于800M的,在bist_data_in处打拍;

特殊情况,有些sram可能支持内部数字寄存器上chain测试,会留有si和so的pin;吃tcd自动上chain,就不要打拍处理了;但是注意有些sram的address_pin不一定能用内部的chain去shift和capture,所以为了提高覆盖率还是需要单独加一些hold_observe_cell去观察。

寄存器的rst,icg_gate,组合逻辑的gate,在shift时候都是确定值,所以不需要check时序;

shift时,没有进chain的寄存器不需要检查时序;

特殊机构:对于某些非wrap或者非partion的模块,模块内部没有OCC切换逻辑,只能用func_clk来驱动,也可以保证模块内部shift_timing收敛,但是从flat角度,即顶层来看,在一块出向量的时候,shif下由于flat dft_test_clk和func_clk的latency不一致,导致时序问题再次出现。解决办法:在模块级直接采用one_clk_Mux的方式,只用dft_test_clk,保证flat下模块级shift_timing完全收敛。但是mux带来的delay相对高频时钟来说很大,后端不一定能接收。

channel_in/out或者wrap_cell_input/output的接口处的timing:

一般channel_in/out分为内外部两部分:模块内指channel_in/out到edt的打拍,一般采取chan_in的第一级和chan_out的最后一级打拍pipie-reg_cell靠近端口排放,其余等距摆放;模块外指chann到Top的复用pad的路径,同样si的第一级和so的最后一级打拍pipie-cell靠近输入输出pad摆放,其他等距摆放。同时模块内的pipecell的时钟树尽可能的短。以上经验可以保证timing收敛更高,以及测试时间成本更小。

wrap_cell_input/output同理上述。

对于test_point(hold_cell型,clk来自dediceta_occ(快慢时钟都是silow_clk),rst来自ijtag_rst)来说:对于控制点,没有timing的影响,因为控制点触发器在捕获周期中捕获自己。 set_case_analysis control_point_en 0 确保:1.源触发器的保持路径不会放松;2.从源触发器到下一个SI引脚的扫描路径也不会放松

如果要在高速测试期间使用观察点observe_reg,那么它们必须满足从数据来源点开始的single_cycle_timing。在STA期间,用作“observe_point_en”的信号将不受约束,以允许STA工具检查这些单元的捕获和转移路径的时间。

如果在高速AC测试期间没有以满足观察点的单周期timing,则必须在ac_ATPG期间禁用该路径,通过使用“add_input_constraints observe_point_en -C0”。

由于sta和pr工具的操作方式不同,在STA期间使用“set_case_analysis”来防止检查给定路径上的计时,这将阻止Place and Route工具在同一路径上fix_timing。在慢速dc期间,这些单元格的保持路径必须满足timing要求,因此,应该使用set_false - setup - to <所有观察点flops>”

特殊:eco_chain的时序:为防止后期eco再次加入func_reg,这些reg进入eco_chian(一般设置多条,每条上有 1-2个dunmmy_reg)上时,需要打拍(latch)缓解hold问题。

如何书写shift_SDC:

creat_clock [get_ports name ] -add -period -waveform -name 

set_clock_groups -async -name ijtag -group {ijtag_tck}

set_input_delay  -clock ijtag_tck {ijtag_reset ijtag_ue ijtag_ce ijtag_si  ijatg_sel }

set_ouput_delay -clock ijtag_tck {ijatg_so}

set_input_delay -clock tessent_virtual_force_pi {dft_scan_en dft_edt_updata *edt_chann_in* *wrapoc_si* }

set_input_delay -clock tessent_virtual_fmeasure_so {*edt_chann_out* *wrapoc_so* }

set_case_ana 1 rst_muxout_pin

set_case_ana 1 {ltest_en dft_scan_en all_test atpg_mode rst_sel}  注释:atpg_mode是icg_ip中mode选择信号,有多种mode选择控制Icg开关,控制功耗;rst_sel也是rst_ip的控制方式选择。

set_case_ana 1 */occ/test_mode_reg/Q

set_case_ana 0 inject_tck_mux_sel

set_false_path *cgc_SFIFT_REG_CLK/*

set_false_path cgc_fast_clock/*

set_multicycle_path -setup 2 -from *tessent_sib*/to_enable_int*

set_multicycle_path -hold 2 -from *tessent_sib*/to_enable_int*

set_multicycle_path -hold 1 -from  edt_contro/low_pwr/low_power_hold_reg*

set_multicycle_path -setup 3 -through *edt_scan_out_buf/in  -through  *edt_scan_in_buf/in

set_multicycle_path -hold 2 -through *edt_scan_out_buf/in  -through  *edt_scan_in_buf/in

特殊的scan_mode_add的一些特殊信号:set_case_ana 

2、dc_capture_sdc:

主要是检查q到D的时序,dc_scan_capture采用slow_clk;存在多个clk_group的(port_clk或者occ_gen_clk);同时存在和功能下相同的clk下的setup multicycle_path可以放松,但是若存在一正一负的情况,setup只有半T,没法放松;难点在于功能下的hold可以放松,但是dc_capture_mode下没法放松。

注意:setup 的timing一定是没有via的;hold_timing_via和func下基本一样多,若tycal or worst下的比func多,则有问题。

如何书写capture_SDC:

creat_clock [get_ports name ] -add -period $slow_period -waveform -name 

creat_clock [get_ports ijtag_tck] -add -period 40ns -name ijtag_tck

set_clock_groups -async -name ijtag -group {ijtag_tck}

set_clock_groups -async -name  dc_scan_async -group {func_clk bisr_clk div_clk scan_clk}

create_generated_clock [get_pins ] -divde  -source -master -name -comb

set_input_delay  -clock ijtag_tck {ijtag_reset ijtag_ue ijtag_ce ijtag_si  ijatg_sel }

set_ouput_delay -clock ijtag_tck {ijatg_so}

set_multicycle_path -setup 2 -from *tessent_sib*/to_enable_int*

set_multicycle_path -hold 2 -from *tessent_sib*/to_enable_int*

clk来自上述clk_group:

set_multicycle_path -setup 2 -rise_form  -rise_to 

set_multicycle_path -hold 1   -rise_form  -rise_to 

set_multicycle_path -setup 2 -fall_from -fall_to

set_multicycle_path -hold 1 -fall_from -fall_to

set_multicycle_path -setup 2 -fall_from -rise_to

set_multicycle_path -hold 1 -fall_from -rise_to

set_multicycle_path -setup 2 -from tessent_virtual_force_pi -to clk

set_multicycle_path -hold 1  -from tessent_virtual_force_pi -to clk

set_multicycle_path -setup 2 -from clk -to tessent_virtual_measure_po

set_multicycle_path -hold 1  -from clk -to  tessent_virtual_measure_po

set_input_delay -clock tessent_virtual_force_pi {func_clk bisr_clk dft_scan_clk ijtag_tck bisr_si ijtag_* }

set_input_delay -clock tessent_virtual_fmeasure_so {bisr_so ijtag_so }

set_case_ana 0 dft_scan_en  dft_burn_in 

set_case_ana 1 ltest_en all_test

set_multicycle_path -setup 2 -from dft_edt_updata dft_pad_reset

set_multicycle_path -hold 1  -from dft_edt_updata  dft_pad_reset

set_multicycle_path -hold 1 -from  edt_contro/low_pwr/low_power_hold_reg*

set_multicycle_path -setup 3 -through *edt_scan_out_buf/in  -through  *edt_scan_in_buf/in

set_multicycle_path -hold 2 -through *edt_scan_out_buf/in  -through  *edt_scan_in_buf/in

set_case_ana 1 */occ/test_mode_reg/Q

特殊的scan_mode_add的一些特殊信号:set_case_ana 

3、mbist_func_sdc:

将tessent工具在mbist_gate下吐出来的mbist_sdc和func_sdc merge在一起减小sta_mode的种类,收敛mbist时序。

相当于dft_ac_capture的时序,除带iP的模块,存在bypass_dft_专有高频时钟,需要单独声明async_clk_group在sdc中。

但是容易出现假path,无法辨别是否。

注意:为防止occ_chain_reg时序出现问题,一般ocC的逻辑在pr时摆放在一起,保证occ内部的cts尽可能的短,以至就可以忽略时序问题。

对时序敏感的部分,DFT 会出cell.list抓取报告提供给pr,并指导摆放原则。

对于mem高频时序紧张问题,一般采用pr给的mem_group作为指导文件来分controler来做测试电路。


http://www.ppmy.cn/devtools/134403.html

相关文章

logstash grok插件语法介绍

介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据&#xff0c;进行复杂的逻辑处理&#xff0c;甚至可以无中生有的添加新的 logstash 事件到后续的流程中去&#xff01;Grok 是 Logstash 最重要的插件之一。也是迄今为止使蹩脚的、无结构的日志结构化和可查询…

连续 Hopfield 神经网络深入探讨

连续 Hopfield 神经网络深入探讨 一、引言 人工神经网络在众多领域展现出了卓越的性能&#xff0c;连续 Hopfield 神经网络&#xff08;Continuous Hopfield Neural Network&#xff0c;CHNN&#xff09;作为其中的重要分支&#xff0c;为解决复杂的优化问题、模式识别以及联…

TCP/IP--Socket套接字--JAVA

一、概念 Socket套接字&#xff0c;是由系统提供⽤于⽹络通信的技术&#xff0c;是基于TCP/IP协议的⽹络通信的基本操作单元。 基于Socket套接字的⽹络程序开发就是⽹络编程。 二、分类 1.流套接字 使用传输层TCP协议。TCP协议特点&#xff1a;有链接、可靠传输、面向字节流…

革命性AI搜索引擎!ChatGPT最新功能发布,无广告更智能!

零、前言 大人&#xff0c;时代变了。 最强 AI 助力下的无广告搜索引擎终于问世。我们期待已久的这一刻终于到来了&#xff0c;从今天起&#xff0c;ChatGPT 正式转型为一款 AI 搜索引擎&#xff01; 北京时间 11 月 1 日凌晨&#xff0c;恰逢 ChatGPT 两岁生日&#xff0c;O…

Linux(基本使用和配置 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

远程控制步骤

当远在千里之外的朋友想求助你帮他找到他电脑上的文件、或者是给他安装软件时。但是你给他说了他又找不到&#xff0c;那么这时你就可以通过控制对方的电脑去做一系列的操作。 如何远程控制对方的电脑非常关键。 方法一&#xff08;Windows自带远程桌面功能&#xff09;&#…

飞牛云fnOS本地部署1Panel服务器运维管理面板并搭建Halo个人博客

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

《C++ 实现生成多个弹窗程序》

《C 实现生成多个弹窗程序》 在 C 编程中&#xff0c;我们可以利用特定的系统函数来创建弹窗&#xff0c;实现向用户展示信息等功能。当需要生成多个弹窗时&#xff0c;我们可以通过循环结构等方式来达成这一目的。 一、所需头文件及函数介绍 在 Windows 操作系统环境下&#…