component.probed_one
A two-terminal part with a test point on exactly one of its nets, naming the probed net and then the other, which is where a missing test point would go.
What it is ¶
component.probed_one(part, probed, unprobed) yields one row per two-terminal part with a test
point on exactly one of its two nets, naming the net that has one and then the net that does not.
For hardware engineers ¶
These are the cheapest coverage to win back. In-circuit test needs both of a part’s nodes, and these
parts already have one, so a single test point on unprobed makes the part measurable. When several
parts share the same unprobed net, one test point there recovers all of them, so group by that
column.
For software engineers ¶
It is component.two_terminal with exactly one side passing net.has_test_point. The relation is
defined by two clauses, one per orientation of the pair, because two_terminal orders its nets by
name and the probed net can be either one. Each part answers once, since exactly one of the two
clauses can hold for it.
Datalog ¶
Which unprobed nets would recover the most parts:
component.probed_one(?r, ?p, ?u) => ?u, count(?r), list(?r)
The same list with part numbers, as the netlist audit shows it:
component.probed_one(?r, ?p, ?u), component.mpn(?r, ?mpn) => ?mpn, ?r, ?p, ?u
How it is defined ¶
component.probed_one(r: component, probed: net, unprobed: net), a derived relation in the component module, defined in Datalog in stdlib/lib/component.dl. In a clause, a bare name is another member of the same module and a dotted name is a full path.
probed_one(?r: component, ?probed: net, ?unprobed: net) :- two_terminal(?r, ?probed, ?unprobed), net.has_test_point(?probed), not net.has_test_point(?unprobed);
probed_one(?r, ?probed, ?unprobed) :- two_terminal(?r, ?unprobed, ?probed), net.has_test_point(?probed), not net.has_test_point(?unprobed);
agni query --relations component.probed_one prints the same definition. Adding a library member explains how the library is built.