Feature · Clock Intelligence
Ṛta builds a complete map of every clock in your design, from primary to generated to virtual, and checks that the clock groups in your SDC match physical reality.
In plain words
Timing analysis works clock by clock. For STA to be correct, every clock must be defined, every generated clock must trace back to its master, and every pair of clocks must be declared in the right kind of clock group. Ṛta checks all of that automatically.
Clocks fall into three kinds, and Ṛta tracks all of them:
$ rta analyze clock-relations top.sdc
Clocks: 4 (2 primary, 2 generated)
Pairs: 6 · Sync: 3 · Async: 2 · Exclusive: 1
▲ SDC-060 clk_1x vs clk_2x - marked -asynchronous
both primary on port clk_dual, 5.0 / 2.5 ns
→ use -physically_exclusive instead
Real-world example
A port clk_dual can carry either a 5.0ns or a 2.5ns clock; only one is active at a time. The engineer declares them -asynchronous. That is wrong: asynchronous tells STA to analyze crosstalk and SI on paths that can never exist together. It should be -physically_exclusive.
| Pair | Declared | Verdict |
|---|---|---|
| clk_core → clk_axi | -asynchronous | OK |
| clk_1x → clk_2x | -asynchronous | MISMATCH |
| clk_fast → div2 | synchronous | OK |
| clk_scan → clk_core | ungrouped | MISSING |
An incorrect clock group makes STA spend effort on impossible paths or skip real ones.
Periods derived from -divide_by / -multiply_by / -edges are computed and sanity-checked.
Ṛta maps clock structure; it never claims to do timing propagation. That stays with STA.
Try it