【STA】Common Timing Constraints

张开发
2026/4/13 6:45:28 15 分钟阅读

分享文章

【STA】Common Timing Constraints
STA 中一些常用的约束set_clock_groupsset_clock_groupsset_clock_groups命令的作用是定义几组时钟然后不对它们之间的 Timing Path 进行时序分析相当于设置了 False Path。基本用法如下set_clock_groups-namestring[-asynchronous[-allow_paths]|-logically_exclusive|-physically_exclusive]-groupclock_list[-group clock_list]...[-comment string]-group clock_list指定一组时钟多次重复使用该选项就可以指定多组时钟。当set_clock_groups命令中多个 groups 被指定时Design 中的每个时钟信号只能出现在其中一个 Clock Group。但是时钟信号可以多次出现在不同的set_clock_groups命令中。-asynchronous指定不同 Clock Groups 的时钟是异步的。(同一个 Clock Group 中的时钟是同步的会进行时序分析)set_clock_groups-asynchronous-group{ClkA}-group{ClkB}### 等价于set_false_path-from[get_clocks ClkA]-to[get_clocks ClkB]set_false_path-from[get_clocks ClkB]-to[get_clocks ClkA]如果命令中只定义了一个 Clock Group那么该 Clock Groups 中的时钟和 Design 中剩下所有的 Clock 都是异步的。set_clock_group在master clock的作用影响默认不会应用于 Generated 时钟上面。需要显式指定 Generated 时钟的同异步关系。如下图所示的时钟结构ClkB 和 ClkDiv1 是同步的, 但与时钟 ClkA 为异步关系。对应的时序约束如下creat_clock-period10-nameClkA[get_ports CLKA]creat_clock-period20-nameClkB[get_ports CLKB]create_generated_clock[get_pins ClkDiv1/OUT]-namedivCLKB-sourceCLKB-divide_by2set_clock_groups-asynchronous-group[get_clocks ClkA]-group[get_clocks{ClkB divClkB}]-allow_paths该选项只能和-asynchronous一起使用作用是对指定的 Clock Groups 之间的路径进行时序分析例如 CDC Path。默认情况下工具不会对 Clock Groups 之间的路径进行时序分析。-logically_exclusive两个 Clock Groups 的时钟之间没有 Timing Path但是它们会在 Design 中同时存在。例如使用 Mux 在两个 Clk 之间进行选择如下图所示。此时可以将 Clk1 和 Clk2 设置为 logically_exclusiveset_clock_groups-logically_exclusive-group[get_clocks Clk1]-group[get_clocks Clk2]但是如果 Mux 之外存在 Clk2 却动的 Flops并且与 ClkOut 时钟驱动的 Flops 之间有 Timing Path这个时候就不能直接将 Clk1 和 Clk2 设置为 logically_exclusive需要创建 Generated Clock然后再设置 logically_exclusivecreate_generated_clk-namegenClk1-sourceMux1/Y-masterClk1 create_generated_clk-namegenClk2-sourceMux1/Y-masterClk2 set_clock_groups-logically_exclusive-group[get_clocks genClk1]-group[genClk2]-physically_exclusive两个 Clock Groups 的时钟不会同时存在例如 Test Clock 和 Func Clock 共用同一个 Input Port。

更多文章