Rail
A net that distributes power. One thing decides its voltage, usually a regulator or the input
connector, and everything needing that voltage taps the same net. PMIC_CORE_3V3 is a rail.
MCU_NRST is not.
flowchart TB
IN(["12 V at the connector"]) --> REG["regulator"]
REG --> RAIL["PMIC_CORE_3V3<br/>one net, many consumers"]
RAIL --> U3["U3 VDD"]
RAIL --> U4["U4 VDD"]
RAIL --> C1["C1, decoupling"]
RAIL -.->|"named for a voltage,<br/>and feeding supply pins"| ROLE["classified as a rail,<br/>so the rail rules can see it"]
The distinction matters because a rail behaves nothing like a signal net. A signal usually has one talker and a listener or two. A rail fans out to dozens of pins, carries the current all of them draw together, and is the number the rest of the board is sized around. So a rule quantified over rails is asking a different question from one quantified over signals, and the engine keeps rail-ness as a role stamped on the net when the design is read.
Here is the part that costs people an afternoon. Nothing in a netlist states that a net is a rail.
The engine has two channels of evidence, the net’s name and the fact that it feeds a power-input pin,
and both are conventions somebody followed rather than measurements. A board that names its rails
function-first, SYS_MAIN or VDD_ANALOG, matches none of the built-in patterns, and every
rail-quantified rule then skips those nets in silence. Declaring the project’s vocabulary under
--conventions is what fixes it, and
rail-not-classified is the rule that tells you the analysis is
running short.
Once a net is classified, a family of rules opens up.
power-input-not-driven asks whether a supply pin is on a rail
that anything actually feeds. rail-nominal-out-of-recommended
compares the voltage a rail’s name declares against what the parts sitting on it accept.
intent-voltage-domain-mismatch and
intent-rail-current-capacity go further and check the
rail against a declaration of what it was meant to be, because at that level there is nothing outside
the design to check against.
A name is a claim rather than a fact, which is worth remembering in both directions. Two spellings of
one rail merge two supplies nobody meant to merge, which is
power-tap-conflict. The zero-volt member of the family is
ground, and it gets its own vocabulary and its own handling.
Where the course teaches it: chapter 1 shows how to spot one from what a resistor connects to, and chapter 8 puts the whole set of them into a tree.