在数字IC设计流程中,Design Compiler(DC) 是核心综合工具,而Tcl脚本则是与DC交互的主要方式。掌握dc.tcl脚本编写技巧,不仅能提高综合效率,更能确保设计质量。本文整理了dc.tcl脚本中最常用的命令及使用注意事项。
在开始综合之前,必须先正确配置库文件和工作环境。
设置搜索路径,告诉DC去哪里找文件
指定目标工艺库(用于映射)
链接库(包含所有需要的库文件)
综合库(DesignWare组件)
定义工作库,存放中间文件
“link_library” 中的 “*” 表示DC会首先在当前内存中搜索设计,这是推荐的做法,能加快链接速度。
读入设计是综合的第一步。DC支持多种格式,包括Verilog、VHDL和已经综合过的DDC文件。
读取Verilog RTL文件(可同时读取多个)
如果是VHDL设计
如果已经有综合过的DDC文件
设置当前顶层设计
链接设计(解析所有引用)
检查设计完整性,确保没有缺失的模块
注意:link 命令会自动解析设计中引用的所有子模块,如果找不到某个模块,会报错提示。
时钟约束是综合中最重要的部分,直接影响时序优化结果。约束设置不当,可能导致设计无法正常工作。
创建时钟:定义时钟周期和源端口
设置时钟不确定性(考虑jitter和skew)
设置时钟延迟(从时钟源到芯片内部的延迟)
设置时钟转换时间(时钟边沿的斜率)
创建生成时钟(如分频时钟)
关键概念
setup uncertainty:影响建立时间检查,值越大越保守
clock latency:模拟真实时钟到达时间,分为source latency和network latency
clock transition:影响单元延迟计算,转换时间越大延迟越大
IO约束告诉DC芯片外部环境的特性,包括输入延迟、输出延迟、驱动能力和负载。
设置输入延迟(信号在时钟沿前多久到达输入端口)
设置输出延迟(信号需要在时钟沿前多久稳定输出)
设置输入端口的驱动单元(模拟外部驱动能力)
设置输出端口的负载(模拟外部负载)
设置输入转换时间(输入信号的斜率)
技巧:
使用 “[remove_from_collection [all_inputs] [get_ports CLK]]”可以方便地从所有输入中排除时钟端口,避免给时钟设置输入延迟。
综合的核心目标是满足时序的同时最小化面积和功耗。DC提供了多种优化策略。
基础编译命令:
高级编译(推荐用于复杂设计)
高耗时优化(当常规编译无法满足时序时使用)
增量编译(在设计接近收敛时使用,节省时间)
面积优化(在时序满足后进一步优化面积)
物理感知优化(topo模式下)
优化策略建议
初始综合:使用 “compile_ultra” 获得较好的起点
时序优化:如果时序不满足,尝试 “compile_timing_high_effort”
面积优化:时序满足后使用 “optimize_netlist_area”
增量编译:仅在设计接近收敛时使用,避免过度优化
层次结构的管理直接影响综合结果的可读性和后续流程的处理。
保留层次化结构(便于调试和分析)
对特定单元进行解组和扁平化
时钟门控的全局扁平化
控制自动解组行为(设置阈值)
综合时优先选择多路选择器
注意事项
ungroup 会移除层次边界,可能影响后续的布局布线
auto-ungroup 会自动合并小模块,提高效率但降低可读性
建议在最终综合前评估是否需要保留层次结构
综合完成后,需要生成各种报告来分析设计质量。
时序报告:检查是否满足时序要求
约束违例报告:查看哪些约束被违反
面积报告:查看设计的面积占用
功耗报告:估算设计的功耗
QoR报告:综合质量概览
设计层次报告:查看模块层次结构
报告解读
WNS(Worst Negative Slack):最坏负裕量,负值表示时序违例
TNS(Total Negative Slack):总负裕量,反映整体时序状况
Violators数量:违例路径的数量,数量越多问题越严重
综合完成后,需要输出各种文件供后续流程使用。
输出综合后的网表(Verilog格式)
输出DDC文件(包含完整的设计信息)
输出约束文件(SDC格式,用于后续流程)
输出物理约束(topo模式下使用)
输出扫描链定义(DFT相关)
文件用途
*.v 网表:用于形式验证、布局布线
*.ddc 文件:包含完整的设计信息,可用于重新加载
*.sdc 约束:时序约束文件,传递给PT、ICC等工具
“芯想事珹”,先进制程IC设计与SoC定制技术交流分享平台。