关于hold time 违例的疑问,谢谢!
以下是我DC的综合设置:
create_clock [get_ports CK]-period 60-waveform {0 30}set_clock_latency 5[get_clocks CK]
set_clock_uncertainty -setup 1[get_clocks CK]
set_clock_transition -rise 3 [get_clocks CK]
set_clock_transition -fall 3 [get_clocks CK]
在ICC中修改设置如下:
create_clock [get_ports CK]-period 60-waveform {0 30}
set_clock_latency 5[get_clocks CK]
set_clock_uncertainty1[get_clocks CK]
set_clock_transition -rise 3 [get_clocks CK]
set_clock_transition -fall 3 [get_clocks CK]
不论如何修改总有hold time违例,除非只设置setup选项,即修改为set_clock_uncertainty-setup 1 [get_clocks CK]后仍有轻微的0.001左右的违例;
但只要一加上set_clock_uncertainty-hold 0.1 [get_clocks CK]选项(即便只有0.1),在place时软件就会拼命增加buffer来增加hold time,无法通过hold time check而down掉。
1、在设置方面有何经验值可以推荐
2、我用的是ICC,ICC必须用tlups文件方可布线。以下是我的步骤和设置,是否是因为缺少tlup-min文件,导致的hold time的check条件完全不对?
因为CZ6H+为0.35um工艺,故提供的模型库文件.tf文件在ASTRO软件中即可布线。把CZ6H+\RC Extract Run-set\cz6hplus_starrcxt_rcx_v2[1].0\TME9K_v2.0下的cz6hplus_5.0v_tm9k_1p3m_starrcxt_rcx.itf文件拷贝到../ref/tlup下,包含上一级目录下的mapping 文件:mappingfile_1p3m_v2.0,并在../ref/tlup下,终端运行命令:grdgenxo -itf2TLUPlus -icz6hplus_5.0v_tm9k_1p3m_starrcxt_rcx.itf-oCZ6HPLUSgrdgen.tluplus
set tech_file " ../ref/tech/CZ6H+.9K.3AL.tf"
set tlup_map "../ref/tlup/mappingfile_1p3m_v2.0"
set tlup_max "../ref/tlup/CZ6HPLUSgrdgen.tluplus"
#set tlup_min "../ref/tlup/cb13_6m_min.tluplus" //由itf文件生成过来,故只有一个tluplus文件
各位大神们,帮帮忙了!
噢噢噢噢哦哦哦
uncertainty为什么设置1ns?再有set_clock_transition -rise 3 值都偏大
这个不一定是你说的问题,有可能是sdc关于那个hold 检查的地方限制的不到,你需要仔细的看看hold的slack report,看看是怎么产生的hold violation, 十九是有些flase path 没设置
可以检查一下,clock 是 ideal 还是 propagated ~
ICC 中为什么不是propageted clock , 反而设置了clock latency ?
刚开始是拿DC直接生成的sdc文件过来用的,里头的set_operating_conditions的max,min都用CA500C_PTF_3V_MAX来跑了,所以引起hold time老是过不了,改成如下后就OK了。
set_operating_conditions -max WORST_TREE -max_library CA500C_PTF_3V_MAX_PRIM\
-min BEST_TREE -min_library CA500C_PTF_3V_MIN_PRIM
现在的疑惑是:用WORST_TREE跑不过hold check。按理说能过才对?