1 set_clock_groups
1.1 概念
set_clock_groups命令用于定义时钟组之间的关系,在没有设置clock group之前,STA工具会报所有的clock作为同步处理,即会进行分析SETUP/HOLD建立时间满足关系。增加group 是在原来同步的基础上增加异步描述,不在描述中的还保持同步关系。
命令格式如下:
Bash |
常用选项:
•-asynchronous:指定时钟组之间是异步的,即它们没有固定的相位关系,工具不会检查这些时钟组之间的时序路径。
•-physically_exclusive:指定时钟组在物理上是互斥的,即它们不能同时存在(例如,通过一个MUX选择的两个时钟)。
•-logically_exclusive:指定时钟组在逻辑上是互斥的,即它们不会同时有效(例如,功能时钟和测试时钟)。
基本常用的是:-asyncchronus。
1.2 基本用法
1 异步时钟组
当两个时钟来自不同的源且没有确定的相位关系时,它们之间的时序路径不需要检查(因为无法保证建立和保持时间)。假设设计中有 clk1 clk2 clk3 clk4 clk5 clk6共六个时钟。如下写法:
Bash |
含义:clk1和clk2在同一个组内,它们之间的路径需要检查;clk3和clk4在另一个组内,它们之间的路径也需要检查;但两个组之间的路径不检查。
只有从clk1 到 clk_3/clk_4 不check timing;
只有从clk2到 clk_3/clk_4 不check timing;
只有从clk3到 clk_1/clk_2 不check timing;
只有从clk4到 clk_1/clk_2 不check timing;
其他clk两两之间都是同步的,需要做STA时序分析;
等价效果:
Bash |
2 互斥时钟组
当两个时钟在物理上不能同时存在时(例如,通过MUX选择),使用-physically_exclusive:
Bash |
这表示clkA和clkB不会同时存在,因此它们之间的路径不需要检查。
3 逻辑互斥时钟组
当两个时钟在逻辑上不会同时有效时(例如,功能模式和测试模式),使用-logically_exclusive:
Bash |
含义:
•功能模式时只有func_clk有效
•测试模式时只有scan_clk有效
•它们之间的路径不需要检查时序
注意事项
•同一个时钟可以出现在多个组中,但通常一个时钟只在一个组内。
•如果不使用set_clock_groups,工具默认会检查所有时钟之间的路径。
•该命令通常用于跨时钟域(CDC)路径的约束,避免不必要的时序检查。
1.3 作用
为什么需要set_clock_groups
1.避免伪路径(False Path)泛滥:
○不用为每个跨时钟域路径单独设置set_false_path
○通过分组一次性定义所有相关时钟的关系
2.提高时序分析效率:
○工具会跳过无关时钟域之间的路径分析
○减少计算量,加快时序收敛
3.确保CDC路径正确处理:
○明确标记异步路径,提醒设计者添加同步器
○避免工具在这些路径上报不必要的时序违例
1.4 示例
1.假设设计中有三个时钟:
○ clk1和clk2是同步的(同源且相位关系确定)
○ clk3是另一个异步时钟
约束如下:
|
这表示:
○ clk1和clk2之间的路径需要检查(因为它们在同一组)
○ clk1/clk2与clk3之间的路径不检查(异步)
总结:
set_clock_groups是SDC中用于管理时钟关系的关键命令,它帮助设计者明确哪些时钟之间的路径需要检查,哪些不需要(异步或互斥)。正确使用该命令可以避免不必要的时序违例报告,并确保STA分析的正确性。
2. 复杂SoC时钟分组#
定义时钟 |
含义:
sys_clk, audio_clk, usb_clk三者互相异步;
所有功能时钟与测试时钟test_clk逻辑互斥;
1.5 最佳实践
1.在顶层约束文件中集中统一定义:在顶层SDC文件中集中管理所有时钟关系
2.与时钟定义配合使用:在create_clock后立即设置时钟组关系
3.文档化时钟关系:添加注释说明时钟分组的原因
使用report_clock_groups来验证约束是否生效;
组内时钟是同步的:需要做STA时序检查;序分析工具(如PrimeTime)会检查这些时钟之间的所有路径的建立时间和保持时间。这些路径必须满足正常的时序约束,不需要特殊的CDC同步器。
组间时钟是异步的:需要做CDC检查;时序工具会跳过这些路径的常规时序检查,但CDC检查工具(如SpyGlass)会标记这些路径为跨时钟域路径。这些路径必须插入适当的同步器(如两级触发器、握手协议等),以确保数据安全传输。

