射
在 ASIC 项目中,同一套设计常需要在 Synopsys Design Compiler 与 Cadence Genus 等不同工具之间迁移,SDC 约束的移植是最容易出错的环节。
一、SDC 的共性与差异
SDC 是基于 Tcl 的标准格式,create_clock、set_input_delay、set_false_path 等核心命令各工具通用。但以下方面经常不同:
1. 对象查询命令与通配符行为(get_pins、get_cells 的层次分隔符和大小写);
2. 工具专有扩展命令,例如 DC 中的 set_dont_touch_network 等;
3. 默认的时钟传播模式、时钟延迟和不确定性处理;
4. 对未约束路径的默认处理。
二、移植方法
1. 把约束分成“通用 SDC”和“工具专有设置”两部分,通用部分保持结构不变;
2. 用参数化模板管理时钟周期、IO 延迟和不确定性,移植时只改参数;
3. 移植后用两种工具分别执行 check_timing / report_constraint,比对未约束端点数量;
4. 在签核工具(如 PrimeTime 或 Tempus)中统一验证。
三、门控时钟与生成时钟
1. 门控时钟需要用 clock gating check 约束,工具自动插入的 ICG 与手动门控处理方式不同;
2. 分频生成时钟必须用 create_generated_clock 明确定义源时钟和分频比;
3. 多模式多工艺角(MMMC)设置需逐项核对。
四、常见坑
1. 层次名在综合后改变,约束找不到对象却只给警告;
2. false path 写得过宽,掩盖真实违例;
3. 时钟不确定性在不同阶段(综合与布局后)未及时调整。
讨论:
1. 你们如何管理跨工具的约束模板?
2. 门控时钟检查最常见的告警你们怎么处理?
一、SDC 的共性与差异
SDC 是基于 Tcl 的标准格式,create_clock、set_input_delay、set_false_path 等核心命令各工具通用。但以下方面经常不同:
1. 对象查询命令与通配符行为(get_pins、get_cells 的层次分隔符和大小写);
2. 工具专有扩展命令,例如 DC 中的 set_dont_touch_network 等;
3. 默认的时钟传播模式、时钟延迟和不确定性处理;
4. 对未约束路径的默认处理。
二、移植方法
1. 把约束分成“通用 SDC”和“工具专有设置”两部分,通用部分保持结构不变;
2. 用参数化模板管理时钟周期、IO 延迟和不确定性,移植时只改参数;
3. 移植后用两种工具分别执行 check_timing / report_constraint,比对未约束端点数量;
4. 在签核工具(如 PrimeTime 或 Tempus)中统一验证。
三、门控时钟与生成时钟
1. 门控时钟需要用 clock gating check 约束,工具自动插入的 ICG 与手动门控处理方式不同;
2. 分频生成时钟必须用 create_generated_clock 明确定义源时钟和分频比;
3. 多模式多工艺角(MMMC)设置需逐项核对。
四、常见坑
1. 层次名在综合后改变,约束找不到对象却只给警告;
2. false path 写得过宽,掩盖真实违例;
3. 时钟不确定性在不同阶段(综合与布局后)未及时调整。
讨论:
1. 你们如何管理跨工具的约束模板?
2. 门控时钟检查最常见的告警你们怎么处理?

