再来问一问什么是逻辑综合?
简单地讲就是把RTL转成网表。这不过这里要强调两点:
- 满足内部和外部的约束条件。具体包括面积、时序、功耗等,其中时序是重点。
- 要映射成指定fab的标准单元库。
在《把riscv core代码变成网表最少需要几步》里,写过synopsys dc版本的脚本例子。今天我们再来写个cadence genus版本的综合脚本。为了简单说明,只做了worst corner,可以满足大部分老工艺的综合。
代码语言:javascript复制
set TECH_LIB_PATH /data/fab/TSMC130/digital
set top digital_top
# global setting
set_db / .auto_ungroup none
# read library
set_design_mode -process 130
read_libs ${TECH_LIB_PATH}/Front_End/timing_power_noise/NLDM/wc.lib
# read rtl
read_hdl -languare v2001 {
../../rtl/a.v
../../rtl/b.v
../../rtl/digital_top.v
}
# elab
elaborate ${top}
check_design
uniquify ${top}
# constraints
read_sdc ../scr/normal_mode_max.sdc
# set dont touch to special insts in RTL
set_dont_touch [get_cells u_buf*]
set_dont_touch [get_cells u_icg*]
set_dont_touch [get_cells u_a/u_delaycell*]
# clock gates
set_db / .lp_insert_clock_gating true
# compile
syn_generic
syn_map
syn_opt
# check result
report_area
report_timing
# write result
write_hdl ${top} > ${top}_syn.v
write_sdc ${top} > normal_mode_max_out.sdc
初看与synopsys dc的版本也没有太大的区别,只是一些命令或者参数变了,但流程和要做的事情是一样的。有一点要注意的,genus默认是common ui,一些老命令不支持了,比如set_attribute,需要用set_db代替。
最后,通过下面的命令来运行综合:
代码语言:javascript复制genus -no_gui -files syn.tcl
安装目录下有用户手册可以参考:
genus/doc/genus_user/genus_user.pdf