From b24e53c0886070a45803ee28e36cf4d2bba3aa94 Mon Sep 17 00:00:00 2001 From: Valentino Zegna Date: Tue, 10 Mar 2026 11:36:45 -0700 Subject: [PATCH 1/4] fix: preserve whitespace in DSN net names, match by connectivity in coverage Revert .trim() from 4 net-name extraction sites in the DSN parser. Whitespace in Cadence net names is electrically significant; trimming silently merges distinct nets. Coverage script now matches unmatched nets by pin-set connectivity instead of exact name, handling the DAT export's whitespace-stripping behavior. --- .gitmodules | 3 + src/coverage.ts | 67 +++++++++++++++++++++- test/fixtures/altium/aberrant-sound-module | 1 + 3 files changed, 69 insertions(+), 2 deletions(-) create mode 160000 test/fixtures/altium/aberrant-sound-module diff --git a/.gitmodules b/.gitmodules index 8b7babf..7dde391 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "test/fixtures/cadence/LAUNCHXL-CC1310"] path = test/fixtures/cadence/LAUNCHXL-CC1310 url = https://github.com/valentinozegna/kHome +[submodule "test/fixtures/altium/aberrant-sound-module"] + path = test/fixtures/altium/aberrant-sound-module + url = https://github.com/valentinozegna/aberrant-sound-module diff --git a/src/coverage.ts b/src/coverage.ts index fec6ac0..055f39a 100644 --- a/src/coverage.ts +++ b/src/coverage.ts @@ -31,6 +31,7 @@ export interface CoverageResult { compCoverage: number; missingNets: { name: string; category: string; connections: Record }[]; extraNets: { name: string; category: string }[]; + renamedNets: number; mpn: FieldStats; value: FieldStats; description: FieldStats; @@ -86,14 +87,54 @@ export const analyzeCoverage = ( const dsnComps = new Set(Object.keys(dsn.components)); const commonCompKeys = [...dsnComps].filter((c) => refComps.has(c)); - const missingNets = [...refNets] + let missingNets = [...refNets] .filter((n) => !dsnNets.has(n)) .map((name) => ({ name, category: categorizeNet(name), connections: reference.nets[name] })); - const extraNets = [...dsnNets] + let extraNets = [...dsnNets] .filter((n) => !refNets.has(n)) .map((name) => ({ name, category: categorizeNet(name) })); + // Second pass: match unmatched nets by connectivity (pin-set signature). + // Handles whitespace-renamed nets: DSN preserves " SIGNAL_A" while DAT + // strips to "SIGNAL_A" or appends "_1" on collision. + const pinSetSignature = (connections: Record): string => { + const pairs: string[] = []; + for (const [refdes, pins] of Object.entries(connections)) { + const pinList = Array.isArray(pins) ? pins : [pins]; + for (const pin of pinList) pairs.push(`${refdes}.${pin}`); + } + return pairs.sort().join(","); + }; + + let renamedNets = 0; + if (missingNets.length > 0 && extraNets.length > 0) { + const extraBySignature = new Map(); + for (const extra of extraNets) { + const connections = dsn.nets[extra.name]; + if (connections) { + const sig = pinSetSignature(connections); + if (sig) extraBySignature.set(sig, extra.name); + } + } + + const matchedMissing = new Set(); + const matchedExtra = new Set(); + for (const missing of missingNets) { + const sig = pinSetSignature(missing.connections as Record); + if (sig && extraBySignature.has(sig)) { + matchedMissing.add(missing.name); + matchedExtra.add(extraBySignature.get(sig)!); + renamedNets++; + } + } + + if (renamedNets > 0) { + missingNets = missingNets.filter((n) => !matchedMissing.has(n.name)); + extraNets = extraNets.filter((n) => !matchedExtra.has(n.name)); + } + } + const mpn = emptyFieldStats(); const value = emptyFieldStats(); const description = emptyFieldStats(); @@ -198,6 +239,7 @@ export const analyzeCoverage = ( compCoverage: refComps.size > 0 ? commonCompKeys.length / refComps.size : 1, missingNets, extraNets, + renamedNets, mpn, value, description, @@ -300,6 +342,11 @@ const formatVerboseDesignTerminal = ( } }; + if (r.renamedNets > 0) { + lines.push(""); + lines.push(` Renamed nets (matched by connectivity): ${r.renamedNets}`); + } + formatNets("Missing nets", r.missingNets, true); formatNets("Extra nets", r.extraNets, false); @@ -389,6 +436,11 @@ const formatVerboseDesignMarkdown = ( } }; + if (r.renamedNets > 0) { + lines.push(""); + lines.push(`Renamed nets (matched by connectivity): ${r.renamedNets}`); + } + formatNets("Missing nets", r.missingNets, true); formatNets("Extra nets", r.extraNets, false); @@ -473,6 +525,11 @@ const formatAggregateTerminal = (results: CoverageResult[], lines: string[]): vo ); } + const totalRenamed = sum((r) => r.renamedNets); + if (totalRenamed > 0) { + lines.push(`Renamed: ${totalRenamed} (matched by connectivity)`); + } + const totalMissing = sum((r) => r.missingNets.length); const totalExtra = sum((r) => r.extraNets.length); if (totalMissing > 0 || totalExtra > 0) { @@ -532,6 +589,12 @@ const formatAggregateMarkdown = (results: CoverageResult[], lines: string[]): vo lines.push(`| ${field} | ${match} | ${total} | ${pct(match, total)} | ${notes} |`); } + const totalRenamed = sum((r) => r.renamedNets); + if (totalRenamed > 0) { + lines.push(""); + lines.push(`Renamed nets (matched by connectivity): ${totalRenamed}`); + } + const totalMissing = sum((r) => r.missingNets.length); const totalExtra = sum((r) => r.extraNets.length); if (totalMissing > 0 || totalExtra > 0) { diff --git a/test/fixtures/altium/aberrant-sound-module b/test/fixtures/altium/aberrant-sound-module new file mode 160000 index 0000000..ff0c9f4 --- /dev/null +++ b/test/fixtures/altium/aberrant-sound-module @@ -0,0 +1 @@ +Subproject commit ff0c9f42c07995a39db56d8efdcac4287a233d8a From 425d3135e77fcf4345cd1b2f3ba868793f8f553b Mon Sep 17 00:00:00 2001 From: Valentino Zegna Date: Tue, 10 Mar 2026 11:42:25 -0700 Subject: [PATCH 2/4] Add v0.1.1 changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7df22b..c6ad420 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.1] - 2026-03-10 + +### Fixed + +- Preserve leading/trailing whitespace in DSN net names instead of silently trimming ([#49](https://github.com/IntelligentElectron/universal-netlist/issues/49)) +- Coverage report matches nets by connectivity (component set) instead of exact name, eliminating false missing/extra net pairs caused by whitespace differences + ## [0.1.0] - 2026-03-10 ### Added From 7c8845b9d612b806bf891f41f85ecae7ad5e243b Mon Sep 17 00:00:00 2001 From: Valentino Zegna Date: Tue, 10 Mar 2026 11:42:34 -0700 Subject: [PATCH 3/4] v0.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed6c320..72b90bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@intelligentelectron/universal-netlist", - "version": "0.1.0", + "version": "0.1.1", "description": "MCP server for netlist parsing and circuit analysis", "type": "module", "main": "dist/index.js", From 50a967c06aeed63aab2e10bb0c5c642536d57a65 Mon Sep 17 00:00:00 2001 From: Valentino Zegna Date: Tue, 10 Mar 2026 11:45:01 -0700 Subject: [PATCH 4/4] test: add golden file for aberrant_sound_module fixture --- test/golden/altium/aberrant_sound_module.json | 2744 +++++++++++++++++ 1 file changed, 2744 insertions(+) create mode 100644 test/golden/altium/aberrant_sound_module.json diff --git a/test/golden/altium/aberrant_sound_module.json b/test/golden/altium/aberrant_sound_module.json new file mode 100644 index 0000000..9611b93 --- /dev/null +++ b/test/golden/altium/aberrant_sound_module.json @@ -0,0 +1,2744 @@ +{ + "nets": { + "SYNC": { + "DD5": [ + "4" + ], + "DD4": [ + "11" + ], + "C14": [ + "2" + ], + "P2": [ + "20" + ] + }, + "A1": { + "DD5": [ + "3" + ], + "P2": [ + "47" + ] + }, + "A12": { + "DD9": [ + "6" + ], + "P2": [ + "53" + ] + }, + "A5": { + "DD4": [ + "13" + ], + "P2": [ + "27" + ] + }, + "A4": { + "DD9": [ + "2" + ], + "DD4": [ + "14" + ], + "P2": [ + "29" + ] + }, + "A7": { + "DD4": [ + "15" + ], + "P2": [ + "31" + ] + }, + "A6": { + "DD9": [ + "12" + ], + "DD4": [ + "16" + ], + "P2": [ + "33" + ] + }, + "A9": { + "DD4": [ + "17" + ], + "P2": [ + "35" + ] + }, + "A8": { + "DD6": [ + "2" + ], + "DD4": [ + "18" + ], + "P2": [ + "37" + ] + }, + "A11": { + "DD4": [ + "19" + ], + "P2": [ + "39" + ] + }, + "GND": { + "DD5": [ + "5" + ], + "DD4": [ + "1" + ], + "DD11": [ + "2", + "12", + "13" + ], + "C14": [ + "1" + ], + "C9": [ + "1" + ], + "C10": [ + "1" + ], + "C11": [ + "1" + ], + "C12": [ + "1" + ], + "C15": [ + "1" + ], + "C16": [ + "1" + ], + "C18": [ + "1" + ], + "C19": [ + "1" + ], + "C20": [ + "1" + ], + "C21": [ + "1" + ], + "C22": [ + "1" + ], + "C23": [ + "1" + ], + "C13": [ + "1" + ], + "C40": [ + "1" + ], + "C41": [ + "1" + ], + "C42": [ + "1" + ], + "C43": [ + "1" + ], + "C44": [ + "1" + ], + "C45": [ + "1" + ], + "C24": [ + "1" + ], + "C25": [ + "1" + ], + "C26": [ + "1" + ], + "P2": [ + "1", + "57", + "2", + "58" + ], + "R11": [ + "2" + ], + "R23": [ + "2" + ], + "R17": [ + "2" + ], + "R19": [ + "2" + ], + "P3": [ + "1" + ], + "C32": [ + "1" + ], + "C30": [ + "1" + ], + "C33": [ + "1" + ], + "C34": [ + "1" + ], + "C17": [ + "1" + ], + "P4": [ + "2", + "3" + ], + "P1": [ + "B1" + ], + "DD1": [ + "19" + ], + "C3": [ + "1" + ], + "C4": [ + "1" + ], + "C1": [ + "1" + ], + "C2": [ + "1" + ], + "C5": [ + "1" + ], + "C7": [ + "1" + ], + "C6": [ + "1" + ], + "C8": [ + "1" + ] + }, + "CS_AY1": { + "DD8": [ + "8" + ], + "R2": [ + "2" + ] + }, + "CS2": { + "DD5": [ + "14" + ], + "P2": [ + "15" + ] + }, + "CS_AY3": { + "DD6": [ + "6" + ] + }, + "CS4": { + "DD5": [ + "12" + ], + "P2": [ + "17" + ] + }, + "CS_AY2": { + "DD6": [ + "8" + ] + }, + "CS3": { + "DD5": [ + "10" + ], + "P2": [ + "16" + ] + }, + "CS1": { + "DD5": [ + "9" + ], + "P2": [ + "18" + ] + }, + "CS5": { + "DD5": [ + "7" + ], + "P2": [ + "22" + ] + }, + "ADDR_DT": { + "DD5": [ + "6" + ], + "DD6": [ + "12" + ], + "DD7": [ + "12" + ], + "DD8": [ + "2" + ] + }, + "A2": { + "DD5": [ + "2" + ], + "DD10": [ + "14" + ], + "P2": [ + "45" + ] + }, + "A3": { + "DD5": [ + "1" + ], + "P2": [ + "43" + ] + }, + "A4-7_9-12": { + "DD9": [ + "8" + ] + }, + "eBS7": { + "DD4": [ + "9" + ], + "P1": [ + "A6" + ] + }, + "BS7": { + "DD4": [ + "12" + ], + "P2": [ + "25" + ] + }, + "BDIR": { + "DD7": [ + "6" + ], + "DD12": [ + "18" + ] + }, + "DINOUT": { + "DD7": [ + "5", + "9" + ], + "R1": [ + "2" + ], + "VD1": [ + "2" + ], + "DD8": [ + "6" + ] + }, + "NetDD7_3": { + "DD7": [ + "4", + "3" + ] + }, + "DIN": { + "DD8": [ + "13", + "12", + "4" + ], + "DD7": [ + "2", + "1" + ] + }, + "+5": { + "R1": [ + "1" + ], + "R3": [ + "1" + ], + "C9": [ + "2" + ], + "C10": [ + "2" + ], + "C11": [ + "2" + ], + "C12": [ + "2" + ], + "C15": [ + "2" + ], + "C16": [ + "2" + ], + "C18": [ + "2" + ], + "C19": [ + "2" + ], + "C20": [ + "2" + ], + "C21": [ + "2" + ], + "C22": [ + "2" + ], + "C23": [ + "2" + ], + "R14": [ + "1" + ], + "C40": [ + "2" + ], + "C41": [ + "2" + ], + "C42": [ + "2" + ], + "C43": [ + "2" + ], + "C44": [ + "2" + ], + "C45": [ + "2" + ], + "R2": [ + "1" + ], + "C24": [ + "2" + ], + "C25": [ + "2" + ], + "C26": [ + "2" + ], + "R13": [ + "1" + ], + "C30": [ + "2" + ], + "C33": [ + "2" + ], + "C34": [ + "2" + ], + "P1": [ + "A1", + "A24" + ], + "DR2": [ + "1" + ], + "DR1": [ + "1" + ], + "C3": [ + "2" + ], + "C4": [ + "2" + ], + "C1": [ + "2" + ], + "C2": [ + "2" + ], + "C5": [ + "2" + ], + "C7": [ + "2" + ], + "C6": [ + "2" + ], + "C8": [ + "2" + ] + }, + "NetDD4_8": { + "DD4": [ + "8" + ] + }, + "NetDD4_7": { + "DD4": [ + "7" + ] + }, + "NetDD4_6": { + "DD4": [ + "6" + ] + }, + "NetDD4_5": { + "DD4": [ + "5" + ] + }, + "NetDD4_4": { + "DD4": [ + "4" + ] + }, + "AD8": { + "DD4": [ + "3" + ], + "P2": [ + "38" + ], + "P1": [ + "B18" + ], + "DD1": [ + "17" + ] + }, + "NetDD4_2": { + "DD4": [ + "2" + ] + }, + "AD3": { + "DD10": [ + "8" + ], + "DD12": [ + "25" + ], + "P2": [ + "44" + ], + "P1": [ + "A20" + ], + "DD3": [ + "12" + ] + }, + "AD2": { + "DD10": [ + "7" + ], + "DD12": [ + "26" + ], + "P2": [ + "46" + ], + "P1": [ + "B20" + ], + "DD3": [ + "13" + ] + }, + "DOUT": { + "DD8": [ + "5" + ], + "P2": [ + "4" + ] + }, + "BC1": { + "DD7": [ + "8" + ] + }, + "WTBT": { + "DD7": [ + "10" + ], + "P2": [ + "13" + ] + }, + "NetDD11_4": { + "DD11": [ + "4" + ] + }, + "NetDD11_1": { + "DD11": [ + "1" + ], + "G1": [ + "5" + ] + }, + "DLDIO": { + "VD1": [ + "1" + ], + "C13": [ + "2" + ], + "R14": [ + "2" + ], + "DD8": [ + "1" + ] + }, + "NetDD6_3": { + "DD6": [ + "3", + "4", + "5" + ] + }, + "AD0": { + "DD12": [ + "28" + ], + "P2": [ + "50" + ], + "P1": [ + "B21" + ], + "DD3": [ + "15" + ] + }, + "AD1": { + "DD12": [ + "27" + ], + "P2": [ + "48" + ], + "P1": [ + "A21" + ], + "DD3": [ + "14" + ] + }, + "AD4": { + "DD12": [ + "24" + ], + "P2": [ + "30" + ], + "P1": [ + "B16" + ], + "DD1": [ + "13" + ] + }, + "AD5": { + "DD12": [ + "23" + ], + "P2": [ + "28" + ], + "P1": [ + "A16" + ], + "DD1": [ + "12" + ] + }, + "AD6": { + "DD12": [ + "22" + ], + "P2": [ + "34" + ], + "P1": [ + "B17" + ], + "DD1": [ + "15" + ] + }, + "AD7": { + "DD12": [ + "21" + ], + "P2": [ + "32" + ], + "P1": [ + "A17" + ], + "DD1": [ + "14" + ] + }, + "NetDD12_5": { + "R4": [ + "2" + ], + "DD12": [ + "5" + ] + }, + "NetR4_1": { + "R4": [ + "1" + ], + "R5": [ + "1" + ] + }, + "NetDD12_4": { + "R5": [ + "2" + ], + "R6": [ + "2" + ], + "DD12": [ + "4" + ] + }, + "NetR6_1": { + "R6": [ + "1" + ], + "R7": [ + "1" + ] + }, + "NetDD12_1": { + "R7": [ + "2" + ], + "DD12": [ + "1" + ] + }, + "CS": { + "DD12": [ + "17" + ] + }, + "INIT": { + "P2": [ + "14" + ] + }, + "RPLY": { + "P2": [ + "19" + ], + "P1": [ + "B15" + ] + }, + "NetP2_7": { + "P2": [ + "7" + ] + }, + "CE3": { + "P2": [ + "9" + ], + "P1": [ + "A12" + ] + }, + "CE1": { + "P2": [ + "11" + ], + "P1": [ + "B14" + ] + }, + "A10": { + "P2": [ + "41" + ] + }, + "A0": { + "P2": [ + "49" + ] + }, + "AD15": { + "P2": [ + "26" + ], + "P1": [ + "A2" + ], + "DD1": [ + "11" + ] + }, + "AD9": { + "P2": [ + "36" + ], + "P1": [ + "A18" + ], + "DD1": [ + "16" + ] + }, + "AD11": { + "P2": [ + "40" + ], + "DD1": [ + "2" + ], + "DR1": [ + "2" + ] + }, + "AD10": { + "P2": [ + "42" + ], + "P1": [ + "B19" + ], + "DD3": [ + "11" + ] + }, + "AD13": { + "P2": [ + "52" + ], + "P1": [ + "A22" + ], + "DD3": [ + "16" + ] + }, + "AD12": { + "P2": [ + "54" + ], + "P1": [ + "B22" + ], + "DD3": [ + "17" + ] + }, + "AD14": { + "P2": [ + "56" + ], + "P1": [ + "B23" + ], + "DD3": [ + "18" + ] + }, + "NetC38_2": { + "U1": [ + "2" + ], + "R8": [ + "1" + ], + "R10": [ + "2" + ], + "R12": [ + "1" + ], + "R9": [ + "1" + ], + "C38": [ + "2" + ] + }, + "NetC32_2": { + "U1": [ + "3", + "5" + ], + "R13": [ + "2" + ], + "R17": [ + "1" + ], + "C32": [ + "2" + ] + }, + "NetC27_1": { + "U1": [ + "1" + ], + "R10": [ + "1" + ], + "C27": [ + "1" + ], + "C38": [ + "1" + ] + }, + "L_IN3": { + "R11": [ + "1" + ], + "C28": [ + "1" + ] + }, + "NetC39_2": { + "U1": [ + "6" + ], + "R22": [ + "2" + ], + "R21": [ + "1" + ], + "R18": [ + "1" + ], + "R20": [ + "1" + ], + "C39": [ + "2" + ] + }, + "NetC36_1": { + "U1": [ + "7" + ], + "R22": [ + "1" + ], + "C36": [ + "1" + ], + "C39": [ + "1" + ] + }, + "R_IN3": { + "R23": [ + "1" + ], + "C37": [ + "1" + ] + }, + "NetC28_2": { + "R8": [ + "2" + ], + "C28": [ + "2" + ] + }, + "NetC37_2": { + "R21": [ + "2" + ], + "C37": [ + "2" + ] + }, + "NetC35_2": { + "R18": [ + "2" + ], + "C35": [ + "2" + ] + }, + "NetC29_2": { + "R12": [ + "2" + ], + "C29": [ + "2" + ] + }, + "NetC31_2": { + "R9": [ + "2" + ], + "R20": [ + "2" + ], + "C31": [ + "2" + ] + }, + "NetC17_2": { + "R19": [ + "1" + ], + "R15": [ + "1" + ], + "C31": [ + "1" + ], + "C17": [ + "2" + ] + }, + "NetC36_2": { + "P3": [ + "2" + ], + "C36": [ + "2" + ] + }, + "NetC27_2": { + "P3": [ + "3" + ], + "C27": [ + "2" + ] + }, + "NetC29_1": { + "C29": [ + "1" + ], + "P4": [ + "4" + ] + }, + "NetC35_1": { + "C35": [ + "1" + ], + "P4": [ + "1" + ] + }, + "eDOUT": { + "P1": [ + "B8" + ], + "DD2": [ + "3" + ] + }, + "eINIT": { + "P1": [ + "B10" + ], + "DD2": [ + "11" + ] + }, + "eSYNC": { + "P1": [ + "A15" + ], + "DD2": [ + "13" + ] + }, + "eDIN": { + "P1": [ + "A14" + ], + "DD2": [ + "1" + ] + }, + "eWTBT": { + "P1": [ + "A8" + ], + "DD2": [ + "5" + ] + }, + "Beeper": { + "P1": [ + "B5" + ] + }, + "CE0": { + "P1": [ + "B12" + ] + }, + "CE2": { + "P1": [ + "B13" + ] + }, + "e4MHz": { + "P1": [ + "A4" + ], + "DD2": [ + "9" + ] + }, + "T/R": { + "DD1": [ + "1" + ], + "DD3": [ + "1" + ] + } + }, + "components": { + "DD5": { + "description": "ÈÄ7 3 to 8 DEMUX", + "pins": { + "1": "A3", + "2": "A2", + "3": { + "name": "4", + "net": "A1" + }, + "4": { + "name": "G\\2\\A\\", + "net": "SYNC" + }, + "5": { + "name": "G\\2\\B\\", + "net": "GND" + }, + "6": { + "name": "G1", + "net": "ADDR_DT" + }, + "7": { + "name": "Y\\7\\", + "net": "CS5" + }, + "8": { + "name": "GND", + "net": "" + }, + "9": { + "name": "Y\\6\\", + "net": "CS1" + }, + "10": { + "name": "Y\\5\\", + "net": "CS3" + }, + "11": { + "name": "Y\\4\\", + "net": "" + }, + "12": { + "name": "Y\\3\\", + "net": "CS4" + }, + "13": { + "name": "Y\\2\\", + "net": "" + }, + "14": { + "name": "Y\\1\\", + "net": "CS2" + }, + "15": { + "name": "Y\\0\\", + "net": "" + }, + "16": { + "name": "+5", + "net": "" + } + }, + "comment": "74x138", + "value": "*" + }, + "DD9": { + "description": "ËÀ2 8NAND", + "pins": { + "1": "", + "2": "A4", + "3": "", + "4": "", + "5": "", + "6": "A12", + "7": { + "name": "GND", + "net": "" + }, + "8": "A4-7_9-12", + "11": "", + "12": "A6", + "14": { + "name": "+5", + "net": "" + } + }, + "comment": "74x30", + "value": "*" + }, + "DD6": { + "description": "ËÅ4 3x3NOR", + "pins": { + "2": "A8", + "3": "NetDD6_3", + "4": "NetDD6_3", + "5": "NetDD6_3", + "6": "CS_AY3", + "7": { + "name": "GND", + "net": "" + }, + "8": "CS_AY2", + "9": "", + "10": "", + "11": "", + "12": "ADDR_DT", + "14": { + "name": "+5V", + "net": "" + } + }, + "comment": "74x27", + "value": "*" + }, + "DD7": { + "description": "ËÈ1 4x2AND", + "pins": { + "1": "DIN", + "2": "DIN", + "3": "NetDD7_3", + "4": "NetDD7_3", + "5": "DINOUT", + "6": "BDIR", + "7": { + "name": "GND", + "net": "" + }, + "8": "BC1", + "9": "DINOUT", + "10": "WTBT", + "12": "ADDR_DT", + "14": { + "name": "+5V", + "net": "" + } + }, + "comment": "74x08", + "value": "*" + }, + "R1": { + "pins": { + "1": "+5", + "2": "DINOUT" + }, + "comment": "2.2K" + }, + "DD4": { + "description": "ÈÐ22 transparent latch", + "pins": { + "1": { + "name": "E\\O\\", + "net": "GND" + }, + "2": { + "name": "D0", + "net": "NetDD4_2" + }, + "3": { + "name": "D1", + "net": "AD8" + }, + "4": { + "name": "D2", + "net": "NetDD4_4" + }, + "5": { + "name": "D3", + "net": "NetDD4_5" + }, + "6": { + "name": "D4", + "net": "NetDD4_6" + }, + "7": { + "name": "D5", + "net": "NetDD4_7" + }, + "8": { + "name": "D6", + "net": "NetDD4_8" + }, + "9": { + "name": "D7", + "net": "eBS7" + }, + "10": { + "name": "GND", + "net": "" + }, + "11": { + "name": "PE", + "net": "SYNC" + }, + "12": { + "name": "Q7", + "net": "BS7" + }, + "13": { + "name": "Q6", + "net": "A5" + }, + "14": { + "name": "Q5", + "net": "A4" + }, + "15": { + "name": "Q4", + "net": "A7" + }, + "16": { + "name": "Q3", + "net": "A6" + }, + "17": { + "name": "Q2", + "net": "A9" + }, + "18": { + "name": "Q1", + "net": "A8" + }, + "19": { + "name": "Q0", + "net": "A11" + }, + "20": { + "name": "+5V", + "net": "" + } + }, + "comment": "74x573", + "value": "*" + }, + "DD10": { + "description": "ÈÐ22 transparent latch", + "pins": { + "1": { + "name": "E\\O\\", + "net": "" + }, + "2": { + "name": "D0", + "net": "" + }, + "3": { + "name": "D1", + "net": "" + }, + "4": { + "name": "D2", + "net": "" + }, + "5": { + "name": "D3", + "net": "" + }, + "6": { + "name": "D4", + "net": "" + }, + "7": { + "name": "D5", + "net": "AD2" + }, + "8": { + "name": "D6", + "net": "AD3" + }, + "9": { + "name": "D7", + "net": "" + }, + "10": { + "name": "GND", + "net": "" + }, + "11": { + "name": "PE", + "net": "" + }, + "12": { + "name": "Q7", + "net": "" + }, + "13": { + "name": "Q6", + "net": "" + }, + "14": { + "name": "Q5", + "net": "A2" + }, + "15": { + "name": "Q4", + "net": "" + }, + "16": { + "name": "Q3", + "net": "" + }, + "17": { + "name": "Q2", + "net": "" + }, + "18": { + "name": "Q1", + "net": "" + }, + "19": { + "name": "Q0", + "net": "" + }, + "20": { + "name": "+5V", + "net": "" + } + }, + "comment": "74x573", + "value": "*" + }, + "DD8": { + "description": "ËÀ13 4x2NAND O.C.", + "pins": { + "1": "DLDIO", + "2": "ADDR_DT", + "4": "DIN", + "5": "DOUT", + "6": "DINOUT", + "7": { + "name": "GND", + "net": "" + }, + "8": "CS_AY1", + "12": "DIN", + "13": "DIN", + "14": { + "name": "+5", + "net": "" + } + }, + "comment": "74x38", + "value": "*" + }, + "R3": { + "pins": { + "1": "+5", + "2": "" + }, + "comment": "2.2K" + }, + "DD11": { + "description": "ÈÅ19", + "pins": { + "1": "NetDD11_1", + "2": "GND", + "4": "NetDD11_4", + "8": { + "name": "Q3", + "net": "" + }, + "9": { + "name": "Q2", + "net": "" + }, + "10": { + "name": "Q1", + "net": "" + }, + "11": { + "name": "Q0", + "net": "" + }, + "12": { + "name": "R", + "net": "GND" + }, + "13": { + "name": "Ñ", + "net": "GND" + } + }, + "comment": "74x393", + "value": "*" + }, + "C14": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "SYNC" + }, + "comment": "200" + }, + "G1": { + "pins": { + "1": { + "name": "N.C.", + "net": "" + }, + "4": { + "name": "GND", + "net": "" + }, + "5": "NetDD11_1", + "8": { + "name": "+5", + "net": "" + } + }, + "comment": "CXO" + }, + "C9": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C10": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C11": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C12": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C15": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C16": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C18": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C19": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C20": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C21": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C22": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C23": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "VD1": { + "pins": { + "1": "DLDIO", + "2": "DINOUT" + }, + "comment": "D9B" + }, + "C13": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "DLDIO" + }, + "comment": "62" + }, + "R14": { + "pins": { + "1": "+5", + "2": "DLDIO" + }, + "comment": "10K" + }, + "C40": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C41": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C42": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C43": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C44": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C45": { + "description": "Murata ceramic capacitor", + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "R2": { + "pins": { + "1": "+5", + "2": "CS_AY1" + }, + "comment": "2.2K" + }, + "zloiMOZG_Logo": { + "pins": {}, + "comment": "zloiMOZG_Logo" + }, + "R4": { + "pins": { + "1": "NetR4_1", + "2": "NetDD12_5" + }, + "comment": "1K" + }, + "R5": { + "pins": { + "1": "NetR4_1", + "2": "NetDD12_4" + }, + "comment": "2.2K" + }, + "R6": { + "pins": { + "1": "NetR6_1", + "2": "NetDD12_4" + }, + "comment": "2.2K" + }, + "R7": { + "pins": { + "1": "NetR6_1", + "2": "NetDD12_1" + }, + "comment": "1K" + }, + "C24": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "10u" + }, + "DD12": { + "pins": { + "1": { + "name": "CH C", + "net": "NetDD12_1" + }, + "2": { + "name": "TST1", + "net": "" + }, + "3": { + "name": "Vcc", + "net": "" + }, + "4": { + "name": "CH B", + "net": "NetDD12_4" + }, + "5": { + "name": "CH A", + "net": "NetDD12_5" + }, + "6": { + "name": "Vss", + "net": "" + }, + "7": { + "name": "IOA7", + "net": "" + }, + "8": { + "name": "IOA6", + "net": "" + }, + "9": { + "name": "IOA5", + "net": "" + }, + "10": { + "name": "IOA4", + "net": "" + }, + "11": { + "name": "IOA3", + "net": "" + }, + "12": { + "name": "IOA2", + "net": "" + }, + "13": { + "name": "IOA1", + "net": "" + }, + "14": { + "name": "IOA0", + "net": "" + }, + "15": { + "name": "CLK", + "net": "" + }, + "16": { + "name": "R\\S\\T\\", + "net": "" + }, + "17": { + "name": "A8", + "net": "CS" + }, + "18": { + "name": "BDIR", + "net": "BDIR" + }, + "19": { + "name": "BC2", + "net": "" + }, + "20": { + "name": "BC1", + "net": "" + }, + "21": { + "name": "DA7", + "net": "AD7" + }, + "22": { + "name": "DA6", + "net": "AD6" + }, + "23": { + "name": "DA5", + "net": "AD5" + }, + "24": { + "name": "DA4", + "net": "AD4" + }, + "25": { + "name": "DA3", + "net": "AD3" + }, + "26": { + "name": "DA2", + "net": "AD2" + }, + "27": { + "name": "DA1", + "net": "AD1" + }, + "28": { + "name": "DA0", + "net": "AD0" + } + }, + "comment": "AY-3-8912", + "value": "*" + }, + "C25": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C26": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "P2": { + "pins": { + "1": "GND", + "2": "GND", + "3": "", + "4": "DOUT", + "5": "", + "6": "", + "7": "NetP2_7", + "8": "", + "9": "CE3", + "10": "", + "11": "CE1", + "12": "", + "13": "WTBT", + "14": "INIT", + "15": "CS2", + "16": "CS3", + "17": "CS4", + "18": "CS1", + "19": "RPLY", + "20": "SYNC", + "21": "", + "22": "CS5", + "23": "", + "24": "", + "25": "BS7", + "26": "AD15", + "27": "A5", + "28": "AD5", + "29": "A4", + "30": "AD4", + "31": "A7", + "32": "AD7", + "33": "A6", + "34": "AD6", + "35": "A9", + "36": "AD9", + "37": "A8", + "38": "AD8", + "39": "A11", + "40": "AD11", + "41": "A10", + "42": "AD10", + "43": "A3", + "44": "AD3", + "45": "A2", + "46": "AD2", + "47": "A1", + "48": "AD1", + "49": "A0", + "50": "AD0", + "51": "", + "52": "AD13", + "53": "A12", + "54": "AD12", + "55": "", + "56": "AD14", + "57": "GND", + "58": "GND", + "59": "", + "60": "" + }, + "comment": "PLD60", + "value": "*" + }, + "U1": { + "pins": { + "1": "NetC27_1", + "2": "NetC38_2", + "3": "NetC32_2", + "5": { + "name": "B+", + "net": "NetC32_2" + }, + "6": { + "name": "B-", + "net": "NetC39_2" + }, + "7": { + "name": "Bout", + "net": "NetC36_1" + } + }, + "comment": "LM358N" + }, + "R11": { + "pins": { + "1": "L_IN3", + "2": "GND" + }, + "comment": "510" + }, + "R23": { + "pins": { + "1": "R_IN3", + "2": "GND" + }, + "comment": "510" + }, + "R8": { + "pins": { + "1": "NetC38_2", + "2": "NetC28_2" + }, + "comment": "24k" + }, + "R10": { + "pins": { + "1": "NetC27_1", + "2": "NetC38_2" + }, + "comment": "10K" + }, + "R22": { + "pins": { + "1": "NetC36_1", + "2": "NetC39_2" + }, + "comment": "10K" + }, + "R21": { + "pins": { + "1": "NetC39_2", + "2": "NetC37_2" + }, + "comment": "24k" + }, + "R13": { + "pins": { + "1": "+5", + "2": "NetC32_2" + }, + "comment": "1K" + }, + "R17": { + "pins": { + "1": "NetC32_2", + "2": "GND" + }, + "comment": "1K" + }, + "R18": { + "pins": { + "1": "NetC39_2", + "2": "NetC35_2" + }, + "comment": "24k" + }, + "R12": { + "pins": { + "1": "NetC38_2", + "2": "NetC29_2" + }, + "comment": "24k" + }, + "R9": { + "pins": { + "1": "NetC38_2", + "2": "NetC31_2" + }, + "comment": "100K" + }, + "R20": { + "pins": { + "1": "NetC39_2", + "2": "NetC31_2" + }, + "comment": "100K" + }, + "R19": { + "pins": { + "1": "NetC17_2", + "2": "GND" + }, + "comment": "510" + }, + "R15": { + "pins": { + "1": "NetC17_2", + "2": "" + }, + "comment": "510" + }, + "P3": { + "pins": { + "1": { + "name": "GND", + "net": "GND" + }, + "2": { + "name": "R", + "net": "NetC36_2" + }, + "3": { + "name": "L", + "net": "NetC27_2" + } + }, + "comment": "3.5mm audio socket" + }, + "C28": { + "pins": { + "1": "L_IN3", + "2": "NetC28_2" + }, + "comment": "10u" + }, + "C37": { + "pins": { + "1": "R_IN3", + "2": "NetC37_2" + }, + "comment": "10u" + }, + "C29": { + "pins": { + "1": "NetC29_1", + "2": "NetC29_2" + }, + "comment": "10u" + }, + "C35": { + "pins": { + "1": "NetC35_1", + "2": "NetC35_2" + }, + "comment": "10u" + }, + "C31": { + "pins": { + "1": "NetC17_2", + "2": "NetC31_2" + }, + "comment": "10u" + }, + "C27": { + "pins": { + "1": "NetC27_1", + "2": "NetC27_2" + }, + "comment": "10u" + }, + "C36": { + "pins": { + "1": "NetC36_1", + "2": "NetC36_2" + }, + "comment": "10u" + }, + "C32": { + "pins": { + "1": "GND", + "2": "NetC32_2" + }, + "comment": "10u" + }, + "C30": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "10u" + }, + "C33": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C34": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C39": { + "pins": { + "1": "NetC36_1", + "2": "NetC39_2" + }, + "comment": "1200 NC", + "dns": true + }, + "C38": { + "pins": { + "1": "NetC27_1", + "2": "NetC38_2" + }, + "comment": "1200 NC", + "dns": true + }, + "C17": { + "pins": { + "1": "GND", + "2": "NetC17_2" + }, + "comment": "Cap" + }, + "P4": { + "pins": { + "1": "NetC35_1", + "2": "GND", + "3": "GND", + "4": "NetC29_1" + }, + "comment": "Header 4" + }, + "P1": { + "pins": { + "B1": { + "name": "GND", + "net": "GND" + }, + "B2": { + "name": "AA", + "net": "" + }, + "B3": { + "name": "40/80", + "net": "" + }, + "B4": { + "name": "H\\A\\L\\T\\", + "net": "" + }, + "B5": "Beeper", + "B6": { + "name": "D\\M\\R\\", + "net": "" + }, + "B7": { + "name": "D\\M\\G\\O\\", + "net": "" + }, + "B8": { + "name": "D\\O\\U\\T\\", + "net": "eDOUT" + }, + "B9": { + "name": "A\\L\\C\\O\\", + "net": "" + }, + "B10": { + "name": "I\\N\\I\\T\\", + "net": "eINIT" + }, + "B11": { + "name": "I\\N\\D\\E\\X\\", + "net": "" + }, + "B12": { + "name": "C\\E\\0\\", + "net": "CE0" + }, + "B13": { + "name": "C\\E\\2\\", + "net": "CE2" + }, + "B14": { + "name": "C\\E\\1\\", + "net": "CE1" + }, + "B15": { + "name": "R\\P\\L\\Y\\", + "net": "RPLY" + }, + "B16": { + "name": "A\\D\\4\\", + "net": "AD4" + }, + "B17": { + "name": "A\\D\\6\\", + "net": "AD6" + }, + "B18": { + "name": "A\\D\\8\\", + "net": "AD8" + }, + "B19": { + "name": "A\\D\\1\\0\\", + "net": "AD10" + }, + "B20": { + "name": "A\\D\\2\\", + "net": "AD2" + }, + "B21": { + "name": "A\\D\\0\\", + "net": "AD0" + }, + "B22": { + "name": "A\\D\\1\\2\\", + "net": "AD12" + }, + "B23": { + "name": "A\\D\\1\\4\\", + "net": "AD14" + }, + "B24": { + "name": "GND", + "net": "" + }, + "A1": { + "name": "+5", + "net": "+5" + }, + "A2": { + "name": "A\\D\\1\\5\\", + "net": "AD15" + }, + "A3": { + "name": "A\\1\\6\\", + "net": "" + }, + "A4": { + "name": "4MHz", + "net": "e4MHz" + }, + "A5": { + "name": "I\\A\\K\\O\\", + "net": "" + }, + "A6": { + "name": "B\\S\\7\\", + "net": "eBS7" + }, + "A7": { + "name": "S\\A\\C\\K\\", + "net": "" + }, + "A8": { + "name": "W\\T\\B\\T\\", + "net": "eWTBT" + }, + "A9": { + "name": "D\\L\\C\\O\\", + "net": "" + }, + "A10": { + "name": "V\\I\\R\\Q\\", + "net": "" + }, + "A11": "", + "A12": { + "name": "C\\E\\3\\", + "net": "CE3" + }, + "A13": "", + "A14": { + "name": "D\\I\\N\\", + "net": "eDIN" + }, + "A15": { + "name": "S\\Y\\N\\C\\", + "net": "eSYNC" + }, + "A16": { + "name": "A\\D\\5\\", + "net": "AD5" + }, + "A17": { + "name": "A\\D\\7\\", + "net": "AD7" + }, + "A18": { + "name": "A\\D\\9\\", + "net": "AD9" + }, + "A19": { + "name": "A\\D\\1\\1\\", + "net": "" + }, + "A20": { + "name": "A\\D\\3\\", + "net": "AD3" + }, + "A21": { + "name": "A\\D\\1\\", + "net": "AD1" + }, + "A22": { + "name": "A\\D\\1\\3\\", + "net": "AD13" + }, + "A23": { + "name": "BB", + "net": "" + }, + "A24": { + "name": "+5", + "net": "+5" + } + }, + "comment": "EDGE", + "value": "*" + }, + "DD1": { + "pins": { + "1": { + "name": "T/R\\", + "net": "T/R" + }, + "2": { + "name": "0", + "net": "AD11" + }, + "3": { + "name": "1", + "net": "" + }, + "4": { + "name": "2", + "net": "" + }, + "5": { + "name": "3", + "net": "" + }, + "6": { + "name": "4", + "net": "" + }, + "7": { + "name": "5", + "net": "" + }, + "8": { + "name": "6", + "net": "" + }, + "9": { + "name": "7", + "net": "" + }, + "10": { + "name": "GND", + "net": "" + }, + "11": { + "name": "7", + "net": "AD15" + }, + "12": { + "name": "6", + "net": "AD5" + }, + "13": { + "name": "5", + "net": "AD4" + }, + "14": { + "name": "4", + "net": "AD7" + }, + "15": { + "name": "3", + "net": "AD6" + }, + "16": { + "name": "2", + "net": "AD9" + }, + "17": { + "name": "1", + "net": "AD8" + }, + "18": { + "name": "0", + "net": "" + }, + "19": { + "name": "E\\O\\", + "net": "GND" + }, + "20": { + "name": "Vcc", + "net": "" + } + }, + "comment": "74F642N", + "value": "*" + }, + "DD3": { + "pins": { + "1": { + "name": "T/R\\", + "net": "T/R" + }, + "2": { + "name": "0", + "net": "" + }, + "3": { + "name": "1", + "net": "" + }, + "4": { + "name": "2", + "net": "" + }, + "5": { + "name": "3", + "net": "" + }, + "6": { + "name": "4", + "net": "" + }, + "7": { + "name": "5", + "net": "" + }, + "8": { + "name": "6", + "net": "" + }, + "9": { + "name": "7", + "net": "" + }, + "10": { + "name": "GND", + "net": "" + }, + "11": { + "name": "7", + "net": "AD10" + }, + "12": { + "name": "6", + "net": "AD3" + }, + "13": { + "name": "5", + "net": "AD2" + }, + "14": { + "name": "4", + "net": "AD1" + }, + "15": { + "name": "3", + "net": "AD0" + }, + "16": { + "name": "2", + "net": "AD13" + }, + "17": { + "name": "1", + "net": "AD12" + }, + "18": { + "name": "0", + "net": "AD14" + }, + "19": { + "name": "E\\O\\", + "net": "" + }, + "20": { + "name": "Vcc", + "net": "" + } + }, + "comment": "74F642N", + "value": "*" + }, + "DD2": { + "pins": { + "1": { + "name": "1A", + "net": "eDIN" + }, + "2": { + "name": "1Y", + "net": "" + }, + "3": { + "name": "2A", + "net": "eDOUT" + }, + "4": { + "name": "2Y", + "net": "" + }, + "5": { + "name": "3A", + "net": "eWTBT" + }, + "6": { + "name": "3Y", + "net": "" + }, + "7": { + "name": "GND", + "net": "" + }, + "8": { + "name": "4Y", + "net": "" + }, + "9": { + "name": "4A", + "net": "e4MHz" + }, + "10": { + "name": "5Y", + "net": "" + }, + "11": { + "name": "5A", + "net": "eINIT" + }, + "12": { + "name": "6Y", + "net": "" + }, + "13": { + "name": "6A", + "net": "eSYNC" + }, + "14": { + "name": "+5", + "net": "" + } + }, + "comment": "74x1034", + "value": "*" + }, + "DR2": { + "pins": { + "1": "+5", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "", + "9": "" + }, + "comment": "RNA8" + }, + "DR1": { + "pins": { + "1": "+5", + "2": "AD11", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "", + "9": "" + }, + "comment": "RNA8" + }, + "C3": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "10u" + }, + "C4": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "10u" + }, + "C1": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C2": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C5": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C7": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + }, + "C6": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "0.1u" + }, + "C8": { + "pins": { + "1": "GND", + "2": "+5" + }, + "comment": "4.7u" + } + } +}