Rename the power-adjacent category to "power management"

"Adjacent" read as jargon; "power management" is the standard EE umbrella
for enable/power-good/sense/fault/seq signals (cf. PMIC). Renamed across
the board: NameVerdict::PowerMgmt, stats/LoadResult field `mgmt`, analyze
tag [Power mgmt] + header "Pwr-mgmt" + glossary, load lines now say
"power-management (control/measure — kept as Other)" (TUI / script / wx
kept in sync).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 18:21:25 +02:00
parent e914c84c18
commit 9cf43696a2
12 changed files with 64 additions and 62 deletions

View File

@@ -235,7 +235,7 @@ TEST_CASE("infer_signal_types: Power requires name+structural agreement") {
Signal *p_3v3 = m->signals->merge("PWR_3V3"); fan_out(p_3v3, 3); // voltage + ≥ floor → Power
Signal *vcc = m->signals->merge("VCC"); fan_out(vcc, 5); // fan-out ≥ 4 → Power
Signal *pwr_ok = m->signals->merge("PWR_OK"); fan_out(pwr_ok, 1); // control token → adjacent
Signal *pwr_ok = m->signals->merge("PWR_OK"); fan_out(pwr_ok, 1); // control token → pwr-mgmt
Signal *pwr_2 = m->signals->merge("PWR_2"); fan_out(pwr_2, 2); // < 3 → hard floor → Other
Signal *gnd = m->signals->merge("GND"); fan_out(gnd, 1); // gnd: name alone
Signal *clk = m->signals->merge("CLK_50MHZ"); fan_out(clk, 3); // not power-ish → Other
@@ -244,7 +244,7 @@ TEST_CASE("infer_signal_types: Power requires name+structural agreement") {
CHECK(st.power == 2); // PWR_3V3, VCC
CHECK(st.gnd == 1); // GND (name alone)
CHECK(st.kept_other == 1); // PWR_2 below the hard floor
CHECK(st.adjacent == 1); // PWR_OK: power-good control, not suspect
CHECK(st.mgmt == 1); // PWR_OK: power-good control, not suspect
CHECK(p_3v3->type == SignalType::Power);
CHECK(vcc->type == SignalType::Power);
@@ -254,14 +254,14 @@ TEST_CASE("infer_signal_types: Power requires name+structural agreement") {
CHECK(clk->type == SignalType::Other);
}
TEST_CASE("infer_signal_types: power-adjacent beats fan-out — a big sense net is still Other") {
TEST_CASE("infer_signal_types: power-management beats fan-out — a big sense net is still Other") {
auto sys = std::make_unique<System>();
Module *m = sys->modules()->merge("M");
Part *p = new Part("U1"); m->add(p);
// VDD_CORE_SENSE with fan-out 5: structure alone would confirm Power,
// but the control token settles it as a measurement net → Other,
// counted adjacent (not suspect, not power).
// counted mgmt (not suspect, not power).
Signal *s = m->signals->merge("VDD_CORE_SENSE");
for (int i = 0; i < 5; ++i) {
Pin *pin = new Pin("p" + std::to_string(i));
@@ -271,7 +271,7 @@ TEST_CASE("infer_signal_types: power-adjacent beats fan-out — a big sense net
auto st = infer_signal_types(sys.get());
CHECK(st.power == 0);
CHECK(st.kept_other == 0);
CHECK(st.adjacent == 1);
CHECK(st.mgmt == 1);
CHECK(s->type == SignalType::Other);
}

View File

@@ -51,40 +51,40 @@ TEST_CASE("infer_signal_type: power family") {
CHECK(infer_signal_type("VS3_5V0") == SignalType::Power);
CHECK(infer_signal_type("+5V") == SignalType::Power);
CHECK(infer_signal_type("-12V") == SignalType::Power);
// Rail token + control token → power-adjacent, mapped to Other by the
// Rail token + control token → power-management, mapped to Other by the
// wrapper (it is a sense line ABOUT VBAT, not the rail).
CHECK(infer_signal_type("VBAT_SENSE") == SignalType::Other);
}
TEST_CASE("classify_signal_name: rail vs power-adjacent control signals") {
TEST_CASE("classify_signal_name: rail vs power-management signals") {
CHECK(classify_signal_name("VCC").verdict == NameVerdict::Rail);
CHECK(classify_signal_name("VDD_3V3").verdict == NameVerdict::Rail);
CHECK(classify_signal_name("+5V").verdict == NameVerdict::Rail);
NameClassification c = classify_signal_name("VDD_CORE_SENSE");
CHECK(c.verdict == NameVerdict::PowerAdjacent);
CHECK(c.verdict == NameVerdict::PowerMgmt);
CHECK(c.token == "SENSE");
CHECK(classify_signal_name("VBAT_SENSE").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VCC_EN").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VCC_EN1").verdict == NameVerdict::PowerAdjacent); // trailing digit
CHECK(classify_signal_name("VDD_FB").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("PWR_GOOD").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("PWR_OK").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VBUS_DET").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("POWER_FAIL").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VDD_VSENSE").verdict == NameVerdict::PowerAdjacent); // fused suffix
CHECK(classify_signal_name("PWR_NFAULT").verdict == NameVerdict::PowerAdjacent); // active-low
CHECK(classify_signal_name("VDD_ADJ").verdict == NameVerdict::PowerAdjacent); // regulator adjust
CHECK(classify_signal_name("VCC_TRIM").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VDD_VTRIM").verdict == NameVerdict::PowerAdjacent); // fused suffix
CHECK(classify_signal_name("VCC_VSET").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VCC_FBK").verdict == NameVerdict::PowerAdjacent); // feedback variants
CHECK(classify_signal_name("VDD_FDB").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("PWR_CMD").verdict == NameVerdict::PowerAdjacent); // command
CHECK(classify_signal_name("PWR_LED").verdict == NameVerdict::PowerAdjacent); // indicator
CHECK(classify_signal_name("VDD_REF").verdict == NameVerdict::PowerAdjacent); // reference
CHECK(classify_signal_name("VCC_VREF").verdict == NameVerdict::PowerAdjacent);
CHECK(classify_signal_name("VBAT_SENSE").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VCC_EN").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VCC_EN1").verdict == NameVerdict::PowerMgmt); // trailing digit
CHECK(classify_signal_name("VDD_FB").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("PWR_GOOD").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("PWR_OK").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VBUS_DET").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("POWER_FAIL").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VDD_VSENSE").verdict == NameVerdict::PowerMgmt); // fused suffix
CHECK(classify_signal_name("PWR_NFAULT").verdict == NameVerdict::PowerMgmt); // active-low
CHECK(classify_signal_name("VDD_ADJ").verdict == NameVerdict::PowerMgmt); // regulator adjust
CHECK(classify_signal_name("VCC_TRIM").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VDD_VTRIM").verdict == NameVerdict::PowerMgmt); // fused suffix
CHECK(classify_signal_name("VCC_VSET").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("VCC_FBK").verdict == NameVerdict::PowerMgmt); // feedback variants
CHECK(classify_signal_name("VDD_FDB").verdict == NameVerdict::PowerMgmt);
CHECK(classify_signal_name("PWR_CMD").verdict == NameVerdict::PowerMgmt); // command
CHECK(classify_signal_name("PWR_LED").verdict == NameVerdict::PowerMgmt); // indicator
CHECK(classify_signal_name("VDD_REF").verdict == NameVerdict::PowerMgmt); // reference
CHECK(classify_signal_name("VCC_VREF").verdict == NameVerdict::PowerMgmt);
// Whole-token matching: SENSOR is not SENSE, GREEN is not EN —
// these stay genuine rails.