@modular-circuit/perc 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/build/erc/connect_graph_visitor/index.d.ts +2 -0
  4. package/build/erc/connect_graph_visitor/index.d.ts.map +1 -0
  5. package/build/erc/connect_graph_visitor/index.js +1 -0
  6. package/build/erc/connect_graph_visitor/visitor.d.ts +5 -0
  7. package/build/erc/connect_graph_visitor/visitor.d.ts.map +1 -0
  8. package/build/erc/connect_graph_visitor/visitor.js +0 -0
  9. package/build/erc/context/connection_graph_builder_ctx.d.ts +7 -0
  10. package/build/erc/context/connection_graph_builder_ctx.d.ts.map +1 -0
  11. package/build/erc/context/connection_graph_builder_ctx.js +0 -0
  12. package/build/erc/context/error_severity.d.ts +11 -0
  13. package/build/erc/context/error_severity.d.ts.map +1 -0
  14. package/build/erc/context/error_severity.js +13 -0
  15. package/build/erc/context/graph.d.ts +3 -0
  16. package/build/erc/context/graph.d.ts.map +1 -0
  17. package/build/erc/context/graph.js +0 -0
  18. package/build/erc/context/graph_converter.d.ts +8 -0
  19. package/build/erc/context/graph_converter.d.ts.map +1 -0
  20. package/build/erc/context/graph_converter.js +0 -0
  21. package/build/erc/context/index.d.ts +6 -0
  22. package/build/erc/context/index.d.ts.map +1 -0
  23. package/build/erc/context/index.js +5 -0
  24. package/build/erc/context/pin_to_pin_test_ctx.d.ts +7 -0
  25. package/build/erc/context/pin_to_pin_test_ctx.d.ts.map +1 -0
  26. package/build/erc/context/pin_to_pin_test_ctx.js +0 -0
  27. package/build/erc/index.d.ts +5 -0
  28. package/build/erc/index.d.ts.map +1 -0
  29. package/build/erc/index.js +4 -0
  30. package/build/erc/netlist/constraints.d.ts +5 -0
  31. package/build/erc/netlist/constraints.d.ts.map +1 -0
  32. package/build/erc/netlist/constraints.js +30 -0
  33. package/build/erc/netlist/index.d.ts +3 -0
  34. package/build/erc/netlist/index.d.ts.map +1 -0
  35. package/build/erc/netlist/index.js +2 -0
  36. package/build/erc/netlist/tester.d.ts +10 -0
  37. package/build/erc/netlist/tester.d.ts.map +1 -0
  38. package/build/erc/netlist/tester.js +67 -0
  39. package/build/erc/parameter_propagation/error_code.d.ts +41 -0
  40. package/build/erc/parameter_propagation/error_code.d.ts.map +1 -0
  41. package/build/erc/parameter_propagation/error_code.js +74 -0
  42. package/build/erc/parameter_propagation/index.d.ts +3 -0
  43. package/build/erc/parameter_propagation/index.d.ts.map +1 -0
  44. package/build/erc/parameter_propagation/index.js +2 -0
  45. package/build/erc/parameter_propagation/link_testers/index.d.ts +2 -0
  46. package/build/erc/parameter_propagation/link_testers/index.d.ts.map +1 -0
  47. package/build/erc/parameter_propagation/link_testers/index.js +1 -0
  48. package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts +23 -0
  49. package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts.map +1 -0
  50. package/build/erc/parameter_propagation/link_testers/link_tester_base.js +112 -0
  51. package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts +247 -0
  52. package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts.map +1 -0
  53. package/build/erc/parameter_propagation/link_testers/tester_impl.js +1456 -0
  54. package/build/erc/parameter_propagation/tester.d.ts +16 -0
  55. package/build/erc/parameter_propagation/tester.d.ts.map +1 -0
  56. package/build/erc/parameter_propagation/tester.js +215 -0
  57. package/build/erc/pin_compatibility_matrix/erc_setting.d.ts +29 -0
  58. package/build/erc/pin_compatibility_matrix/erc_setting.d.ts.map +1 -0
  59. package/build/erc/pin_compatibility_matrix/erc_setting.js +110 -0
  60. package/build/erc/pin_compatibility_matrix/error_code.d.ts +55 -0
  61. package/build/erc/pin_compatibility_matrix/error_code.d.ts.map +1 -0
  62. package/build/erc/pin_compatibility_matrix/error_code.js +56 -0
  63. package/build/erc/pin_compatibility_matrix/index.d.ts +5 -0
  64. package/build/erc/pin_compatibility_matrix/index.d.ts.map +1 -0
  65. package/build/erc/pin_compatibility_matrix/index.js +4 -0
  66. package/build/erc/pin_compatibility_matrix/pin_error.d.ts +7 -0
  67. package/build/erc/pin_compatibility_matrix/pin_error.d.ts.map +1 -0
  68. package/build/erc/pin_compatibility_matrix/pin_error.js +7 -0
  69. package/build/erc/pin_compatibility_matrix/tester.d.ts +9 -0
  70. package/build/erc/pin_compatibility_matrix/tester.d.ts.map +1 -0
  71. package/build/erc/pin_compatibility_matrix/tester.js +23 -0
  72. package/build/graphics/index.d.ts +3 -0
  73. package/build/graphics/index.d.ts.map +1 -0
  74. package/build/graphics/index.js +2 -0
  75. package/build/graphics/maker/index.d.ts +4 -0
  76. package/build/graphics/maker/index.d.ts.map +1 -0
  77. package/build/graphics/maker/index.js +3 -0
  78. package/build/graphics/maker/maker_base.d.ts +35 -0
  79. package/build/graphics/maker/maker_base.d.ts.map +1 -0
  80. package/build/graphics/maker/maker_base.js +0 -0
  81. package/build/graphics/maker/maker_type.d.ts +10 -0
  82. package/build/graphics/maker/maker_type.d.ts.map +1 -0
  83. package/build/graphics/maker/maker_type.js +10 -0
  84. package/build/graphics/maker/sch_maker.d.ts +5 -0
  85. package/build/graphics/maker/sch_maker.d.ts.map +1 -0
  86. package/build/graphics/maker/sch_maker.js +0 -0
  87. package/build/graphics/sch_erc_item.d.ts +28 -0
  88. package/build/graphics/sch_erc_item.d.ts.map +1 -0
  89. package/build/graphics/sch_erc_item.js +0 -0
  90. package/build/index.d.ts +6 -0
  91. package/build/index.d.ts.map +1 -0
  92. package/build/index.js +5 -0
  93. package/build/report/erc_report.d.ts +16 -0
  94. package/build/report/erc_report.d.ts.map +1 -0
  95. package/build/report/erc_report.js +16 -0
  96. package/build/report/erc_reporter.d.ts +88 -0
  97. package/build/report/erc_reporter.d.ts.map +1 -0
  98. package/build/report/erc_reporter.js +87 -0
  99. package/build/report/index.d.ts +3 -0
  100. package/build/report/index.d.ts.map +1 -0
  101. package/build/report/index.js +2 -0
  102. package/build/rule_check_item/erc_item.d.ts +4 -0
  103. package/build/rule_check_item/erc_item.d.ts.map +1 -0
  104. package/build/rule_check_item/erc_item.js +0 -0
  105. package/build/rule_check_item/index.d.ts +3 -0
  106. package/build/rule_check_item/index.d.ts.map +1 -0
  107. package/build/rule_check_item/index.js +2 -0
  108. package/build/rule_check_item/rc_item.d.ts +33 -0
  109. package/build/rule_check_item/rc_item.d.ts.map +1 -0
  110. package/build/rule_check_item/rc_item.js +0 -0
  111. package/build/tester/erc_tester.d.ts +18 -0
  112. package/build/tester/erc_tester.d.ts.map +1 -0
  113. package/build/tester/erc_tester.js +66 -0
  114. package/build/tester/graph/connection_graphs_builder.d.ts +22 -0
  115. package/build/tester/graph/connection_graphs_builder.d.ts.map +1 -0
  116. package/build/tester/graph/connection_graphs_builder.js +187 -0
  117. package/build/tester/graph/graph_erc.d.ts +16 -0
  118. package/build/tester/graph/graph_erc.d.ts.map +1 -0
  119. package/build/tester/graph/graph_erc.js +63 -0
  120. package/build/tester/graph/index.d.ts +4 -0
  121. package/build/tester/graph/index.d.ts.map +1 -0
  122. package/build/tester/graph/index.js +3 -0
  123. package/build/tester/graph/ir_graph_converter.d.ts +30 -0
  124. package/build/tester/graph/ir_graph_converter.d.ts.map +1 -0
  125. package/build/tester/graph/ir_graph_converter.js +279 -0
  126. package/build/tester/index.d.ts +3 -0
  127. package/build/tester/index.d.ts.map +1 -0
  128. package/build/tester/index.js +2 -0
  129. package/build/tsconfig.build.tsbuildinfo +1 -0
  130. package/build/utils/get_dependent_modules_definition.d.ts +4 -0
  131. package/build/utils/get_dependent_modules_definition.d.ts.map +1 -0
  132. package/build/utils/get_dependent_modules_definition.js +145 -0
  133. package/build/utils/index.d.ts +2 -0
  134. package/build/utils/index.d.ts.map +1 -0
  135. package/build/utils/index.js +1 -0
  136. package/package.json +39 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022-current Alberto Schiabel
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # PERC
2
+
3
+ This is the Programmable Electrical Rules Checking repository.
4
+
5
+ ## Key Points
6
+
7
+ ### EESchematic
8
+
9
+ 1. Pins are either power connections or belong to a uniquely-annotated symbol, so they don't need a path if they are driving the subgraph.
10
+ 2. PT_POWER_IN, ///< power input (GND, VCC for ICs). Must be connected to a power output.
11
+ 3. PT_POWER_OUT, ///< output of a regulator: intended to be connected to power input pins
12
+ 4. Using PWR_FLAG to tell ERC that the power input is intended to be connected to a regulator.
13
+
14
+ ### NetList
15
+
16
+ 1. Connected component
17
+
18
+ Each net is a [connected component](<https://en.wikipedia.org/wiki/Component_(graph_theory)>).
19
+
20
+ https://github.com/bloominstituteoftechnology/Graphs.git
21
+
22
+ ## References
23
+
24
+ https://www.synopsys.com/glossary/what-is-programmable-electrical-rules-checking.html
25
+
26
+ https://www.allaboutcircuits.com/industry-articles/importance-of-advanced-erc-circuit-design
27
+
28
+ https://aniah.fr
29
+
30
+ https://semiconwiki.com/advanced-reliability-verification-mentors-calibre-perc/
31
+
32
+ https://semiwiki.com/eda/2296-a-programmable-electrical-rule-checker/
33
+
34
+ https://resources.pcb.cadence.com/blog/2023-electrical-rule-check
35
+
36
+ https://eda.sw.siemens.com/en-US/ic/calibre-design/reliability-verification/perc/
37
+
38
+ https://resources.pcb.cadence.com/blog/2023-electrical-rule-check
39
+
40
+ https://zhuanlan.zhihu.com/p/674943393
@@ -0,0 +1,2 @@
1
+ export * from './visitor';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/connect_graph_visitor/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './visitor';
@@ -0,0 +1,5 @@
1
+ import type { ConnectionSubgraph } from '@modular-circuit/electronics-model';
2
+ export interface CG_Visitor {
3
+ visit_cc(cc: ConnectionSubgraph): void;
4
+ }
5
+ //# sourceMappingURL=visitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../../../src/erc/connect_graph_visitor/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAE5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACvC"}
File without changes
@@ -0,0 +1,7 @@
1
+ import type { ModuleResolver } from '@modular-circuit/ir';
2
+ export interface CONNECTION_GRAPH_BUILDER_CTX {
3
+ module_resolver: ModuleResolver;
4
+ dependencies: Record<string, string>;
5
+ schematics: Record<string, unknown>;
6
+ }
7
+ //# sourceMappingURL=connection_graph_builder_ctx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection_graph_builder_ctx.d.ts","sourceRoot":"","sources":["../../../src/erc/context/connection_graph_builder_ctx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,cAAc,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC"}
@@ -0,0 +1,11 @@
1
+ export declare enum SEVERITY {
2
+ RPT_SEVERITY_UNDEFINED = 1,
3
+ RPT_SEVERITY_INFO = 2,
4
+ RPT_SEVERITY_EXCLUSION = 4,
5
+ RPT_SEVERITY_ACTION = 8,
6
+ RPT_SEVERITY_WARNING = 16,
7
+ RPT_SEVERITY_ERROR = 32,
8
+ RPT_SEVERITY_IGNORE = 64,
9
+ RPT_SEVERITY_DEBUG = 128
10
+ }
11
+ //# sourceMappingURL=error_severity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error_severity.d.ts","sourceRoot":"","sources":["../../../src/erc/context/error_severity.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,sBAAsB,IAAO;IAC7B,iBAAiB,IAAO;IACxB,sBAAsB,IAAO;IAC7B,mBAAmB,IAAO;IAC1B,oBAAoB,KAAO;IAC3B,kBAAkB,KAAO;IACzB,mBAAmB,KAAO;IAC1B,kBAAkB,MAAO;CAC1B"}
@@ -0,0 +1,13 @@
1
+ // Note: On windows, SEVERITY_ERROR collides with a system declaration,
2
+ // so we used RPT_SEVERITY_xxx instead of SEVERITY_xxx
3
+ export var SEVERITY;
4
+ (function (SEVERITY) {
5
+ SEVERITY[SEVERITY["RPT_SEVERITY_UNDEFINED"] = 1] = "RPT_SEVERITY_UNDEFINED";
6
+ SEVERITY[SEVERITY["RPT_SEVERITY_INFO"] = 2] = "RPT_SEVERITY_INFO";
7
+ SEVERITY[SEVERITY["RPT_SEVERITY_EXCLUSION"] = 4] = "RPT_SEVERITY_EXCLUSION";
8
+ SEVERITY[SEVERITY["RPT_SEVERITY_ACTION"] = 8] = "RPT_SEVERITY_ACTION";
9
+ SEVERITY[SEVERITY["RPT_SEVERITY_WARNING"] = 16] = "RPT_SEVERITY_WARNING";
10
+ SEVERITY[SEVERITY["RPT_SEVERITY_ERROR"] = 32] = "RPT_SEVERITY_ERROR";
11
+ SEVERITY[SEVERITY["RPT_SEVERITY_IGNORE"] = 64] = "RPT_SEVERITY_IGNORE";
12
+ SEVERITY[SEVERITY["RPT_SEVERITY_DEBUG"] = 128] = "RPT_SEVERITY_DEBUG";
13
+ })(SEVERITY || (SEVERITY = {}));
@@ -0,0 +1,3 @@
1
+ export type ADT_AdjacencyList = Set<string>;
2
+ export type ADT_Graph = Record<string, ADT_AdjacencyList>;
3
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/erc/context/graph.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA"}
File without changes
@@ -0,0 +1,8 @@
1
+ import type { ConnectionNodeMap } from '@modular-circuit/electronics-model';
2
+ import type { ADT_Graph } from './graph';
3
+ export interface GRAPH_CONVERTER {
4
+ convert_to_graph(design: unknown): true | Error[];
5
+ get_graph(): ADT_Graph;
6
+ get_connection_node_map(): ConnectionNodeMap;
7
+ }
8
+ //# sourceMappingURL=graph_converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph_converter.d.ts","sourceRoot":"","sources":["../../../src/erc/context/graph_converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAA;IAEjD,SAAS,IAAI,SAAS,CAAA;IAEtB,uBAAuB,IAAI,iBAAiB,CAAA;CAC7C"}
File without changes
@@ -0,0 +1,6 @@
1
+ export * from './error_severity';
2
+ export * from './pin_to_pin_test_ctx';
3
+ export * from './graph';
4
+ export * from './graph_converter';
5
+ export * from './connection_graph_builder_ctx';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from './error_severity';
2
+ export * from './pin_to_pin_test_ctx';
3
+ export * from './graph';
4
+ export * from './graph_converter';
5
+ export * from './connection_graph_builder_ctx';
@@ -0,0 +1,7 @@
1
+ import type { ERC_REPORT } from '../../report';
2
+ import type { ERC_SETTING } from '../pin_compatibility_matrix';
3
+ export interface PIN_TO_PIN_TEST_CONTEXT {
4
+ report: ERC_REPORT;
5
+ erc_setting: ERC_SETTING;
6
+ }
7
+ //# sourceMappingURL=pin_to_pin_test_ctx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin_to_pin_test_ctx.d.ts","sourceRoot":"","sources":["../../../src/erc/context/pin_to_pin_test_ctx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAE9D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;CACzB"}
File without changes
@@ -0,0 +1,5 @@
1
+ export * from './context';
2
+ export * from './parameter_propagation';
3
+ export * from './pin_compatibility_matrix';
4
+ export * from './netlist';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/erc/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,WAAW,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './context';
2
+ export * from './parameter_propagation';
3
+ export * from './pin_compatibility_matrix';
4
+ export * from './netlist';
@@ -0,0 +1,5 @@
1
+ import { ELECTRICAL_PINTYPE } from '@modular-circuit/electronics-model';
2
+ export declare const DrivingPinTypes: Set<ELECTRICAL_PINTYPE>;
3
+ export declare const PowerDrivingPinTypes: Set<ELECTRICAL_PINTYPE>;
4
+ export declare const DrivenPinTypes: Set<ELECTRICAL_PINTYPE>;
5
+ //# sourceMappingURL=constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/constraints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAsBvE,eAAO,MAAM,eAAe,yBAM1B,CAAA;AAMF,eAAO,MAAM,oBAAoB,yBAA6C,CAAA;AAG9E,eAAO,MAAM,cAAc,yBAAyE,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { ELECTRICAL_PINTYPE } from '@modular-circuit/electronics-model';
2
+ //NOTE https://gitlab.com/kicad/code/kicad/-/blob/8.0.6/eeschema/erc/erc.cpp
3
+ /* ERC tests :
4
+ * 1 - conflicts between connected pins ( example: 2 connected outputs )
5
+ * 2 - minimal connections requirements ( 1 input *must* be connected to an
6
+ * output, or a passive pin )
7
+ */
8
+ /*
9
+ * Minimal ERC requirements:
10
+ * All pins *must* be connected (except ELECTRICAL_PINTYPE::PT_NC).
11
+ * When a pin is not connected in schematic, the user must place a "non
12
+ * connected" symbol to this pin.
13
+ * This ensures a forgotten connection will be detected.
14
+ */
15
+ // List of pin types that are considered drivers for usual input pins
16
+ // i.e. pin type = ELECTRICAL_PINTYPE::PT_INPUT, but not PT_POWER_IN
17
+ // that need only a PT_POWER_OUT pin type to be driven
18
+ export var DrivingPinTypes = new Set([
19
+ ELECTRICAL_PINTYPE.PT_OUTPUT,
20
+ ELECTRICAL_PINTYPE.PT_POWER_OUT,
21
+ ELECTRICAL_PINTYPE.PT_PASSIVE,
22
+ ELECTRICAL_PINTYPE.PT_TRISTATE,
23
+ ELECTRICAL_PINTYPE.PT_BIDI,
24
+ ]);
25
+ // List of pin types that are considered drivers for power pins
26
+ // In fact only a ELECTRICAL_PINTYPE::PT_POWER_OUT pin type can drive
27
+ // power input pins
28
+ export var PowerDrivingPinTypes = new Set([ELECTRICAL_PINTYPE.PT_POWER_OUT]);
29
+ // List of pin types that require a driver elsewhere on the net
30
+ export var DrivenPinTypes = new Set([ELECTRICAL_PINTYPE.PT_INPUT, ELECTRICAL_PINTYPE.PT_POWER_IN]);
@@ -0,0 +1,3 @@
1
+ export * from './constraints';
2
+ export * from './tester';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './constraints';
2
+ export * from './tester';
@@ -0,0 +1,10 @@
1
+ import { type ConnectionSubgraph } from '@modular-circuit/electronics-model';
2
+ import type { CG_Visitor } from '../connect_graph_visitor';
3
+ import type { PIN_TO_PIN_TEST_CONTEXT } from '../context/pin_to_pin_test_ctx';
4
+ export declare class NetlistTester implements CG_Visitor {
5
+ private readonly ctx;
6
+ constructor(ctx: PIN_TO_PIN_TEST_CONTEXT);
7
+ visit_cc(cc: ConnectionSubgraph): void;
8
+ private ercCheckMultipleDrivers;
9
+ }
10
+ //# sourceMappingURL=tester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tester.d.ts","sourceRoot":"","sources":["../../../src/erc/netlist/tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAE7E,qBAAa,aAAc,YAAW,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,uBAAuB;IAEzD,QAAQ,CAAC,EAAE,EAAE,kBAAkB;IAStC,OAAO,CAAC,uBAAuB;CAuChC"}
@@ -0,0 +1,67 @@
1
+ var __values = (this && this.__values) || function(o) {
2
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3
+ if (m) return m.call(o);
4
+ if (o && typeof o.length === "number") return {
5
+ next: function () {
6
+ if (o && i >= o.length) o = void 0;
7
+ return { value: o && o[i++], done: !o };
8
+ }
9
+ };
10
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
+ };
12
+ import { ConnectionNodeType } from '@modular-circuit/electronics-model';
13
+ import { ERCE_DRIVER_CONFLICT, ERCE_PIN_NOT_CONNECTED } from '../../report';
14
+ var NetlistTester = /** @class */ (function () {
15
+ function NetlistTester(ctx) {
16
+ this.ctx = ctx;
17
+ }
18
+ NetlistTester.prototype.visit_cc = function (cc) {
19
+ if (cc.nodes.length === 1 && cc.nodes[0].type === ConnectionNodeType.Port) {
20
+ this.ctx.report.erc_errors.push(ERCE_PIN_NOT_CONNECTED(cc.nodes[0].uuid));
21
+ return;
22
+ }
23
+ this.ercCheckMultipleDrivers(cc);
24
+ };
25
+ NetlistTester.prototype.ercCheckMultipleDrivers = function (cc) {
26
+ var e_1, _a;
27
+ if (!cc.net_drivers)
28
+ return;
29
+ var node_map = cc.nodes.reduce(function (map, node) {
30
+ map[node.uuid] = node;
31
+ return map;
32
+ }, {});
33
+ try {
34
+ for (var _b = __values(cc.net_drivers.drivers), _c = _b.next(); !_c.done; _c = _b.next()) {
35
+ var driver = _c.value;
36
+ if (driver === cc.net_drivers.primary_driver)
37
+ continue;
38
+ var node = node_map[driver];
39
+ var net_name = cc.name;
40
+ switch (node.type) {
41
+ case ConnectionNodeType.Port:
42
+ case ConnectionNodeType.Graphics:
43
+ break;
44
+ case ConnectionNodeType.NetLabel:
45
+ if (net_name !== node.text) {
46
+ this.ctx.report.erc_errors.push(ERCE_DRIVER_CONFLICT([cc.net_drivers.primary_driver, driver], cc.name, node.text));
47
+ }
48
+ break;
49
+ case ConnectionNodeType.Power:
50
+ if (net_name !== node.value) {
51
+ this.ctx.report.erc_errors.push(ERCE_DRIVER_CONFLICT([cc.net_drivers.primary_driver, driver], cc.name, node.value));
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
58
+ finally {
59
+ try {
60
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
61
+ }
62
+ finally { if (e_1) throw e_1.error; }
63
+ }
64
+ };
65
+ return NetlistTester;
66
+ }());
67
+ export { NetlistTester };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * PolymorphicBlocks blocks error codes start here.
3
+ *
4
+ * See https://github.com/BerkeleyHCI/PolymorphicBlocks/blob/master/compiler/src/main/scala/edg/compiler/CompilerError.scala
5
+ */
6
+ import { SEVERITY } from '../context';
7
+ export declare enum PP_ERROR {
8
+ UN_COMPILED_BLOCK = "un_compiled_block",
9
+ UN_COMPILED_LINK = "un_compiled_link",
10
+ UN_COMPILED_LINK_ARRAY = "un_compiled_link_array",
11
+ UN_COMPILED_PARAMETER = "un_compiled_parameter",
12
+ UN_COMPILED_INTERNAL_ELEMENT = "un_compiled_internal_element",
13
+ UN_COMPILED_LIBRARY_ELEMENT = "un_compiled_library_element",
14
+ UNDEFINED_PORT_ARRAY = "undefined_port_array",
15
+ LIBRARY_ERROR = "library_error",
16
+ GENERATOR_ERROR = "generator_error",
17
+ REFINEMENT_SUBCLASS_ERROR = "refinement_subclass_error",
18
+ OVER_ASSIGN = "over_assign",
19
+ BAD_REFERENCE = "bad_reference",
20
+ ABSTRACT_BLOCK = "abstract_block",
21
+ FAILED_ASSERTION = "failed_assertion",
22
+ UN_EVALUATED_ASSERTION = "un_evaluated_assertion",
23
+ INCONSISTENT_LINK_ARRAY_ELEMENTS = "inconsistent_link_array_elements",
24
+ PP_UNANNOTATED = "pp_unannotated",
25
+ PP_UNKNOWN_PORT_TYPE = "pp_unknown_port_type",
26
+ INAPPROPRIATE_FUNC = "Functionally inappropriate link",
27
+ NOT_DRIVEN = "pp_not_driven",
28
+ DUPLICATED_PWR_SOURCES = "duplicated_pwr_sources",
29
+ INSUFFICIENT_DRIVER = "Insufficient_driver",
30
+ OVER_DRIVEN = "over_driven",
31
+ IMPEDANCE_SIGNAL_INTEGRITY = "impedance_signal_integrity",
32
+ INCOMPATIBLE_VOLTAGE_LEVELS = "incompatible_voltage_levels",
33
+ SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE = "signal_levels_not_contained_within_voltage",
34
+ INCOMPATIBLE_SIGNAL_LEVELS = "incompatible_signal_levels",
35
+ OVERCURRENT = "overcurrent",
36
+ INCOMPATIBLE_DIGITAL_THRESHOLDS = "incompatible_digital_thresholds",
37
+ REQUIRES_CONNECTED_SOURCE_OR_BIDIR = "requires_connected_source_or_bidir",
38
+ ILLEGAL_CONNECTION = "Illegal_connection"
39
+ }
40
+ export declare const DEFAULT_PP_ERROR_SEVERITY: Record<PP_ERROR, SEVERITY>;
41
+ //# sourceMappingURL=error_code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error_code.d.ts","sourceRoot":"","sources":["../../../src/erc/parameter_propagation/error_code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,oBAAY,QAAQ;IAClB,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;IAC/C,4BAA4B,iCAAiC;IAC7D,2BAA2B,gCAAgC;IAC3D,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,yBAAyB,8BAA8B;IACvD,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IACjD,gCAAgC,qCAAqC;IACrE,cAAc,mBAAmB;IACjC,oBAAoB,yBAAyB;IAC7C,kBAAkB,oCAAoC;IACtD,UAAU,kBAAkB;IAC5B,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,WAAW,gBAAgB;IAC3B,0BAA0B,+BAA+B;IACzD,2BAA2B,gCAAgC;IAC3D,0CAA0C,+CAA+C;IACzF,0BAA0B,+BAA+B;IACzD,WAAW,gBAAgB;IAC3B,+BAA+B,oCAAoC;IACnE,kCAAkC,uCAAuC;IACzE,kBAAkB,uBAAuB;CAC1C;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAgChE,CAAA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * PolymorphicBlocks blocks error codes start here.
3
+ *
4
+ * See https://github.com/BerkeleyHCI/PolymorphicBlocks/blob/master/compiler/src/main/scala/edg/compiler/CompilerError.scala
5
+ */
6
+ var _a;
7
+ import { SEVERITY } from '../context';
8
+ export var PP_ERROR;
9
+ (function (PP_ERROR) {
10
+ PP_ERROR["UN_COMPILED_BLOCK"] = "un_compiled_block";
11
+ PP_ERROR["UN_COMPILED_LINK"] = "un_compiled_link";
12
+ PP_ERROR["UN_COMPILED_LINK_ARRAY"] = "un_compiled_link_array";
13
+ PP_ERROR["UN_COMPILED_PARAMETER"] = "un_compiled_parameter";
14
+ PP_ERROR["UN_COMPILED_INTERNAL_ELEMENT"] = "un_compiled_internal_element";
15
+ PP_ERROR["UN_COMPILED_LIBRARY_ELEMENT"] = "un_compiled_library_element";
16
+ PP_ERROR["UNDEFINED_PORT_ARRAY"] = "undefined_port_array";
17
+ PP_ERROR["LIBRARY_ERROR"] = "library_error";
18
+ PP_ERROR["GENERATOR_ERROR"] = "generator_error";
19
+ PP_ERROR["REFINEMENT_SUBCLASS_ERROR"] = "refinement_subclass_error";
20
+ PP_ERROR["OVER_ASSIGN"] = "over_assign";
21
+ PP_ERROR["BAD_REFERENCE"] = "bad_reference";
22
+ PP_ERROR["ABSTRACT_BLOCK"] = "abstract_block";
23
+ PP_ERROR["FAILED_ASSERTION"] = "failed_assertion";
24
+ PP_ERROR["UN_EVALUATED_ASSERTION"] = "un_evaluated_assertion";
25
+ PP_ERROR["INCONSISTENT_LINK_ARRAY_ELEMENTS"] = "inconsistent_link_array_elements";
26
+ PP_ERROR["PP_UNANNOTATED"] = "pp_unannotated";
27
+ PP_ERROR["PP_UNKNOWN_PORT_TYPE"] = "pp_unknown_port_type";
28
+ PP_ERROR["INAPPROPRIATE_FUNC"] = "Functionally inappropriate link";
29
+ PP_ERROR["NOT_DRIVEN"] = "pp_not_driven";
30
+ PP_ERROR["DUPLICATED_PWR_SOURCES"] = "duplicated_pwr_sources";
31
+ PP_ERROR["INSUFFICIENT_DRIVER"] = "Insufficient_driver";
32
+ PP_ERROR["OVER_DRIVEN"] = "over_driven";
33
+ PP_ERROR["IMPEDANCE_SIGNAL_INTEGRITY"] = "impedance_signal_integrity";
34
+ PP_ERROR["INCOMPATIBLE_VOLTAGE_LEVELS"] = "incompatible_voltage_levels";
35
+ PP_ERROR["SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE"] = "signal_levels_not_contained_within_voltage";
36
+ PP_ERROR["INCOMPATIBLE_SIGNAL_LEVELS"] = "incompatible_signal_levels";
37
+ PP_ERROR["OVERCURRENT"] = "overcurrent";
38
+ PP_ERROR["INCOMPATIBLE_DIGITAL_THRESHOLDS"] = "incompatible_digital_thresholds";
39
+ PP_ERROR["REQUIRES_CONNECTED_SOURCE_OR_BIDIR"] = "requires_connected_source_or_bidir";
40
+ PP_ERROR["ILLEGAL_CONNECTION"] = "Illegal_connection";
41
+ })(PP_ERROR || (PP_ERROR = {}));
42
+ export var DEFAULT_PP_ERROR_SEVERITY = (_a = {},
43
+ _a[PP_ERROR.UN_COMPILED_BLOCK] = SEVERITY.RPT_SEVERITY_WARNING,
44
+ _a[PP_ERROR.UN_COMPILED_LINK] = SEVERITY.RPT_SEVERITY_WARNING,
45
+ _a[PP_ERROR.UN_COMPILED_LINK_ARRAY] = SEVERITY.RPT_SEVERITY_WARNING,
46
+ _a[PP_ERROR.UN_COMPILED_PARAMETER] = SEVERITY.RPT_SEVERITY_WARNING,
47
+ _a[PP_ERROR.UN_COMPILED_INTERNAL_ELEMENT] = SEVERITY.RPT_SEVERITY_WARNING,
48
+ _a[PP_ERROR.UN_COMPILED_LIBRARY_ELEMENT] = SEVERITY.RPT_SEVERITY_WARNING,
49
+ _a[PP_ERROR.UNDEFINED_PORT_ARRAY] = SEVERITY.RPT_SEVERITY_WARNING,
50
+ _a[PP_ERROR.LIBRARY_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
51
+ _a[PP_ERROR.GENERATOR_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
52
+ _a[PP_ERROR.REFINEMENT_SUBCLASS_ERROR] = SEVERITY.RPT_SEVERITY_WARNING,
53
+ _a[PP_ERROR.OVER_ASSIGN] = SEVERITY.RPT_SEVERITY_ERROR,
54
+ _a[PP_ERROR.BAD_REFERENCE] = SEVERITY.RPT_SEVERITY_WARNING,
55
+ _a[PP_ERROR.ABSTRACT_BLOCK] = SEVERITY.RPT_SEVERITY_WARNING,
56
+ _a[PP_ERROR.FAILED_ASSERTION] = SEVERITY.RPT_SEVERITY_ERROR,
57
+ _a[PP_ERROR.UN_EVALUATED_ASSERTION] = SEVERITY.RPT_SEVERITY_ERROR,
58
+ _a[PP_ERROR.INCONSISTENT_LINK_ARRAY_ELEMENTS] = SEVERITY.RPT_SEVERITY_WARNING,
59
+ _a[PP_ERROR.PP_UNANNOTATED] = SEVERITY.RPT_SEVERITY_WARNING,
60
+ _a[PP_ERROR.PP_UNKNOWN_PORT_TYPE] = SEVERITY.RPT_SEVERITY_ERROR,
61
+ _a[PP_ERROR.INAPPROPRIATE_FUNC] = SEVERITY.RPT_SEVERITY_ERROR,
62
+ _a[PP_ERROR.NOT_DRIVEN] = SEVERITY.RPT_SEVERITY_WARNING,
63
+ _a[PP_ERROR.DUPLICATED_PWR_SOURCES] = SEVERITY.RPT_SEVERITY_WARNING,
64
+ _a[PP_ERROR.INSUFFICIENT_DRIVER] = SEVERITY.RPT_SEVERITY_WARNING,
65
+ _a[PP_ERROR.OVER_DRIVEN] = SEVERITY.RPT_SEVERITY_WARNING,
66
+ _a[PP_ERROR.IMPEDANCE_SIGNAL_INTEGRITY] = SEVERITY.RPT_SEVERITY_WARNING,
67
+ _a[PP_ERROR.INCOMPATIBLE_VOLTAGE_LEVELS] = SEVERITY.RPT_SEVERITY_WARNING,
68
+ _a[PP_ERROR.SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE] = SEVERITY.RPT_SEVERITY_WARNING,
69
+ _a[PP_ERROR.INCOMPATIBLE_SIGNAL_LEVELS] = SEVERITY.RPT_SEVERITY_WARNING,
70
+ _a[PP_ERROR.OVERCURRENT] = SEVERITY.RPT_SEVERITY_WARNING,
71
+ _a[PP_ERROR.INCOMPATIBLE_DIGITAL_THRESHOLDS] = SEVERITY.RPT_SEVERITY_WARNING,
72
+ _a[PP_ERROR.REQUIRES_CONNECTED_SOURCE_OR_BIDIR] = SEVERITY.RPT_SEVERITY_WARNING,
73
+ _a[PP_ERROR.ILLEGAL_CONNECTION] = SEVERITY.RPT_SEVERITY_ERROR,
74
+ _a);
@@ -0,0 +1,3 @@
1
+ export * from './error_code';
2
+ export * from './tester';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/erc/parameter_propagation/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './error_code';
2
+ export * from './tester';
@@ -0,0 +1,2 @@
1
+ export * from './tester_impl';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/erc/parameter_propagation/link_testers/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './tester_impl';
@@ -0,0 +1,23 @@
1
+ import { type PortLike } from '@modular-circuit/electronics-model';
2
+ import type { ERC_REPORT } from '../../../report/erc_report';
3
+ export interface LinkTestContext {
4
+ port_id: Map<PortLike, string>;
5
+ report: ERC_REPORT;
6
+ has_passive_port: boolean;
7
+ }
8
+ export declare abstract class LinkTesterBase<LinkT> {
9
+ protected readonly ctx: LinkTestContext;
10
+ protected readonly ports: PortLike[];
11
+ protected link: LinkT | undefined;
12
+ private _all_port_ids?;
13
+ constructor(ctx: LinkTestContext, ports: PortLike[]);
14
+ test(): void;
15
+ get all_port_ids(): string[];
16
+ protected abstract check_parameter_propagation(): void;
17
+ protected abstract init_link(): boolean;
18
+ }
19
+ export declare abstract class CompositePortLinkTesterBase<LinkT> extends LinkTesterBase<LinkT> {
20
+ test(): void;
21
+ private annot_composite_port;
22
+ }
23
+ //# sourceMappingURL=link_tester_base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link_tester_base.d.ts","sourceRoot":"","sources":["../../../../src/erc/parameter_propagation/link_testers/link_tester_base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,UAAU,CAAA;IAClB,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAED,8BAAsB,cAAc,CAAC,KAAK;IAKtC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,eAAe;IACvC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;IALtC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;IACjC,OAAO,CAAC,aAAa,CAAC,CAAU;gBAGX,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,QAAQ,EAAE;IAG/B,IAAI;IAKX,IAAW,YAAY,aAGtB;IAED,SAAS,CAAC,QAAQ,CAAC,2BAA2B,IAAI,IAAI;IAEtD,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO;CACxC;AAED,8BAAsB,2BAA2B,CAAC,KAAK,CAAE,SAAQ,cAAc,CAAC,KAAK,CAAC;IACpE,IAAI,IAAI,IAAI;IAQ5B,OAAO,CAAC,oBAAoB;CAS7B"}