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