系列学习介绍DC相关知识,包括ASIC基本单元相关,DC指令工艺库脚本相关,后端综合实现相关等总结。本节包括DC综合生成的文件以及如何去分析Timing,内容有一些个人理解和各个论坛总结学习,有不同认识欢迎探讨,fighting。
6.1 Timing analysis
6.1.1 report_timing用法
1.-clock_from -clock_to -max
report_timing -clock_from CLK1 -clock_to CLK2 -max 100 #-max_paths 报出指定数量的相同end point的path timing情况,比如说:-max_paths 10就是报出10条最差的相同end point上的path timing情况。
2.-edge_from{lead|trail} -edge_to{lead|trail}
-rise | -fall 指定endpoint上的edge是rise还是fall,只报出符合这种情况的path
-early | -late 报出用于hold分析的early path, 以及setup分析的late path
-edge_from {lead | trail} 指定source clock的edge, leading还是trailing,只报出该edge下的path,用在-clock_from上
-edge_to {lead | trail} 指定target clock的edge,leading还是trailing,只报出该edge下的path,用在-clock_to上
-early | -late 报出用于hold分析的early path, 以及setup分析的late path
path1的data delay较大,主要分析setup是否满足;path2的data_delay较小,用于hold分析
report_timing -early -clock_from CLK2 -clock_to CLK2 -edge_to lead -edge_from trail -max_path 100
-max_paths 报出指定数量的相同end point的path timing情况,比如说:-max_paths 10就是报出10条最差的相同end point上的path timing情况。
-nworst 报出指定数量的不同end point的path timing情况,比如说:-nworst 10就是报出10条最差的不同end point上的path timing情况。
6.1.2 multiple clock处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUGOtk7Q-1612455244621)(F:\typora\DC compile\62.png)]
对于两个CLK交互的路径一般都过特殊步骤保障,不通过DC分析,有两种方式设置false_path,效果一致。
方式一:
set_false_path -from [get_clocks CLK1] -to [get_clocks CLK2]
set_false_path -from [get_clocks CLK2] -to [get_clocks CLK1]
方式二:
set_clock_group -logically_exclusive -group CLK1 -group CLK2
6.1.3 语法命令
防止Netlist出现assign语句,添加buffer
set_fix_multiple_ports_nets -all -buffer_constants
转换三态门成wire类型,避免出现assign语句
set_app_var verilogout_no_tri true
输出文件
write_sdc my_design.sdc
write -f ddc -h -output my_ddc.ddc #包含最完整的信息
write -f verilog -h -output my_design.gv #输出netlist
名词解释
leading edge: 主导的边沿,在每个周期中,第一个出现的边沿就是leading edge
trailing edge: 拖尾的边沿,在每个周期中,最后一个出现的边沿就是trailing edge,有以下规律:
如果生成的clock是***positive clock***,clock的rising edge就是leading edge,falling edge就是trailing edge
如果生成的clock是***negative clock***,clock的rising edge就是trailing edge,falling edge就是leading edge。
Endpoint: out (^) checked with leading edge of 'CLK2'
Beginpoint: sub1/FF1/Q (^) triggered by trailing edge of 'CLK2'