Strap

A configuration pin a part reads once, at the instant reset releases, and then never reads again. A resistor ties it to a rail or to ground. The pin’s level at that instant selects which address the part answers to on a shared bus, which source it boots from, how wide its memory interface is, or whatever else the vendor chose to make settable without a register write.

flowchart TB
    A["PHYAD2<br/>resistor to ground"] --> N["read together, MSB first:<br/>0 0 1 = address 1"]
    B["PHYAD1<br/>resistor to ground"] --> N
    C["PHYAD0<br/>resistor to 3V3"] --> N
    N --> D["latched as reset releases,<br/>and never read again"]
    D --> E["the device answers to address 1<br/>on the MDIO bus"]

Straps usually come in groups that read together as one binary number. The datasheet decides which pin carries the high bit, and datasheets differ on it, so the same three resistors encode 1 on one part and 4 on another.

Two properties put strap mistakes in a class of their own. The value is latched and never re-read, so nothing observable at runtime reports what was sampled, and a part configured wrongly simply behaves as a different part. And a strap is a resistor to a rail. On a schematic it is indistinguishable from a pull-up, which exists to hold a line at a defined level. Nothing in the drawing says which of the two you are looking at.

A failure that spans two parts needs a rule most. Imagine two PHYs on one MDIO bus, each strapped to address 1. Each PHY is correct on its own sheet. Every connectivity check passes, every resistor is present and correctly valued, and the bus goes unreliable in a way that reads as noise or marginal timing rather than as a wiring fault. The page showing the first PHY says nothing about the second.

Three rules read it. intent-property-strap catches one net biased to the opposite level from the one it is declared to latch. intent-strap-group reads several nets together and compares the number they encode against the declared one. intent-strap-address-collision is the cross-part case, two devices on one declared bus strapping to the same address. All three need a declaration, because nothing in a netlist marks a resistor as a strap rather than as a pull-up, and nothing states which pin is the high bit.

The course teaches it in What a part reads on the way up in chapter 9, which reaches straps by way of the power tree and the order its rails come up in.