net.pin_count
the number of connections on a net
What it is ¶
net.pin_count(net, count) yields one row per net, pairing the net name with the number of
connections on it. The count is the size of the net’s connection list, so it answers “how many
pins does this net tie together.” Every net gets a row (unlike the partial relations, this one is
total over nets).
For hardware engineers ¶
The connection count tells you a net’s electrical role at a glance:
- A 1-pin net is a stub. One pin wired to nothing else, which usually means a dangling or unfinished connection (unless the pin is an intentional no-connect).
- A 2-pin net is point-to-point. A signal running directly between two parts, the normal case for a discrete link.
- A high-count net is distribution. A rail, a ground, or a clock fanned out to many loads, where “what connects to it” is a distribution question rather than a path.
During a review you query it to find stubs to chase down, or to confirm a net you thought was point-to-point has not quietly grown a large fan-out.
For software engineers ¶
This is the degree of each net node in the design graph: the number of edges incident on the net.
It is a projection over Nets() that reads len(net.Connections), so rows are 1:1 with nets and
the count carries as a number for direct comparison. It is the fan-out primitive the higher-level
relations build on: net.bus_like treats a count above 16 as one of the conditions that make a
net a shared-distribution node the reachability walk must stop at, so net.pin_count is the
measured input behind that threshold.
Go projector ¶
netPinCountFacts in check/facts.go walks Model.Nets() and emits one row per net with the
numeric count set to len(n.Connections). One row per net, always. An empty result means the
design has no nets at all (not that counts were unavailable), since every net yields a count.
Datalog ¶
Every net and its connection count:
net.pin_count(?n, ?c) => ?n, ?c
Filter to the single-pin stubs (the likely-dangling nets), a threshold query that reads the count as a number:
net.pin_count(?n, ?c), ?c < 2 => ?n