3. 设计导入与初始化
在Cadence数字后端实现流程中,Genus承担的是从RTL到门级网表的综合任务。综合开始前,必须先把三类输入完整、正确地导入工具:工艺库文件(.lib/.db,定义标准单元、宏单元、时序与功耗信息)、RTL设计文件(.v/.sv,描述功能逻辑)、约束文件(.sdc,定义时钟、输入输出延迟、驱动与负载等时序目标)。这三类输入缺一不可,且导入顺序、搜索路径设置、顶层模块名都会直接影响后续elaborate与link能否成功。
一、库文件与搜索路径的建立
Genus通过set_db系列命令建立库环境。典型做法是先指定库搜索路径,再读入目标库与链接库:
set_db init_lib_search_path {./libs ./libs/tech}
set_db library {slow.lib fast.lib}
set_db lef_library {tech.lef macro.lef}
read_mmmc mmmc.tcl
其中library用于时序与逻辑映射,lef_library提供物理抽象信息(供后续布局使用),read_mmmc读入多模式多角(MMMC)配置。若库文件缺失或路径错误,link阶段会报出无法解析的单元,因此建议在导入RTL前先确认库已正确加载,可用get_db library查看已识别的库列表。
二、读入RTL与elaborate
读入RTL有两种方式:read_hdl逐个读入文件,或read_hdl -f filelist.f按文件列表批量读入。文件列表通常包含所有.v/.sv源文件及include目录:
read_hdl -language sv -f rtl.f
elaborate top_core
elaborate是综合流程中非常关键的一步:它把RTL文本解析为Genus内部的通用逻辑结构(generic netlist),完成参数传递、generate展开、模块实例化解析,并确定设计的顶层。elaborate成功后,工具会报告设计规模(实例数、端口数、线网数)。若顶层名写错,会提示找不到模块;若RTL中存在语法错误或未定义宏,elaborate会直接失败,需要回到源码修正。
三、link与check_design
elaborate只建立逻辑结构,真正把每个实例绑定到具体工艺库单元、解析所有引用,靠的是link:
link
check_design -all > check_design.rpt
link会尝试把设计中的每个模块、每个实例与库或已读入的RTL模块对应起来。link完成后,用check_design做一致性检查,它会输出黑盒(black box)、多驱动(multiple driver)、悬空端口(unconnected/floating port)、未解析引用(unresolved reference)、组合环(combinational loop)等问题清单。建议把报告重定向到文件,逐条分析。
四、常见问题与修复方法
黑盒(Black Box):某个模块在RTL中被实例化,但既没有对应的RTL源文件,也没有对应的库单元。常见于IP核、存储器、模拟模块。修复方式有三种:补充该模块的RTL或库文件;若为第三方IP,用read_hdl读入其仿真/综合模型;若确实无需综合,可用set_db [get_db designs ...] .black_box true显式声明为黑盒,但需注意其内部时序不会被优化。
多驱动(Multiple Driver):同一根线网被多个输出端口驱动,通常源于RTL中同一信号被多个always块或assign语句赋值,或三态总线未正确建模。修复需回到RTL,合并驱动逻辑或改用三态结构,不能靠约束掩盖。
悬空端口(Unconnected Port):模块端口在实例化时未连接,或顶层输入输出未使用。若为有意悬空,可用set_db hdl_unconnected_output_port_is_error false放宽检查;若为遗漏,应补全连接。悬空输入会导致该端口浮空,可能引起综合后功能异常。
未解析引用(Unresolved Reference):link时找不到对应模块,通常是文件列表遗漏或库路径错误。检查read_hdl是否读全、init_lib_search_path是否包含所需库。
check_design -unresolved做一次快速预检,把明显缺失的模块先补齐,再进入正式link,可显著减少反复。五、初始化完成后的确认
当link与check_design均无致命错误后,可用以下命令确认设计状态:
get_db designs
report_area
report_timing -unconstrained
report_timing -unconstrained能列出尚未被约束覆盖的路径,帮助判断SDC是否完整。至此,设计导入与初始化完成,可以进入约束加载与综合策略设置阶段。
check_design中的warning不一定都是错误,但黑盒、多驱动、未解析引用通常必须处理,否则综合结果可能功能错误或无法映射。建议把报告保存为文件,逐条确认后再进入下一阶段。