STA path types: in2reg, reg2reg, reg2out, in2out
Every path reported by static timing analysis falls into one of four categories. The class tells you what kind of constraint applies to the path — and, more importantly, whether it is something you can fix in RTL or something the board designer has to fix outside the chip.
The four classes at a glance
Each class is named by its start and end: in
for a primary input or output port, reg for a flip-flop.
So in2reg means "primary input to flip-flop D", and
reg2out means "flip-flop Q to primary output".
| Class | Start | End | Constrained by |
|---|---|---|---|
in2reg |
Primary input | Flip-flop D | Input arrival time + clock period |
reg2reg |
Flip-flop Q | Flip-flop D | Clock period only |
reg2out |
Flip-flop Q | Primary output | Output required time |
in2out |
Primary input | Primary output | External — no clock |
The four classes in detail
in2reg Primary input → flip-flop D
A signal arrives at a chip pin from outside, passes through some combinational logic, and lands at the D pin of a register before the next clock edge. The path has to be short enough that the external signal has time to arrive, propagate, and settle before setup.
The constraint depends on the external driver's arrival time, which RTL Bench does not know. It assumes the input is available at time 0 and reports the path delay from pin to FF.
reg2reg Flip-flop Q → flip-flop D
A signal leaves a register, flows through combinational logic, and is captured by another register on the next clock edge. Both ends are inside the design, so the constraint is simply the clock period.
This is where the interesting timing work happens. The longest
reg2reg path is usually the critical path — the one
that determines your maximum clock frequency. If RTL Bench reports
a 3.42 ns critical path on a design with a 10 ns clock, that is
almost always a reg2reg path.
reg2out Flip-flop Q → primary output
A register drives a signal that leaves the chip through a pin. The constraint is the output required time — the latest the receiving logic expects the signal to arrive.
Like in2reg, this is a chip-boundary constraint. RTL
Bench reports the internal delay from the register to the pin; the
external part of the constraint is not modelled.
in2out Primary input → primary output
A signal comes in through a pin, passes through combinational logic, and leaves through another pin. There is no register on the path. The clock does not constrain it — only the external timing does.
RTL Bench reports the pure combinational delay from input to output. That number is useful, but it does not tell you whether your design closes timing — it tells you how much external delay a signal accumulates in your chip.
Which one to fix first
If RTL Bench reports a violation, look at the class of the worst path. The priority is:
- reg2reg first. This is your maximum achievable clock frequency. If it fails, the design cannot run at the target clock, period. Nothing else matters until this is fixed.
- in2reg and reg2out second. These depend on external constraints. Often the fix is not in the RTL but in the surrounding system — a slower clock, an extra pipeline stage at the boundary, or a relaxed input/output arrival time.
- in2out last. It is combinational and unconstrained by the clock. If it is slow, you have a design smell — a long combinational path with no register — but it will not break timing closure on its own.
in2out, your design has no
registers on its critical structure — which is usually a mistake, not
a signal to optimise.
Common mistakes
Optimising the wrong path
RTL Bench reports the worst path by absolute delay. If your
design has an in2out path with 5 ns of delay and a
reg2reg path with 4.8 ns, both are close, and both will
show up in the results — but they need different fixes. Make sure you
are looking at the class before you start optimising.
Treating in2out as a clock constraint
The slack number for an in2out path is computed against
the same 10 ns clock period as the other classes, but that is not a
real constraint. The number is only useful for comparing one
combinational path against another.
Assuming in2reg means the whole path is internal
in2reg covers the internal logic from the input pin to
the register, but the input signal has to arrive at the pin before
that. RTL Bench does not model the arrival time — it assumes the input
is available at time 0. If your upstream device has a slow output
driver, the real path is longer than RTL Bench reports.
set_input_delay and set_output_delay
constraints. RTL Bench does not read SDC — it uses a fixed 10 ns clock
and assumes zero external delay. Use it for exploration, not for
tape-out.
See also
- Timing analysis (STA) — the parent guide for running STA in RTL Bench.
- Active-low reset — a naming convention that affects how paths are recognised.
- The STA results page — cell counts, per-stage breakdown, and PDK selection.