Design Compiler (DC) 工具基本综合流程

Design Compiler (DC) 工具基本综合流程

目录

一、前期准备

1. 工艺库与 IP 准备

  • 导入目标工艺库文件( .db 文件,注意这个文件应当在 TSMCHOME/digital/Front_End/timing_power_noise/NLDM/ */.db 路径下):
    • 设置 target_library(目标库,用于门级映射)和 link_library(链接库,含内存设计引用)
    • 补充 symbol_library(符号库,用于图形界面显示,可选选项)和 synthetic_library (DesignWare IP库)
  • 配置搜索路径( search_path ):包含 HDL 代码( VHDL / Verilog / SystemVerilog 文件 )、约束文件( sdc 文件)、IP 库(标准工艺库)等路径。

2. 设计文件管理

  • 组织 RTL 代码( Verilog / VHDL ),确保层次清晰,已经通过编译( Compile ),无 Error,无 Warning。
  • 创建目录结构:source(RTL),script(TCL 脚本),netlist(网表文件),report(面积报告,功耗报告,QoR报告,时序报告),sdc(.ddc文件,.sdc文件,.sdf文件)。
注意:QoR 即 Quality of Design报告包含各个 path_group 的状态,Cell 的统计包括Area和DRC的信息等;.ddc 文件代替过去的 .db文件格式,除此之外还生成 .sdc / .sdf 文件。

二、设计输入与初始化

3. 读入设计文件

  • 使用 analyze 和 elaborate 命令解析 RTL 设计:
analyze -formate verilog [list file1.v file2.v]
elaborate TOP_MODULE
current_design TOP_MODULE 
  • 或通过 read_file 直接读取门级网表( netlist.v )。
  • 检查设计完整性:check_design 验证模块链接,link 确保库引用正确。

4. 设置工作环境

  • 定义操作条件( set_operating_conditions ): 工艺角(主要包括温度、电压)
  • 驱动与负载约束:
    • set_driving_cell 指定输入端口驱动单元
    • set_load 定义输出负载电容
  • 线负载模型( set_wire_load_mode ):选择 top(顶层模型)或 segmented(分段模型)

三、设计约束定义

5. 设计规则约束(DRC)

设置工艺限制:set_max_transition(信号翻转时间)、set_max_fanout(扇出)、set_max_capacitance(端口电容)

6. SDC 文件基础模板

 # 1. 版本声明 (必选)
set sdc_version 2.1

# 2. 单位定义 (必选)
set_units -time ns -capacitance pF -resistance kΩ -voltage V

# 3. 时钟定义 (核心约束)
create_clock -name clk -period 10 -waveform {0 5} [get_ports CLK]
set_clock_uncertainty -setup 0.3 -hold 0.2 [get_clocks clk]
set_clock_latency -source 1.5 [get_clocks clk]

# 4. 输入/输出路径约束
set_input_delay -max 2.0 -clock clk [get_ports data_in]
set_output_delay -max 1.5 -clock clk [get_ports data_out]

# 5. 驱动与负载建模
set_driving_cell -lib_cell BUFFX4 -pin Z [all_inputs]
set_load 0.05 [all_outputs]

# 6. 设计规则约束 (DRC)
set_max_transition 0.5 [current_design]
set_max_fanout 20 [all_inputs]
set_max_capacitance 0.1 [get_ports *]

# 7. 特殊路径约束
set_false_path -from [get_clocks clkA] -to [get_clocks clkB]
set_multicycle_path 3 -setup -from [get_pins FF1/CLK] -to [get_pins FF2/D]

# 8. 功耗约束 (可选)
set_max_dynamic_power 100mW
set_max_leakage_power 50mW

# 9. 模式与条件分析
set_case_analysis 1 [get_ports test_mode]
set_clock_groups -asynchronous -group {clk1 clk2} 

7. TCL 语法规则详解

基础规则
  • 基于 Tcl 语法: 所有命令遵循 Tcl 规则,支持变量、循环和条件语句(注意没有选择语句),但需要避免非 SDC 标准扩展
  • 区分大小写: 命令参数如 -name、 -period 需严格匹配大小写
  • 注释格式: 以 # 开头,单行注释
  • 对象引用: 使用 get_ports、get_clocks 等命令获取设计对象,例如:
set_input_delay -clock [get_ports [data[*]}] 
关键命令分类
命令类型典型命令作用示例
时钟定义create_clock create_ generated_clock定义主时钟与衍生时钟create_clock -period 10 [get_ ports clk]
时序约束set_input_ delay set_output_ delay约束端口相对于时钟的时序关系set_input_ delay -max 2.0 [get_ports in1]
物理规则set_max_ transition set_max_ fanout限制信号翻转率/扇出set_max_ transition 0.5 [current_design]
路径例外set_false_ path set_multicycle_ path排除无效路径或放宽多周期路径约束set_false_ path -through [get_net rst]
功耗约束set_max_ dynamic_power限制动态 / 静态功耗set_max_ leakage_power 50mW
模式分析set_case_ analysis定义测试模式或工作条件set_case_ analysis 0 [get_ports scan_ en]
变量与参数

单位设置: 使用 set_units 统一单元,避免混用不同量纲

通配符: 支持 * 和 ? 匹配对象名,如 get_ports data*

层次分隔符: 默认使用 / ,例如 [get_cell top/sub_module/reg1]

注意事项

命令顺序优先级: 后出现的约束可能覆盖前一条(如多个 set_max_transition )

单位一致性: 确保 set_units 与工艺库单位匹配(如电容单位 pF vs fF)

模式分离: 不同工作模式(如功能模式 / 测试模式)需分开约束文件

版本兼容性: 部分命令(如 set_clock_sense)仅在特定 SDC 版本中支持


四、综合优化策略

8. 选择编译策略

  • 自顶向下(Top-Down): 整体优化,适用于中小型设计
  • 自底向上(Bottom-Up): 分层编译,适合大型设计(需设置 dont_touch 保护子模块)

9. 执行综合优化

  • 使用 compile_ultra 进行高级优化(支持时序、面积、功耗权衡):
compile_ultra -scan -no_autoungroup 
  • 关键选项: -scan(插入扫描链)、 -gate_clock(门控时钟优化)

五、分析与调试

10. 生成报告与验证

  • 时序报告: report_timing -max_paths 10 检查关键路径
  • 面积报告: report_area -hierarcy 分析模块级资源消耗
  • 功耗报告: report_power 评估动态 / 静态功耗
  • DRC 检查: check_design 确保无规则违例

11. 问题修复

  • 时序违例: 调整约束(如放宽 set_max_delay)或优化代码结构
  • 高扇出网络: 插入缓冲器(Buffer)或调整驱动强度

六、输出结果

12. 保存综合数据

  • 网表输出: write -format sv -hierachy -output design.v
  • 数据库文件: write -format ddc (含时序、约束等元数据)
  • 约束文件: write_sdc design.sdc 供后端工具使用
  • SDF文件: write_sdf design.sdf 用于时序仿真

13. 脚本与日志管理

  • 保存综合脚本( .tcl )以便版本控制
  • 记录 Log 文件( run.log )用于追溯流程状态

附录

1. run_dc.tcl 代码模板示例

sh date
remove_design -designs

#------------ Define ---------------#
set top_name TOP_NAME

#------------- Specify Libraries ----#
set search_path { ./path_to_your_stdcell_lib }
set link_library { * ./path_to_your_stdcell_lib/.db ./path_to_your_io_lib/.db }
set target_library { ./path_to_your_stdcell_lib/.db }

#-------------- Read Designs --------#
set design_path "./path_to_your_rtl"
set verilog_files [glob -nocomplain -type f $design_path/*.v]
foreach file $verilog_files {
    read_file -format verilog $file
}

current_design $top_name

reset_design
link
uniquify

#-------------- Read SDC--------------#
set sdc_path "./path_to_your_sdc_file"

read_sdc $sdc_path/*.sdc

#------------Run Compile--------------#
compile

#---------- Generate Reports----------#
report_area > ./path_to_your_report_dir/area_report.txt
report_power > ./path_to_your_report_dir/power_report.txt
report_timing > ./path_to_your_report_dir/timing_report.txt
report_constraint -all_violators > ./path_to_your_report_dir/violators.txt
report_qor > ./path_to_your_report_dir/qor_report.txt

#----------- Save Output Files --------#
write_sdc ./path_to_your_sdc_dir/top.sdc
write_sdf ./path_to_your_sdc_dir/top.sdf
write -f verilog -hier -output ./path_to_your_netlist_dir/netlist.v
write_file -f ddc -hierarchy -output ./path_to_your_sdc_dir/top.ddc

2. run_dc.tcl 执行命令

dc_shell -f run_dc.tcl > run.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值