在数字IC设计流程中,Design Compiler (DC) 的 check_timing 命令主要用于检查设计的时序约束(SDC)是否完备。如果约束存在漏洞,后续的时序分析结果将不可信。该报告包含多种检查项(Check Items),主要涵盖时钟定义、输入输出约束、组合逻辑环路及特殊器件等方面。
1、non-unate path warning
提示“Warning:A non-unate path in clock network for clock ‘CLK’ from pin MUX/S is detected”.
Design Compiler中check_timing报出的时钟网络Non-unate路径警告,核心原因是时钟传输路径上存在MUX、XOR等非单边组合逻辑单元,本次告警源于时钟CLK经过MUX选择端引脚,破坏了时钟路径的固定极性特征。在时序分析中,BUF、INV属于单边器件,输入输出信号变化极性固定,工具可精准跟踪时钟边沿、延迟与偏斜;而MUX等器件的输出电平由数据端和选择端共同决定,无固定的信号变化单调性,被定义为非单边路径。
该警告会严重影响STA时序分析的准确性,存在较大设计风险。工具无法精准判定时钟边沿的传播极性,导致时钟延迟、时钟偏斜、延迟参数计算出错,进而造成寄存器建立、保持时间时序检查结果失真。若放任该问题,会出现时序分析结果偏乐观的情况,流片后易引发电路时序违规、功能异常,同时也会导致生成时钟约束解析失效,时钟网络建模完全不可靠。
针对该问题有三种标准化解决方案。最优方案为RTL重构,严格规避时钟路径上的MUX、异或门等组合选择逻辑,采用寄存器同步切换、专用ICG时钟门控单元实现时钟切换与启停功能,保证时钟树仅由缓冲器、反相器等单边器件构成。若功能必须保留时钟路径MUX,可通过set_clock_sense约束强制指定时钟传播极性,或屏蔽选择端的时钟传播特性,让工具完成精准时序建模;需要结合RTL功能判断某些分支是否会被用到。兜底方案为调整电路架构,将选择逻辑迁移至数据通路,彻底净化时钟传输路径。该问题是数字后端与时序约束高频问题,核心设计原则为保证时钟网络路径唯一、极性固定、无组合逻辑分支。
2、the master of the following generated clock is not connected to any clock source Error
“the master of the following generated clock is not connected to any clock source”是DC时序约束常见告警,核心原因是生成时钟依赖的主时钟溯源失败,主时钟未定义、时钟传播路径中断、约束拦截或引脚层级写错,导致工具无法建立有效的时钟时序模型,造成时序分析失效。解决该告警需遵循规范时序约束流程:优先补全create_clock主时钟定义,保证先有主时钟再定义生成时钟;核对create_generated_clock的-source引脚路径准确无误;移除误配置的阻断约束,复杂场景可通过-master_clock参数显式绑定主时钟,同时对时钟分频单元设置dont_touch,避免综合优化删除时钟路径。
set_clock_sense是控制时钟传播特性的核心约束命令,主要用于修正时钟极性、阻断无效时钟传播,解决时钟树中非单边单元引发的时序异常。其核心包含两类关键参数,可精准管控时钟传播特性。其一为极性控制参数,-positive强制指定路径为上升沿触发,-negative强制为下降沿触发,可手动修正工具误判的时钟边沿极性,保证建立、保持时间计算准确。其二为传播控制参数,-stop_propagation用于阻断无效引脚的时钟传播,常用于MUX选择端、控制端等非时钟通路,避免工具误识别虚假时钟路径。
实际使用中,针对时钟路径MUX导致的non-unate告警,可对MUX选择端施加阻断约束,消除无效时钟分支;针对极性识别错误的生成时钟路径,可手动指定时钟边沿极性,确保主时钟可正常传播至生成时钟节点。该命令是修复时钟路径异常、规范时钟传播、保证STA时序分析精准性的重要兜底约束,需配合规范的时钟定义使用,避免约束冲突导致时序建模错误。
有时候top调用宏(macro)lib时,宏单元内部生成时钟输出到顶层端口,报无主时钟无驱动告警,核心原因是工具无法从顶层主时钟完成跨宏单元溯源,时钟传播、约束或端口识别出现异常;这个需要合到顶层flat去看看核实。
3、Missing 1 created_generated_clock at design object div_clk and clk warning
该告警表示 DC 检测到clk与div_clk存在时钟衍生关系,工具判定div_clk为分频、倍频类生成时钟,但未使用create_generated_clock完成约束定义,属于生成时钟配置缺失问题。若不修复,工具无法识别主时钟与衍生时钟的频率、相位关联,时钟延迟、偏斜、分频关系建模出错,直接导致时序计算失真。
告警主要有四类成因:一是div_clk由clk分频 / 逻辑转换得到,仅对主时钟clk执行create_clock,遗漏生成时钟约束;二是将同源衍生时钟误当作独立时钟,重复使用create_clock定义,违背时钟约束规范;三是时钟传播路径经过组合逻辑、宏单元,工具自动识别为生成时钟,而设计者未配套对应约束;四是端口层级、命名不匹配,已写的生成时钟约束未能正常匹配目标端口。
排查可执行report_clocks查看时钟列表与主从关联,结合check_timing -verbose定位异常节点。标准修复方案为:先在顶层用create_clock定义原始主时钟clk,再通过create_generated_clock,指定-source时钟源引脚、分频系数,完成div_clk约束绑定。
若两路信号为相互独立的原生时钟,则说明工具识别有误,需删除多余衍生判定,统一使用create_clock分别定义。同时核对端口路径与名称,保证约束精准匹配。设计中需区分原生时钟与生成时钟,同源衍生信号必须按规则配置生成时钟约束。修复后重新做时序预检,确保时钟链路建模完整,保障后续综合与时序分析正常运行。
有时候top调用宏(macro)lib时,宏单元内部的主时钟和生成时钟输出到顶层端口,报这个告警,核心原因是工具无法从顶层完成跨宏单元溯源,时钟传播、约束或端口识别出现异常;这个需要合到顶层flat去看看核实。
4、check_no_input_delay
no_input_delay 是 DC 时序预检常见告警,指芯片输入端口未配置 set_input_delay 约束。该参数用于模拟外部电路在时钟沿到来前,数据到达芯片输入引脚的延时,是 IO 路径时序计算的必要条件。缺失该约束后,工具会默认输入延时为 0,时序计算结果偏乐观,流片后极易出现建立时间违规。
告警主要成因:一是人为遗漏约束,未对输入端口添加输入延时;二是端口归类错误,将外部输入信号当成内部信号处理;三是约束层级不对,延时约束写在子模块而非顶层端口,无法生效;四是虚拟端口、测试端口未做特殊豁免,被工具正常检查。
此外需区分 max/min 延时,完整覆盖快慢工艺角,保证时序分析全面。设计规范要求,所有对外输入端口必须配套输入延时约束,模拟板级互连的实际延时。修复后重新运行时序预检,确认告警清除,保证输入路径建立、保持时间计算真实可信,为综合与时序收敛打下基础。
input_delay约束必须绑定时钟参考,但不强制使用虚拟时钟。内部同步输入信号可直接绑定设计真实时钟;而外部异步接口、内外时钟频率相位不一致、纯组合逻辑电路场景,建议采用虚拟时钟作为参考,可规避内部时钟偏斜、抖动带来的约束误差,保证IO时序建模精准,解决no_input_delay时序告警。
5、check unconstrained endpoints
unconstrained endpoints是 DC 时序预检告警,代表寄存器、输出端口等时序终点缺少完整时序约束,工具无法开展建立、保持时间检查。常见诱因包括顶层输出端口未配置set_output_delay、终点寄存器无有效时钟、跨时钟域 / 组合路径未做约束,或是端口与引脚路径名称错误导致约束失效。
该问题会让工具跳过对应路径的时序优化与校验,时序分析结果失真,流片后易出现传输超时、功能异常。可通过check_timing -verbose、report_endpoints -unconstrained定位问题节点。常规输出端口需结合真实或虚拟时钟补充输出延时;内部寄存器要补全时钟约束;异步路径可设置伪路径豁免,时序宽松场景可配置多周期路径,修复后重新完成时序预检即可。
6、check loop
check loop 代表设计存在逻辑闭环,分为纯组合环路与时序环路,多由代码连线错误或功能性反馈电路导致。组合环路会造成信号震荡、逻辑出错,同时让工具无法完成时序计算与优化。可通过 report_loops 定位具体环路路径。若是失误产生的无效环路,需修改 RTL 并插入寄存器切断闭环;锁存器、状态机等必要反馈环路,可添加伪路径命令豁免时序检查。振荡器等特殊电路,搭配 dont_touch 保护设计,确保电路功能正常、时序预检通过。
状态机本质是时序反馈系统,依靠寄存器保存当前状态,再通过组合逻辑译码产生下一状态,最终反馈回寄存器输入端,天然形成闭环路径,因此check_timing会识别出环路。
7、check pulse_clock_cell_type
checking pulse_clock_cell_type ,用于校验脉冲时钟单元约束与工艺库类型是否匹配。告警多因旧版脚本残留、约束与库定义不一致,或误用脉冲时钟命令导致。该告警风险较低,不影响常规时序检查,仅提示脉冲配置异常。修复优先直接移除无用的 set_pulse_clock_cell 约束;若需脉冲时钟,确保指定单元与库 pulse_type 匹配。
min_pulse_width 检查不覆盖所有时序器件,仅针对时钟 / 控制引脚且工艺库定义了 min_pulse_width_high/low 或 min_width 属性的单元。主要包括触发器 / 锁存器时钟引脚、异步置复位引脚、存储器时钟与控制引脚,以及脉冲时钟单元输出引脚。组合逻辑、普通数据引脚、无对应库属性的时序引脚均不检查。普通触发器时钟引脚默认自动纳入检查;脉冲锁存设计需用 set_pulse_clock_cell 标记发生器单元以强化检查。
脉冲时钟单元就是产生这种窄脉冲时钟的标准单元,库中会标注 pulse_type、min_pulse_width 等属性。
8、check no_driving_cell
no_driving_cell是Design Compiler时序检查的常见项,主要针对顶层输入端口、黑盒输出等外部驱动信号。该告警表示信号线缺少set_driving_cell约束,工具未获取到真实驱动单元模型,无法得到准确的驱动电阻、转换斜率等电气参数。
该检查的核心目的是保障时序与串扰分析精度。线网串扰延迟、噪声干扰的计算高度依赖驱动端输出电阻与线网寄生参数,若采用默认理想驱动模型,会导致时序计算失真、串扰分析失效,无法真实反映芯片实际工况。需要区分set_drive与set_driving_cell,前者为理想电阻模型,后者绑定工艺库真实单元,建模精度更高,是串扰分析的必备约束。
告警常出现在未配置驱动模型的顶层输入、黑盒输出端口。工程修复需根据信号类型,为端口匹配BUF、INV等标准驱动单元并添加约束,时钟信号优先选用高驱动能力单元。该问题不可随意忽略,否则会造成时序结果偏差,掩盖流片后电路稳定性风险。
9、check partial_input_delay
partial_input_delay是Design Compiler的默认时序检查项,用于检测输入端口input_delay约束不完整的问题。区别于完全无约束的no_input_delay,该告警特指端口已配置部分延时约束,但参数缺失,常见为仅配置max/min延时、或仅设置rise/fall单边边沿延时,导致约束不完整。
该检查核心是保障STA时序分析精准性。建立时间时序检查依赖最大输入延时,保持时间依赖最小输入延时,同时电路上升、下降沿的实际延时存在差异,任意参数缺失都会导致对应时序分析失效。工具会自动补全默认参数,造成时序计算结果偏差,掩盖潜在时序风险,引发芯片流片后接口时序失效。
工程中需为输入端口配置完整约束,补齐max、min以及rise、fall四类延时参数,保证时序建模贴合真实工况。可通过指令单独筛查该类告警,禁止随意忽略该检查,避免因约束不全导致时序分析结果失真,保障设计时序收敛与芯片工作稳定性。
173