第一次接触数字IC设计的同学,看到DC(Design Compiler)这个工具可能会有点懵。别担心,我刚开始也是这样。DC就像是一个神奇的"电路翻译官",能把我们写的硬件描述语言(比如Verilog)转换成实际可制造的电路网表。而这次我们要做的lab1,就是从这个翻译官的工作环境配置开始。
启动文件.synopsys_dc.setup就像是DC的"个人备忘录",告诉它去哪里找材料(search_path)、用什么工艺做衣服(target_library)、需要准备哪些配件(link_library)。我第一次配这个文件时,最常犯的错误就是把路径写错。比如:
bash复制search_path = ". /opt/Synopsys/libraries/syn ./rtl ./scripts"
target_library = "sc_max.db"
link_library = "* sc_max.db"
这里有个小技巧:search_path里的路径顺序很重要!DC会按顺序查找,所以常用的库要放前面。我刚开始就遇到过因为路径顺序不对,DC死活找不到库文件的情况,折腾了半天才发现是这个原因。
配置好启动文件后,我们要用这个命令进入DC:
bash复制dc_shell -topo
看到那个"-topo"了吗?这可不是装饰品。Topo模式是DC的高级工作模式,它会考虑实际的布局信息来做综合,比普通模式更接近真实芯片情况。我第一次用时看到报错"Library 'TOP_LIB' already exists"还吓了一跳,其实这只是提醒你库已经存在,不影响使用。
启动后一定要做这几件事:
printvar检查关键变量是否加载正确check_library验证库一致性check_tlu_plus_files检查技术文件特别是库一致性检查,新手常会被那些"missing cell"的警告吓到。其实像feedthrough(馈通单元)这种本来就是物理设计才需要的,逻辑综合时可以忽略。
读入设计文件时,GUI界面操作虽然直观,但我建议新手先用命令行:
bash复制read_file -format verilog TOP.v
link
这样出错时更容易排查问题。读入后记得先保存一个未映射的版本:
bash复制write -hier -f ddc -out unmapped/TOP.ddc
这个ddc文件就像是设计的一个"快照",包含了所有设计信息。有次我综合时把设计搞乱了,就是靠这个未映射版本救回来的。
约束文件(TOP.con)就像是给电路定的"交通规则"。第一次写约束时,我最大的困惑是:时钟约束到底该怎么设?比如:
tcl复制create_clock -period 10 [get_ports clk]
set_input_delay -max 3 -clock clk [all_inputs]
这里时钟周期设为10ns,输入最大延迟3ns。记住:约束太松,电路性能差;约束太紧,可能根本综合不出来。我建议新手先用适中的约束,成功后再逐步收紧。
终于到了最激动人心的综合环节!用这个命令:
bash复制compile_ultra
这个命令就像是DC的"超级模式",会自动做很多优化。第一次运行时,我盯着日志里那些"AREA"和"WORST NEG SLACK"数字看了好久。简单来说:
有个坑要注意:compile_ultra会把设计层次打平。如果你还想保留层次结构,需要加-no_autoungroup选项。
综合完一定要看这两个报告:
bash复制report_constraint -all_violators # 简写rc
report_timing # 简写rt
我第一次看时序报告时完全懵圈。后来发现重点看这几项:
如果看到违例(负slack),别慌。可以先尝试放宽时钟约束,或者检查输入输出延迟设置是否合理。
手动操作虽然直观,但真正工作时都是用脚本的。比如创建一个dc.tcl脚本:
tcl复制read_file -format verilog TOP.v
source TOP.con
compile_ultra
write -format ddc -hierarchy -output TOP_mapped.ddc
exit
然后用这个命令一键运行:
bash复制dc_shell -topo -f dc.tcl | tee dc.log
tee命令会把日志同时输出到屏幕和文件,方便调试。我强烈建议新手也养成写脚本的习惯,这能节省大量重复操作时间。
DC自带的帮助系统超级有用。比如想查时钟相关命令:
bash复制help *clock*
man create_clock
这个man命令(不是Linux那个man)会显示命令的详细用法和示例。有次我忘了set_input_delay的语法,就是靠它查到的。记住:专业工程师不是靠死记硬背命令,而是知道怎么快速查资料。