模块级或者小型项目,或者时钟频率较低时,并不需要物理综合,因为时序和面积较为宽松,即使APR的形状和pin分布各种各样,在后端工具里也还是很容易做一轮物理优化。
先写一个脚本
1、综合的一开头设置记录svf
2、接下来设置ss corner的db库
set stdlib_path ../../lib/stdlib/fe/nldm
set ss_lib ss1p62v125c.db
set search_path [concat $search_path $stdlib_path]
set target_library [list $ss_lib]
set synthetic_library [list dw_foundation.sldb]
set link_library [list * $ss_lib $synthetic_library]
3、读入verilog文件
analyze -format verilog {
../../rtl/digital_top.v
../../rtl/a.v
../../rtl/b.v
}
4、elaborate
elaborate digital_top
check_design
uniquify
5、设置design rules
即digital_top的输入pin的驱动能力、输出pin的负载大小等。
set_driving_cell -lib_cell BUF2 [all_inputs]
set_load -pin_load 0.5 [all_outputs]
set_max_fanout 32 digital_top
6、设置时序约束sdc
source -echo -verbose normal.sdc
附一个sdc的简单例子:
create_clock -name clk [get_ports clk] -period 100 -waveform {0 50}
set_clock_uncertainty -setup 3 [get_clocks clk]
set_clock_uncertainty -hold 0.25 [get_clocks clk]
set_input_delay -clock clk 60 [get_ports in_a]
set_input_delay -clock clk 60 [get_ports in_b]
set_output_delay -clock clk 60 [get_ports out_a]
set_output_delay -clock clk 60 [get_ports out_b]
set_false_path -from [get_ports rst_n]
set_false_path -from [get_ports mode_sel]
在设置完sdc后,要检查sdc是否完整,可以通过下面的命令进行:
check_timing
report_clocks
7、设置自动插门控时钟单元icg
set_clock_gating_style \
-minimum_bitwidth 1 \
-positive_edge_logic integrated \
-negative_edge_logic integrated \
-control_point before \
-setup 0.2 \
-hold 0.2
8、设置避免有assign
set verilogout_no_tri true
set_fix_multiple_port_nets -all -buffer_constants
9、compile
compile就是设置完一系列的外部条件和约束后,工具进行各种优化来满足的过程。
compile -gate_clock -map_effort high -area_effort high
10、打印和检查报告,确认综合结果OK
report_clock_gating
report_clock_gating -ungated
report_constraints -all_violators
report_area -hierarchy -nosplit
report_power
11、去掉网表里的特殊字符
define_name_rules myverilog -restrict "()[]{}/."
change_names -rules myverilog -hierarchy -verbose
12、写出网表和sdc给后端
write_file -format verilog -hierarchy -output digital_top_syn.v
write_sdc -nosplit digital_top_syn.sdc
13、保存session,方便后续debug或者递增式优化
write_file -format ddc -hierarchy -output digital_top_syn.ddc
再运行综合脚本
dc_shell -f syn.tcl | tee syn.log