一个dc做逻辑综合的示例脚本
专栏:iLoveIC Dec. 22, 2024, 7:55 p.m. 1095 阅读
一个dc做逻辑综合的示例脚本,包括设置svf,插icg,去除assign,去除网表中特殊字符,导出网表和sdc,保存ddc等

模块级或者小型项目,或者时钟频率较低时,并不需要物理综合,因为时序和面积较为宽松,即使APR的形状和pin分布各种各样,在后端工具里也还是很容易做一轮物理优化。

先写一个脚本

1、综合的一开头设置记录svf

set_svf digital_top.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
感谢阅读,更多文章点击这里:【专栏:iLoveIC】
最新20篇 开设专栏