From d8745744bfff69076608f30e60c0d86d1f115833 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Sat, 3 Oct 2020 18:45:33 +0200 Subject: [PATCH] Implemented some infrastructure for MPROMs --- .../logic/model/am2900/components/Am2900.json | 1219 +++++++---------- .../am2900/components/ModelAm2900MPROM.java | 29 + .../AbstractAm2900MachineDefinition.java | 6 + .../am2900/machine/Am2900MPROMDefinition.java | 36 + .../model/am2900/machine/Am2900Machine.java | 11 + .../am2900/standardComponentIDMapping.json | 1 + .../src/net/mograsim/machine/Machine.java | 3 + .../mograsim/machine/MachineDefinition.java | 10 + .../machine/StandardMemoryDefinition.java | 4 +- .../mograsim/machine/mi/AssignableMPROM.java | 99 ++ .../src/net/mograsim/machine/mi/MPROM.java | 14 + .../mograsim/machine/mi/MPROMDefinition.java | 26 + .../mograsim/machine/mi/StandardMPROM.java | 73 + .../machine/mi/StandardMPROMDefinition.java | 20 + .../machine/mi/components/CoreMPROM.java | 81 ++ .../machine/mi/components/MPROMAdapter.java | 30 + .../machine/mi/components/ModelMPROM.java | 118 ++ 17 files changed, 1050 insertions(+), 730 deletions(-) create mode 100644 plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MPROM.java create mode 100644 plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MPROMDefinition.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROM.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROMDefinition.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROM.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROMDefinition.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/CoreMPROM.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/MPROMAdapter.java create mode 100644 plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMPROM.java diff --git a/plugins/net.mograsim.logic.model.am2900/components/net/mograsim/logic/model/am2900/components/Am2900.json b/plugins/net.mograsim.logic.model.am2900/components/net/mograsim/logic/model/am2900/components/Am2900.json index b1c31270..cf75c6bd 100644 --- a/plugins/net.mograsim.logic.model.am2900/components/net/mograsim/logic/model/am2900/components/Am2900.json +++ b/plugins/net.mograsim.logic.model.am2900/components/net/mograsim/logic/model/am2900/components/Am2900.json @@ -5,6 +5,14 @@ "innerScale": 0.4, "submodel": { "components": [ + { + "id": "Am2900MPROM", + "name": "Am2900MPROM#0", + "pos": { + "x": 255.0, + "y": 385.0 + } + }, { "id": "Am2900MainMemory", "name": "Am2900MainMemory#0", @@ -179,15 +187,6 @@ }, "params": "0" }, - { - "id": "FixedOutput", - "name": "FixedOutput#7", - "pos": { - "x": 270.0, - "y": 380.0 - }, - "params": "0" - }, { "id": "NandGate", "name": "NandGate#0", @@ -290,30 +289,6 @@ { "id": "Splitter", "name": "Splitter#3", - "pos": { - "x": 205.0, - "y": 390.0 - }, - "params": { - "logicWidth": 8, - "orientation": "DOWN" - } - }, - { - "id": "Splitter", - "name": "Splitter#4", - "pos": { - "x": 205.0, - "y": 405.0 - }, - "params": { - "logicWidth": 12, - "orientation": "UP" - } - }, - { - "id": "Splitter", - "name": "Splitter#5", "pos": { "x": 575.0, "y": 115.0 @@ -325,7 +300,7 @@ }, { "id": "Splitter", - "name": "Splitter#6", + "name": "Splitter#4", "pos": { "x": 575.0, "y": 195.0 @@ -337,7 +312,7 @@ }, { "id": "Splitter", - "name": "Splitter#7", + "name": "Splitter#5", "pos": { "x": 575.0, "y": 235.0 @@ -349,7 +324,7 @@ }, { "id": "Splitter", - "name": "Splitter#8", + "name": "Splitter#6", "pos": { "x": 675.0, "y": 150.0 @@ -361,7 +336,7 @@ }, { "id": "Splitter", - "name": "Splitter#9", + "name": "Splitter#7", "pos": { "x": 675.0, "y": 245.0 @@ -373,7 +348,7 @@ }, { "id": "Splitter", - "name": "Splitter#10", + "name": "Splitter#8", "pos": { "x": 345.0, "y": 830.0 @@ -385,7 +360,7 @@ }, { "id": "Splitter", - "name": "Splitter#11", + "name": "Splitter#9", "pos": { "x": 405.0, "y": 815.0 @@ -397,7 +372,7 @@ }, { "id": "Splitter", - "name": "Splitter#12", + "name": "Splitter#10", "pos": { "x": 525.0, "y": 815.0 @@ -409,7 +384,7 @@ }, { "id": "Splitter", - "name": "Splitter#13", + "name": "Splitter#11", "pos": { "x": 660.0, "y": 755.0 @@ -421,7 +396,7 @@ }, { "id": "Splitter", - "name": "Splitter#14", + "name": "Splitter#12", "pos": { "x": 575.0, "y": 815.0 @@ -433,7 +408,7 @@ }, { "id": "Splitter", - "name": "Splitter#15", + "name": "Splitter#13", "pos": { "x": 695.0, "y": 815.0 @@ -445,7 +420,7 @@ }, { "id": "Splitter", - "name": "Splitter#16", + "name": "Splitter#14", "pos": { "x": 655.0, "y": 815.0 @@ -457,7 +432,7 @@ }, { "id": "Splitter", - "name": "Splitter#17", + "name": "Splitter#15", "pos": { "x": 730.0, "y": 770.0 @@ -469,7 +444,7 @@ }, { "id": "Splitter", - "name": "Splitter#18", + "name": "Splitter#16", "pos": { "x": 690.0, "y": 770.0 @@ -481,7 +456,7 @@ }, { "id": "Splitter", - "name": "Splitter#19", + "name": "Splitter#17", "pos": { "x": 660.0, "y": 770.0 @@ -493,7 +468,7 @@ }, { "id": "Splitter", - "name": "Splitter#20", + "name": "Splitter#18", "pos": { "x": 925.0, "y": 815.0 @@ -505,7 +480,7 @@ }, { "id": "Splitter", - "name": "Splitter#21", + "name": "Splitter#19", "pos": { "x": 895.0, "y": 815.0 @@ -517,7 +492,7 @@ }, { "id": "Splitter", - "name": "Splitter#22", + "name": "Splitter#20", "pos": { "x": 865.0, "y": 815.0 @@ -529,7 +504,7 @@ }, { "id": "Splitter", - "name": "Splitter#23", + "name": "Splitter#21", "pos": { "x": 835.0, "y": 815.0 @@ -541,7 +516,7 @@ }, { "id": "Splitter", - "name": "Splitter#24", + "name": "Splitter#22", "pos": { "x": 795.0, "y": 815.0 @@ -553,7 +528,7 @@ }, { "id": "Splitter", - "name": "Splitter#25", + "name": "Splitter#23", "pos": { "x": 745.0, "y": 815.0 @@ -565,7 +540,7 @@ }, { "id": "Splitter", - "name": "Splitter#26", + "name": "Splitter#24", "pos": { "x": 895.0, "y": 800.0 @@ -577,7 +552,7 @@ }, { "id": "Splitter", - "name": "Splitter#27", + "name": "Splitter#25", "pos": { "x": 835.0, "y": 800.0 @@ -589,7 +564,7 @@ }, { "id": "Splitter", - "name": "Splitter#28", + "name": "Splitter#26", "pos": { "x": 865.0, "y": 800.0 @@ -601,7 +576,7 @@ }, { "id": "Splitter", - "name": "Splitter#29", + "name": "Splitter#27", "pos": { "x": 835.0, "y": 780.0 @@ -613,7 +588,7 @@ }, { "id": "Splitter", - "name": "Splitter#30", + "name": "Splitter#28", "pos": { "x": 895.0, "y": 330.0 @@ -625,7 +600,7 @@ }, { "id": "Splitter", - "name": "Splitter#31", + "name": "Splitter#29", "pos": { "x": 895.0, "y": 580.0 @@ -637,7 +612,7 @@ }, { "id": "Splitter", - "name": "Splitter#32", + "name": "Splitter#30", "pos": { "x": 895.0, "y": 565.0 @@ -649,7 +624,7 @@ }, { "id": "Splitter", - "name": "Splitter#33", + "name": "Splitter#31", "pos": { "x": 935.0, "y": 565.0 @@ -661,7 +636,7 @@ }, { "id": "Splitter", - "name": "Splitter#34", + "name": "Splitter#32", "pos": { "x": 975.0, "y": 565.0 @@ -673,7 +648,7 @@ }, { "id": "Splitter", - "name": "Splitter#35", + "name": "Splitter#33", "pos": { "x": 1015.0, "y": 565.0 @@ -685,7 +660,7 @@ }, { "id": "Splitter", - "name": "Splitter#36", + "name": "Splitter#34", "pos": { "x": 895.0, "y": 345.0 @@ -697,7 +672,7 @@ }, { "id": "Splitter", - "name": "Splitter#37", + "name": "Splitter#35", "pos": { "x": 935.0, "y": 345.0 @@ -709,7 +684,7 @@ }, { "id": "Splitter", - "name": "Splitter#38", + "name": "Splitter#36", "pos": { "x": 975.0, "y": 345.0 @@ -721,7 +696,7 @@ }, { "id": "Splitter", - "name": "Splitter#39", + "name": "Splitter#37", "pos": { "x": 1015.0, "y": 345.0 @@ -733,7 +708,7 @@ }, { "id": "Splitter", - "name": "Splitter#40", + "name": "Splitter#38", "pos": { "x": 310.0, "y": 235.0 @@ -745,7 +720,7 @@ }, { "id": "Splitter", - "name": "Splitter#41", + "name": "Splitter#39", "pos": { "x": 620.0, "y": 200.0 @@ -757,7 +732,7 @@ }, { "id": "Splitter", - "name": "Splitter#42", + "name": "Splitter#40", "pos": { "x": 365.0, "y": 815.0 @@ -769,7 +744,7 @@ }, { "id": "Splitter", - "name": "Splitter#43", + "name": "Splitter#41", "pos": { "x": 620.0, "y": 295.0 @@ -1154,33 +1129,6 @@ { "id": "WireCrossPoint", "name": "WireCrossPoint#33", - "pos": { - "x": 284.0, - "y": 399.0 - }, - "params": 1 - }, - { - "id": "WireCrossPoint", - "name": "WireCrossPoint#34", - "pos": { - "x": 294.0, - "y": 399.0 - }, - "params": 1 - }, - { - "id": "WireCrossPoint", - "name": "WireCrossPoint#35", - "pos": { - "x": 304.0, - "y": 399.0 - }, - "params": 1 - }, - { - "id": "WireCrossPoint", - "name": "WireCrossPoint#36", "pos": { "x": 339.0, "y": 229.0 @@ -1189,7 +1137,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#37", + "name": "WireCrossPoint#34", "pos": { "x": 824.0, "y": 699.0 @@ -1198,7 +1146,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#38", + "name": "WireCrossPoint#35", "pos": { "x": 169.0, "y": 384.0 @@ -1207,7 +1155,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#39", + "name": "WireCrossPoint#36", "pos": { "x": 179.0, "y": 364.0 @@ -1216,7 +1164,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#40", + "name": "WireCrossPoint#37", "pos": { "x": 139.0, "y": 364.0 @@ -1225,7 +1173,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#41", + "name": "WireCrossPoint#38", "pos": { "x": 139.0, "y": 379.0 @@ -1234,7 +1182,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#42", + "name": "WireCrossPoint#39", "pos": { "x": 479.0, "y": 364.0 @@ -1243,7 +1191,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#43", + "name": "WireCrossPoint#40", "pos": { "x": 239.0, "y": 564.0 @@ -1252,7 +1200,7 @@ }, { "id": "WireCrossPoint", - "name": "WireCrossPoint#44", + "name": "WireCrossPoint#41", "pos": { "x": 364.0, "y": 364.0 @@ -1971,7 +1919,7 @@ }, { "pin1": { - "compName": "WireCrossPoint#41", + "compName": "WireCrossPoint#38", "pinName": "" }, "pin2": { @@ -2294,7 +2242,7 @@ "pinName": "O15" }, "pin2": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O7" }, "name": "unnamedWire#46", @@ -2302,7 +2250,7 @@ }, { "pin1": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O6" }, "pin2": { @@ -2318,7 +2266,7 @@ "pinName": "O13" }, "pin2": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O5" }, "name": "unnamedWire#48", @@ -2326,7 +2274,7 @@ }, { "pin1": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O4" }, "pin2": { @@ -2342,7 +2290,7 @@ "pinName": "O11" }, "pin2": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O3" }, "name": "unnamedWire#50", @@ -2354,7 +2302,7 @@ "pinName": "O10" }, "pin2": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O2" }, "name": "unnamedWire#51", @@ -2362,7 +2310,7 @@ }, { "pin1": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O1" }, "pin2": { @@ -2378,7 +2326,7 @@ "pinName": "O8" }, "pin2": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "O0" }, "name": "unnamedWire#53", @@ -2407,7 +2355,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#6", + "compName": "Splitter#4", "pinName": "O3" }, "name": "unnamedWire#55", @@ -2424,7 +2372,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#7", + "compName": "Splitter#5", "pinName": "O3" }, "name": "unnamedWire#56", @@ -2432,7 +2380,7 @@ }, { "pin1": { - "compName": "Splitter#7", + "compName": "Splitter#5", "pinName": "O2" }, "pin2": { @@ -2448,7 +2396,7 @@ "pinName": "O1" }, "pin2": { - "compName": "Splitter#7", + "compName": "Splitter#5", "pinName": "O1" }, "name": "unnamedWire#58", @@ -2456,7 +2404,7 @@ }, { "pin1": { - "compName": "Splitter#7", + "compName": "Splitter#5", "pinName": "O0" }, "pin2": { @@ -2468,7 +2416,7 @@ }, { "pin1": { - "compName": "Splitter#6", + "compName": "Splitter#4", "pinName": "O0" }, "pin2": { @@ -2484,7 +2432,7 @@ "pinName": "O5" }, "pin2": { - "compName": "Splitter#6", + "compName": "Splitter#4", "pinName": "O1" }, "name": "unnamedWire#61", @@ -2492,7 +2440,7 @@ }, { "pin1": { - "compName": "Splitter#6", + "compName": "Splitter#4", "pinName": "O2" }, "pin2": { @@ -2600,7 +2548,7 @@ }, { "pin1": { - "compName": "Splitter#7", + "compName": "Splitter#5", "pinName": "I" }, "pin2": { @@ -2621,7 +2569,7 @@ }, { "pin1": { - "compName": "Splitter#6", + "compName": "Splitter#4", "pinName": "I" }, "pin2": { @@ -2646,7 +2594,7 @@ "pinName": "Y1" }, "pin2": { - "compName": "Splitter#8", + "compName": "Splitter#6", "pinName": "O3" }, "name": "unnamedWire#73", @@ -2654,7 +2602,7 @@ }, { "pin1": { - "compName": "Splitter#8", + "compName": "Splitter#6", "pinName": "O2" }, "pin2": { @@ -2670,7 +2618,7 @@ "pinName": "Y3" }, "pin2": { - "compName": "Splitter#8", + "compName": "Splitter#6", "pinName": "O1" }, "name": "unnamedWire#75", @@ -2678,7 +2626,7 @@ }, { "pin1": { - "compName": "Splitter#8", + "compName": "Splitter#6", "pinName": "O0" }, "pin2": { @@ -2694,7 +2642,7 @@ "pinName": "Y1" }, "pin2": { - "compName": "Splitter#9", + "compName": "Splitter#7", "pinName": "O3" }, "name": "unnamedWire#77", @@ -2702,7 +2650,7 @@ }, { "pin1": { - "compName": "Splitter#9", + "compName": "Splitter#7", "pinName": "O2" }, "pin2": { @@ -2718,7 +2666,7 @@ "pinName": "Y3" }, "pin2": { - "compName": "Splitter#9", + "compName": "Splitter#7", "pinName": "O1" }, "name": "unnamedWire#79", @@ -2726,7 +2674,7 @@ }, { "pin1": { - "compName": "Splitter#9", + "compName": "Splitter#7", "pinName": "O0" }, "pin2": { @@ -2957,7 +2905,7 @@ "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#42", + "compName": "WireCrossPoint#39", "pinName": "" }, "name": "unnamedWire#93", @@ -2969,7 +2917,7 @@ "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#40", + "compName": "WireCrossPoint#37", "pinName": "" }, "name": "unnamedWire#94", @@ -2977,11 +2925,11 @@ }, { "pin1": { - "compName": "WireCrossPoint#40", + "compName": "WireCrossPoint#37", "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#39", + "compName": "WireCrossPoint#36", "pinName": "" }, "name": "unnamedWire#95", @@ -2989,7 +2937,7 @@ }, { "pin1": { - "compName": "WireCrossPoint#41", + "compName": "WireCrossPoint#38", "pinName": "" }, "pin2": { @@ -3006,11 +2954,11 @@ }, { "pin1": { - "compName": "WireCrossPoint#40", + "compName": "WireCrossPoint#37", "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#41", + "compName": "WireCrossPoint#38", "pinName": "" }, "name": "unnamedWire#97", @@ -3022,7 +2970,7 @@ "pinName": "Y" }, "pin2": { - "compName": "WireCrossPoint#38", + "compName": "WireCrossPoint#35", "pinName": "" }, "name": "unnamedWire#98", @@ -3030,7 +2978,7 @@ }, { "pin1": { - "compName": "WireCrossPoint#38", + "compName": "WireCrossPoint#35", "pinName": "" }, "pin2": { @@ -3055,11 +3003,11 @@ }, { "pin1": { - "compName": "WireCrossPoint#39", + "compName": "WireCrossPoint#36", "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#44", + "compName": "WireCrossPoint#41", "pinName": "" }, "name": "unnamedWire#100", @@ -3088,7 +3036,7 @@ }, { "pin1": { - "compName": "WireCrossPoint#39", + "compName": "WireCrossPoint#36", "pinName": "" }, "pin2": { @@ -3150,7 +3098,7 @@ }, { "pin1": { - "compName": "Splitter#40", + "compName": "Splitter#38", "pinName": "O2" }, "pin2": { @@ -3221,11 +3169,11 @@ }, { "pin1": { - "compName": "Splitter#40", + "compName": "Splitter#38", "pinName": "O0" }, "pin2": { - "compName": "WireCrossPoint#36", + "compName": "WireCrossPoint#33", "pinName": "" }, "name": "unnamedWire#109", @@ -3279,7 +3227,7 @@ }, { "pin1": { - "compName": "Splitter#8", + "compName": "Splitter#6", "pinName": "I" }, "pin2": { @@ -3304,7 +3252,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#9", + "compName": "Splitter#7", "pinName": "I" }, "name": "unnamedWire#114", @@ -3373,7 +3321,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O37" }, "name": "unnamedWire#119", @@ -3419,7 +3367,7 @@ }, { "pin1": { - "compName": "WireCrossPoint#37", + "compName": "WireCrossPoint#34", "pinName": "" }, "pin2": { @@ -3552,7 +3500,7 @@ }, { "pin1": { - "compName": "Splitter#40", + "compName": "Splitter#38", "pinName": "O3" }, "pin2": { @@ -3668,20 +3616,15 @@ }, { "pin1": { - "compName": "FixedOutput#7", - "pinName": "out" + "compName": "Am2900MPROM#0", + "pinName": "D" }, "pin2": { - "compName": "WireCrossPoint#33", - "pinName": "" + "compName": "mux1_12#0", + "pinName": "I0" }, "name": "unnamedWire#133", - "path": [ - { - "x": 285.0, - "y": 385.0 - } - ] + "path": [] }, { "pin1": { @@ -3764,7 +3707,7 @@ "pinName": "Q" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "I" }, "name": "unnamedWire#138", @@ -3785,7 +3728,7 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O22" }, "pin2": { @@ -3810,11 +3753,11 @@ }, { "pin1": { - "compName": "Splitter#12", + "compName": "Splitter#10", "pinName": "O3" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O21" }, "name": "unnamedWire#140", @@ -3822,11 +3765,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O20" }, "pin2": { - "compName": "Splitter#12", + "compName": "Splitter#10", "pinName": "O2" }, "name": "unnamedWire#141", @@ -3834,11 +3777,11 @@ }, { "pin1": { - "compName": "Splitter#12", + "compName": "Splitter#10", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O19" }, "name": "unnamedWire#142", @@ -3846,11 +3789,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O18" }, "pin2": { - "compName": "Splitter#12", + "compName": "Splitter#10", "pinName": "O0" }, "name": "unnamedWire#143", @@ -3858,7 +3801,7 @@ }, { "pin1": { - "compName": "Splitter#12", + "compName": "Splitter#10", "pinName": "I" }, "pin2": { @@ -3883,11 +3826,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O11" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O17" }, "name": "unnamedWire#145", @@ -3895,11 +3838,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O16" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O10" }, "name": "unnamedWire#146", @@ -3907,11 +3850,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O9" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O15" }, "name": "unnamedWire#147", @@ -3919,11 +3862,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O14" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O8" }, "name": "unnamedWire#148", @@ -3931,11 +3874,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O7" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O13" }, "name": "unnamedWire#149", @@ -3943,11 +3886,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O12" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O6" }, "name": "unnamedWire#150", @@ -3955,11 +3898,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O5" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O11" }, "name": "unnamedWire#151", @@ -3967,11 +3910,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O10" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O4" }, "name": "unnamedWire#152", @@ -3979,11 +3922,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O3" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O9" }, "name": "unnamedWire#153", @@ -3991,11 +3934,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O8" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O2" }, "name": "unnamedWire#154", @@ -4003,11 +3946,11 @@ }, { "pin1": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O7" }, "name": "unnamedWire#155", @@ -4015,11 +3958,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O6" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "O0" }, "name": "unnamedWire#156", @@ -4048,7 +3991,7 @@ "pinName": "I1" }, "pin2": { - "compName": "Splitter#11", + "compName": "Splitter#9", "pinName": "I" }, "name": "unnamedWire#158", @@ -4093,11 +4036,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O5" }, "pin2": { - "compName": "Splitter#42", + "compName": "Splitter#40", "pinName": "O3" }, "name": "unnamedWire#161", @@ -4105,11 +4048,11 @@ }, { "pin1": { - "compName": "Splitter#40", + "compName": "Splitter#38", "pinName": "I" }, "pin2": { - "compName": "Splitter#42", + "compName": "Splitter#40", "pinName": "I" }, "name": "unnamedWire#162", @@ -4130,7 +4073,7 @@ "pinName": "A" }, "pin2": { - "compName": "WireCrossPoint#43", + "compName": "WireCrossPoint#40", "pinName": "" }, "name": "unnamedWire#163", @@ -4147,7 +4090,7 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O29" }, "pin2": { @@ -4176,7 +4119,7 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O30" }, "pin2": { @@ -4205,11 +4148,11 @@ }, { "pin1": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O23" }, "name": "unnamedWire#166", @@ -4217,11 +4160,11 @@ }, { "pin1": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O2" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O25" }, "name": "unnamedWire#167", @@ -4229,11 +4172,11 @@ }, { "pin1": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O24" }, "name": "unnamedWire#168", @@ -4241,11 +4184,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O26" }, "pin2": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O3" }, "name": "unnamedWire#169", @@ -4253,11 +4196,11 @@ }, { "pin1": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O4" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O27" }, "name": "unnamedWire#170", @@ -4265,11 +4208,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O28" }, "pin2": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "O5" }, "name": "unnamedWire#171", @@ -4277,11 +4220,11 @@ }, { "pin1": { - "compName": "Splitter#16", + "compName": "Splitter#14", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O31" }, "name": "unnamedWire#172", @@ -4289,11 +4232,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O32" }, "pin2": { - "compName": "Splitter#16", + "compName": "Splitter#14", "pinName": "O1" }, "name": "unnamedWire#173", @@ -4301,11 +4244,11 @@ }, { "pin1": { - "compName": "Splitter#16", + "compName": "Splitter#14", "pinName": "O2" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O33" }, "name": "unnamedWire#174", @@ -4313,11 +4256,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O34" }, "pin2": { - "compName": "Splitter#16", + "compName": "Splitter#14", "pinName": "O3" }, "name": "unnamedWire#175", @@ -4325,11 +4268,11 @@ }, { "pin1": { - "compName": "Splitter#15", + "compName": "Splitter#13", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O35" }, "name": "unnamedWire#176", @@ -4337,11 +4280,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O36" }, "pin2": { - "compName": "Splitter#15", + "compName": "Splitter#13", "pinName": "O1" }, "name": "unnamedWire#177", @@ -4349,11 +4292,11 @@ }, { "pin1": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "I" }, "pin2": { - "compName": "Splitter#14", + "compName": "Splitter#12", "pinName": "I" }, "name": "unnamedWire#178", @@ -4370,11 +4313,11 @@ }, { "pin1": { - "compName": "Splitter#16", + "compName": "Splitter#14", "pinName": "I" }, "pin2": { - "compName": "Splitter#18", + "compName": "Splitter#16", "pinName": "I" }, "name": "unnamedWire#179", @@ -4391,11 +4334,11 @@ }, { "pin1": { - "compName": "Splitter#19", + "compName": "Splitter#17", "pinName": "I" }, "pin2": { - "compName": "Splitter#15", + "compName": "Splitter#13", "pinName": "I" }, "name": "unnamedWire#180", @@ -4412,11 +4355,11 @@ }, { "pin1": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O0" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O0" }, "name": "unnamedWire#181", @@ -4424,11 +4367,11 @@ }, { "pin1": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O1" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O1" }, "name": "unnamedWire#182", @@ -4436,11 +4379,11 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O2" }, "pin2": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O2" }, "name": "unnamedWire#183", @@ -4448,11 +4391,11 @@ }, { "pin1": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O3" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O3" }, "name": "unnamedWire#184", @@ -4460,11 +4403,11 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O4" }, "pin2": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O4" }, "name": "unnamedWire#185", @@ -4472,11 +4415,11 @@ }, { "pin1": { - "compName": "Splitter#17", + "compName": "Splitter#15", "pinName": "O5" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O5" }, "name": "unnamedWire#186", @@ -4484,11 +4427,11 @@ }, { "pin1": { - "compName": "Splitter#18", + "compName": "Splitter#16", "pinName": "O0" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O6" }, "name": "unnamedWire#187", @@ -4496,11 +4439,11 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O7" }, "pin2": { - "compName": "Splitter#18", + "compName": "Splitter#16", "pinName": "O1" }, "name": "unnamedWire#188", @@ -4508,11 +4451,11 @@ }, { "pin1": { - "compName": "Splitter#18", + "compName": "Splitter#16", "pinName": "O2" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O8" }, "name": "unnamedWire#189", @@ -4520,11 +4463,11 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O9" }, "pin2": { - "compName": "Splitter#18", + "compName": "Splitter#16", "pinName": "O3" }, "name": "unnamedWire#190", @@ -4532,11 +4475,11 @@ }, { "pin1": { - "compName": "Splitter#19", + "compName": "Splitter#17", "pinName": "O0" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O11" }, "name": "unnamedWire#191", @@ -4544,11 +4487,11 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O12" }, "pin2": { - "compName": "Splitter#19", + "compName": "Splitter#17", "pinName": "O1" }, "name": "unnamedWire#192", @@ -4556,11 +4499,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O15" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O73" }, "name": "unnamedWire#193", @@ -4568,11 +4511,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O72" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O14" }, "name": "unnamedWire#194", @@ -4580,11 +4523,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O13" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O71" }, "name": "unnamedWire#195", @@ -4592,11 +4535,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O70" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O12" }, "name": "unnamedWire#196", @@ -4604,11 +4547,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O11" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O69" }, "name": "unnamedWire#197", @@ -4616,11 +4559,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O68" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O10" }, "name": "unnamedWire#198", @@ -4628,11 +4571,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O9" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O67" }, "name": "unnamedWire#199", @@ -4640,11 +4583,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O66" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O8" }, "name": "unnamedWire#200", @@ -4652,11 +4595,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O7" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O65" }, "name": "unnamedWire#201", @@ -4664,11 +4607,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O64" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O6" }, "name": "unnamedWire#202", @@ -4676,11 +4619,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O5" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O63" }, "name": "unnamedWire#203", @@ -4688,11 +4631,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O62" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O4" }, "name": "unnamedWire#204", @@ -4700,11 +4643,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O3" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O61" }, "name": "unnamedWire#205", @@ -4712,11 +4655,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O60" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O2" }, "name": "unnamedWire#206", @@ -4724,11 +4667,11 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O59" }, "name": "unnamedWire#207", @@ -4736,11 +4679,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O58" }, "pin2": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "O0" }, "name": "unnamedWire#208", @@ -4748,11 +4691,11 @@ }, { "pin1": { - "compName": "Splitter#21", + "compName": "Splitter#19", "pinName": "O2" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O57" }, "name": "unnamedWire#209", @@ -4760,11 +4703,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O56" }, "pin2": { - "compName": "Splitter#21", + "compName": "Splitter#19", "pinName": "O1" }, "name": "unnamedWire#210", @@ -4772,11 +4715,11 @@ }, { "pin1": { - "compName": "Splitter#21", + "compName": "Splitter#19", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O55" }, "name": "unnamedWire#211", @@ -4784,11 +4727,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O54" }, "pin2": { - "compName": "Splitter#22", + "compName": "Splitter#20", "pinName": "O2" }, "name": "unnamedWire#212", @@ -4796,11 +4739,11 @@ }, { "pin1": { - "compName": "Splitter#22", + "compName": "Splitter#20", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O53" }, "name": "unnamedWire#213", @@ -4808,11 +4751,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O52" }, "pin2": { - "compName": "Splitter#22", + "compName": "Splitter#20", "pinName": "O0" }, "name": "unnamedWire#214", @@ -4820,11 +4763,11 @@ }, { "pin1": { - "compName": "Splitter#23", + "compName": "Splitter#21", "pinName": "O2" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O51" }, "name": "unnamedWire#215", @@ -4832,11 +4775,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O50" }, "pin2": { - "compName": "Splitter#23", + "compName": "Splitter#21", "pinName": "O1" }, "name": "unnamedWire#216", @@ -4844,11 +4787,11 @@ }, { "pin1": { - "compName": "Splitter#23", + "compName": "Splitter#21", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O49" }, "name": "unnamedWire#217", @@ -4856,11 +4799,11 @@ }, { "pin1": { - "compName": "Splitter#24", + "compName": "Splitter#22", "pinName": "O3" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O48" }, "name": "unnamedWire#218", @@ -4868,11 +4811,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O47" }, "pin2": { - "compName": "Splitter#24", + "compName": "Splitter#22", "pinName": "O2" }, "name": "unnamedWire#219", @@ -4880,11 +4823,11 @@ }, { "pin1": { - "compName": "Splitter#24", + "compName": "Splitter#22", "pinName": "O1" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O46" }, "name": "unnamedWire#220", @@ -4892,11 +4835,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O45" }, "pin2": { - "compName": "Splitter#24", + "compName": "Splitter#22", "pinName": "O0" }, "name": "unnamedWire#221", @@ -4904,11 +4847,11 @@ }, { "pin1": { - "compName": "Splitter#25", + "compName": "Splitter#23", "pinName": "O0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O40" }, "name": "unnamedWire#222", @@ -4916,11 +4859,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O41" }, "pin2": { - "compName": "Splitter#25", + "compName": "Splitter#23", "pinName": "O1" }, "name": "unnamedWire#223", @@ -4928,11 +4871,11 @@ }, { "pin1": { - "compName": "Splitter#25", + "compName": "Splitter#23", "pinName": "O2" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O42" }, "name": "unnamedWire#224", @@ -4940,11 +4883,11 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O43" }, "pin2": { - "compName": "Splitter#25", + "compName": "Splitter#23", "pinName": "O3" }, "name": "unnamedWire#225", @@ -4956,7 +4899,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "O10" }, "name": "unnamedWire#226", @@ -4969,11 +4912,11 @@ }, { "pin1": { - "compName": "Splitter#27", + "compName": "Splitter#25", "pinName": "I" }, "pin2": { - "compName": "Splitter#23", + "compName": "Splitter#21", "pinName": "I" }, "name": "unnamedWire#227", @@ -4981,11 +4924,11 @@ }, { "pin1": { - "compName": "Splitter#28", + "compName": "Splitter#26", "pinName": "I" }, "pin2": { - "compName": "Splitter#22", + "compName": "Splitter#20", "pinName": "I" }, "name": "unnamedWire#228", @@ -4993,11 +4936,11 @@ }, { "pin1": { - "compName": "Splitter#26", + "compName": "Splitter#24", "pinName": "I" }, "pin2": { - "compName": "Splitter#21", + "compName": "Splitter#19", "pinName": "I" }, "name": "unnamedWire#229", @@ -5005,11 +4948,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O0" }, "pin2": { - "compName": "Splitter#26", + "compName": "Splitter#24", "pinName": "O0" }, "name": "unnamedWire#230", @@ -5017,11 +4960,11 @@ }, { "pin1": { - "compName": "Splitter#26", + "compName": "Splitter#24", "pinName": "O1" }, "pin2": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O1" }, "name": "unnamedWire#231", @@ -5029,11 +4972,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O2" }, "pin2": { - "compName": "Splitter#26", + "compName": "Splitter#24", "pinName": "O2" }, "name": "unnamedWire#232", @@ -5041,11 +4984,11 @@ }, { "pin1": { - "compName": "Splitter#28", + "compName": "Splitter#26", "pinName": "O0" }, "pin2": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O3" }, "name": "unnamedWire#233", @@ -5053,11 +4996,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O4" }, "pin2": { - "compName": "Splitter#28", + "compName": "Splitter#26", "pinName": "O1" }, "name": "unnamedWire#234", @@ -5065,11 +5008,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O5" }, "pin2": { - "compName": "Splitter#28", + "compName": "Splitter#26", "pinName": "O2" }, "name": "unnamedWire#235", @@ -5077,11 +5020,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O6" }, "pin2": { - "compName": "Splitter#27", + "compName": "Splitter#25", "pinName": "O0" }, "name": "unnamedWire#236", @@ -5089,7 +5032,7 @@ }, { "pin1": { - "compName": "Splitter#27", + "compName": "Splitter#25", "pinName": "O1" }, "pin2": { @@ -5101,11 +5044,11 @@ }, { "pin1": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O8" }, "pin2": { - "compName": "Splitter#27", + "compName": "Splitter#25", "pinName": "O2" }, "name": "unnamedWire#238", @@ -5117,7 +5060,7 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "O7" }, "name": "unnamedWire#239", @@ -5125,7 +5068,7 @@ }, { "pin1": { - "compName": "Splitter#13", + "compName": "Splitter#11", "pinName": "I" }, "pin2": { @@ -5150,7 +5093,7 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O0" }, "pin2": { @@ -5175,12 +5118,12 @@ }, { "pin1": { - "compName": "Splitter#5", + "compName": "Splitter#3", "pinName": "I" }, "pin2": { - "compName": "Splitter#3", - "pinName": "I" + "compName": "Am2900MPROM#0", + "pinName": "A" }, "name": "unnamedWire#242", "path": [ @@ -5190,21 +5133,25 @@ }, { "x": 590.0, - "y": 335.0 + "y": 290.0 }, { - "x": 240.0, - "y": 335.0 + "x": 290.0, + "y": 290.0 + }, + { + "x": 290.0, + "y": 415.0 } ] }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O15" }, "pin2": { - "compName": "Splitter#36", + "compName": "Splitter#34", "pinName": "O3" }, "name": "unnamedWire#243", @@ -5212,11 +5159,11 @@ }, { "pin1": { - "compName": "Splitter#36", + "compName": "Splitter#34", "pinName": "O2" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O14" }, "name": "unnamedWire#244", @@ -5224,11 +5171,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O13" }, "pin2": { - "compName": "Splitter#36", + "compName": "Splitter#34", "pinName": "O1" }, "name": "unnamedWire#245", @@ -5236,11 +5183,11 @@ }, { "pin1": { - "compName": "Splitter#36", + "compName": "Splitter#34", "pinName": "O0" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O12" }, "name": "unnamedWire#246", @@ -5248,11 +5195,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O11" }, "pin2": { - "compName": "Splitter#37", + "compName": "Splitter#35", "pinName": "O3" }, "name": "unnamedWire#247", @@ -5260,11 +5207,11 @@ }, { "pin1": { - "compName": "Splitter#37", + "compName": "Splitter#35", "pinName": "O2" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O10" }, "name": "unnamedWire#248", @@ -5272,11 +5219,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O9" }, "pin2": { - "compName": "Splitter#37", + "compName": "Splitter#35", "pinName": "O1" }, "name": "unnamedWire#249", @@ -5284,11 +5231,11 @@ }, { "pin1": { - "compName": "Splitter#37", + "compName": "Splitter#35", "pinName": "O0" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O8" }, "name": "unnamedWire#250", @@ -5296,11 +5243,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O7" }, "pin2": { - "compName": "Splitter#38", + "compName": "Splitter#36", "pinName": "O3" }, "name": "unnamedWire#251", @@ -5308,11 +5255,11 @@ }, { "pin1": { - "compName": "Splitter#38", + "compName": "Splitter#36", "pinName": "O2" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O6" }, "name": "unnamedWire#252", @@ -5320,11 +5267,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O5" }, "pin2": { - "compName": "Splitter#38", + "compName": "Splitter#36", "pinName": "O1" }, "name": "unnamedWire#253", @@ -5332,11 +5279,11 @@ }, { "pin1": { - "compName": "Splitter#38", + "compName": "Splitter#36", "pinName": "O0" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O4" }, "name": "unnamedWire#254", @@ -5344,11 +5291,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O3" }, "pin2": { - "compName": "Splitter#39", + "compName": "Splitter#37", "pinName": "O3" }, "name": "unnamedWire#255", @@ -5356,11 +5303,11 @@ }, { "pin1": { - "compName": "Splitter#39", + "compName": "Splitter#37", "pinName": "O2" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O2" }, "name": "unnamedWire#256", @@ -5368,11 +5315,11 @@ }, { "pin1": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O1" }, "pin2": { - "compName": "Splitter#39", + "compName": "Splitter#37", "pinName": "O1" }, "name": "unnamedWire#257", @@ -5380,11 +5327,11 @@ }, { "pin1": { - "compName": "Splitter#39", + "compName": "Splitter#37", "pinName": "O0" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "O0" }, "name": "unnamedWire#258", @@ -5392,11 +5339,11 @@ }, { "pin1": { - "compName": "Splitter#32", + "compName": "Splitter#30", "pinName": "O3" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O15" }, "name": "unnamedWire#259", @@ -5404,11 +5351,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O14" }, "pin2": { - "compName": "Splitter#32", + "compName": "Splitter#30", "pinName": "O2" }, "name": "unnamedWire#260", @@ -5416,11 +5363,11 @@ }, { "pin1": { - "compName": "Splitter#32", + "compName": "Splitter#30", "pinName": "O1" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O13" }, "name": "unnamedWire#261", @@ -5428,11 +5375,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O12" }, "pin2": { - "compName": "Splitter#32", + "compName": "Splitter#30", "pinName": "O0" }, "name": "unnamedWire#262", @@ -5440,11 +5387,11 @@ }, { "pin1": { - "compName": "Splitter#33", + "compName": "Splitter#31", "pinName": "O3" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O11" }, "name": "unnamedWire#263", @@ -5452,11 +5399,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O10" }, "pin2": { - "compName": "Splitter#33", + "compName": "Splitter#31", "pinName": "O2" }, "name": "unnamedWire#264", @@ -5464,11 +5411,11 @@ }, { "pin1": { - "compName": "Splitter#33", + "compName": "Splitter#31", "pinName": "O1" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O9" }, "name": "unnamedWire#265", @@ -5476,11 +5423,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O8" }, "pin2": { - "compName": "Splitter#33", + "compName": "Splitter#31", "pinName": "O0" }, "name": "unnamedWire#266", @@ -5488,11 +5435,11 @@ }, { "pin1": { - "compName": "Splitter#34", + "compName": "Splitter#32", "pinName": "O3" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O7" }, "name": "unnamedWire#267", @@ -5500,11 +5447,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O6" }, "pin2": { - "compName": "Splitter#34", + "compName": "Splitter#32", "pinName": "O2" }, "name": "unnamedWire#268", @@ -5512,11 +5459,11 @@ }, { "pin1": { - "compName": "Splitter#34", + "compName": "Splitter#32", "pinName": "O1" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O5" }, "name": "unnamedWire#269", @@ -5524,11 +5471,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O4" }, "pin2": { - "compName": "Splitter#34", + "compName": "Splitter#32", "pinName": "O0" }, "name": "unnamedWire#270", @@ -5536,11 +5483,11 @@ }, { "pin1": { - "compName": "Splitter#35", + "compName": "Splitter#33", "pinName": "O3" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O3" }, "name": "unnamedWire#271", @@ -5548,11 +5495,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O2" }, "pin2": { - "compName": "Splitter#35", + "compName": "Splitter#33", "pinName": "O2" }, "name": "unnamedWire#272", @@ -5560,11 +5507,11 @@ }, { "pin1": { - "compName": "Splitter#35", + "compName": "Splitter#33", "pinName": "O1" }, "pin2": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O1" }, "name": "unnamedWire#273", @@ -5572,11 +5519,11 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "O0" }, "pin2": { - "compName": "Splitter#35", + "compName": "Splitter#33", "pinName": "O0" }, "name": "unnamedWire#274", @@ -5588,7 +5535,7 @@ "pinName": "Y" }, "pin2": { - "compName": "Splitter#30", + "compName": "Splitter#28", "pinName": "I" }, "name": "unnamedWire#275", @@ -5605,7 +5552,7 @@ "pinName": "S" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O74" }, "name": "unnamedWire#276", @@ -5634,7 +5581,7 @@ }, { "pin1": { - "compName": "Splitter#20", + "compName": "Splitter#18", "pinName": "I" }, "pin2": { @@ -5667,7 +5614,7 @@ }, { "pin1": { - "compName": "Splitter#31", + "compName": "Splitter#29", "pinName": "I" }, "pin2": { @@ -5760,18 +5707,6 @@ "name": "unnamedWire#283", "path": [] }, - { - "pin1": { - "compName": "WireCrossPoint#33", - "pinName": "" - }, - "pin2": { - "compName": "WireCrossPoint#34", - "pinName": "" - }, - "name": "unnamedWire#284", - "path": [] - }, { "pin1": { "compName": "WireCrossPoint#19", @@ -5781,19 +5716,7 @@ "compName": "WireCrossPoint#23", "pinName": "" }, - "name": "unnamedWire#285", - "path": [] - }, - { - "pin1": { - "compName": "WireCrossPoint#34", - "pinName": "" - }, - "pin2": { - "compName": "WireCrossPoint#35", - "pinName": "" - }, - "name": "unnamedWire#286", + "name": "unnamedWire#284", "path": [] }, { @@ -5805,7 +5728,7 @@ "compName": "WireCrossPoint#22", "pinName": "" }, - "name": "unnamedWire#287", + "name": "unnamedWire#285", "path": [ { "x": 450.0, @@ -5822,7 +5745,7 @@ "compName": "TriStateBuffer#3", "pinName": "OUT" }, - "name": "unnamedWire#288", + "name": "unnamedWire#286", "path": [ { "x": 455.0, @@ -5839,7 +5762,7 @@ "compName": "dff16_invwe#0", "pinName": "D" }, - "name": "unnamedWire#289", + "name": "unnamedWire#287", "path": [ { "x": 475.0, @@ -5849,26 +5772,26 @@ }, { "pin1": { - "compName": "Splitter#40", + "compName": "Splitter#38", "pinName": "O1" }, "pin2": { "compName": "WireCrossPoint#12", "pinName": "" }, - "name": "unnamedWire#290", + "name": "unnamedWire#288", "path": [] }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O1" }, "pin2": { "compName": "dff16_invwe#0", "pinName": "_WE" }, - "name": "unnamedWire#291", + "name": "unnamedWire#289", "path": [ { "x": 355.0, @@ -5879,146 +5802,57 @@ "y": 320.0 }, { - "x": 485.0, - "y": 185.0 - } - ] - }, - { - "pin1": { - "compName": "WireCrossPoint#35", - "pinName": "" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O0" - }, - "name": "unnamedWire#292", - "path": [ - { - "x": 315.0, - "y": 400.0 - } - ] - }, - { - "pin1": { - "compName": "WireCrossPoint#35", - "pinName": "" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O1" - }, - "name": "unnamedWire#293", - "path": [] - }, - { - "pin1": { - "compName": "WireCrossPoint#34", - "pinName": "" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O2" - }, - "name": "unnamedWire#294", - "path": [] - }, - { - "pin1": { - "compName": "WireCrossPoint#33", - "pinName": "" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O3" - }, - "name": "unnamedWire#295", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#42", - "pinName": "O2" - }, - "pin2": { - "compName": "Splitter#10", - "pinName": "O4" - }, - "name": "unnamedWire#296", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#10", - "pinName": "O3" - }, - "pin2": { - "compName": "Splitter#42", - "pinName": "O1" - }, - "name": "unnamedWire#297", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#42", - "pinName": "O0" - }, - "pin2": { - "compName": "Splitter#10", - "pinName": "O2" - }, - "name": "unnamedWire#298", - "path": [] + "x": 485.0, + "y": 185.0 + } + ] }, { "pin1": { - "compName": "Splitter#3", - "pinName": "O7" + "compName": "Splitter#40", + "pinName": "O2" }, "pin2": { - "compName": "Splitter#4", - "pinName": "O11" + "compName": "Splitter#8", + "pinName": "O4" }, - "name": "unnamedWire#299", + "name": "unnamedWire#290", "path": [] }, { "pin1": { - "compName": "Splitter#3", - "pinName": "O6" + "compName": "Splitter#8", + "pinName": "O3" }, "pin2": { - "compName": "Splitter#4", - "pinName": "O10" + "compName": "Splitter#40", + "pinName": "O1" }, - "name": "unnamedWire#300", + "name": "unnamedWire#291", "path": [] }, { "pin1": { - "compName": "Splitter#3", - "pinName": "O5" + "compName": "Splitter#40", + "pinName": "O0" }, "pin2": { - "compName": "Splitter#4", - "pinName": "O9" + "compName": "Splitter#8", + "pinName": "O2" }, - "name": "unnamedWire#301", + "name": "unnamedWire#292", "path": [] }, { "pin1": { - "compName": "Splitter#41", + "compName": "Splitter#39", "pinName": "O3" }, "pin2": { "compName": "mux1_4#0", "pinName": "I1_1" }, - "name": "unnamedWire#302", + "name": "unnamedWire#293", "path": [] }, { @@ -6027,22 +5861,22 @@ "pinName": "I1_2" }, "pin2": { - "compName": "Splitter#41", + "compName": "Splitter#39", "pinName": "O2" }, - "name": "unnamedWire#303", + "name": "unnamedWire#294", "path": [] }, { "pin1": { - "compName": "Splitter#41", + "compName": "Splitter#39", "pinName": "O1" }, "pin2": { "compName": "mux1_4#0", "pinName": "I1_3" }, - "name": "unnamedWire#304", + "name": "unnamedWire#295", "path": [] }, { @@ -6051,22 +5885,22 @@ "pinName": "I1_4" }, "pin2": { - "compName": "Splitter#41", + "compName": "Splitter#39", "pinName": "O0" }, - "name": "unnamedWire#305", + "name": "unnamedWire#296", "path": [] }, { "pin1": { - "compName": "Splitter#43", + "compName": "Splitter#41", "pinName": "O3" }, "pin2": { "compName": "mux1_4#1", "pinName": "I1_1" }, - "name": "unnamedWire#306", + "name": "unnamedWire#297", "path": [] }, { @@ -6075,22 +5909,22 @@ "pinName": "I1_2" }, "pin2": { - "compName": "Splitter#43", + "compName": "Splitter#41", "pinName": "O2" }, - "name": "unnamedWire#307", + "name": "unnamedWire#298", "path": [] }, { "pin1": { - "compName": "Splitter#43", + "compName": "Splitter#41", "pinName": "O1" }, "pin2": { "compName": "mux1_4#1", "pinName": "I1_3" }, - "name": "unnamedWire#308", + "name": "unnamedWire#299", "path": [] }, { @@ -6099,22 +5933,22 @@ "pinName": "I1_4" }, "pin2": { - "compName": "Splitter#43", + "compName": "Splitter#41", "pinName": "O0" }, - "name": "unnamedWire#309", + "name": "unnamedWire#300", "path": [] }, { "pin1": { - "compName": "Splitter#41", + "compName": "Splitter#39", "pinName": "I" }, "pin2": { - "compName": "Splitter#24", + "compName": "Splitter#22", "pinName": "I" }, - "name": "unnamedWire#310", + "name": "unnamedWire#301", "path": [ { "x": 600.0, @@ -6140,14 +5974,14 @@ }, { "pin1": { - "compName": "Splitter#25", + "compName": "Splitter#23", "pinName": "I" }, "pin2": { - "compName": "Splitter#43", + "compName": "Splitter#41", "pinName": "I" }, - "name": "unnamedWire#311", + "name": "unnamedWire#302", "path": [ { "x": 760.0, @@ -6185,10 +6019,10 @@ "pinName": "S0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O44" }, - "name": "unnamedWire#312", + "name": "unnamedWire#303", "path": [ { "x": 605.0, @@ -6226,10 +6060,10 @@ "pinName": "S0" }, "pin2": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O39" }, - "name": "unnamedWire#313", + "name": "unnamedWire#304", "path": [ { "x": 615.0, @@ -6267,10 +6101,10 @@ "pinName": "" }, "pin2": { - "compName": "Splitter#29", + "compName": "Splitter#27", "pinName": "I" }, - "name": "unnamedWire#314", + "name": "unnamedWire#305", "path": [ { "x": 820.0, @@ -6291,7 +6125,7 @@ "compName": "WireCrossPoint#27", "pinName": "" }, - "name": "unnamedWire#315", + "name": "unnamedWire#306", "path": [] }, { @@ -6303,7 +6137,7 @@ "compName": "WireCrossPoint#28", "pinName": "" }, - "name": "unnamedWire#316", + "name": "unnamedWire#307", "path": [] }, { @@ -6315,7 +6149,7 @@ "compName": "Am2901#0", "pinName": "I" }, - "name": "unnamedWire#317", + "name": "unnamedWire#308", "path": [ { "x": 820.0, @@ -6332,7 +6166,7 @@ "compName": "Am2901#1", "pinName": "I" }, - "name": "unnamedWire#318", + "name": "unnamedWire#309", "path": [ { "x": 945.0, @@ -6349,7 +6183,7 @@ "compName": "Am2901#2", "pinName": "I" }, - "name": "unnamedWire#319", + "name": "unnamedWire#310", "path": [ { "x": 1070.0, @@ -6366,7 +6200,7 @@ "compName": "Am2901#3", "pinName": "I" }, - "name": "unnamedWire#320", + "name": "unnamedWire#311", "path": [ { "x": 1205.0, @@ -6380,14 +6214,14 @@ }, { "pin1": { - "compName": "Splitter#32", + "compName": "Splitter#30", "pinName": "I" }, "pin2": { "compName": "Am2901#3", "pinName": "Y" }, - "name": "unnamedWire#321", + "name": "unnamedWire#312", "path": [ { "x": 910.0, @@ -6401,14 +6235,14 @@ }, { "pin1": { - "compName": "Splitter#33", + "compName": "Splitter#31", "pinName": "I" }, "pin2": { "compName": "Am2901#2", "pinName": "Y" }, - "name": "unnamedWire#322", + "name": "unnamedWire#313", "path": [ { "x": 950.0, @@ -6422,14 +6256,14 @@ }, { "pin1": { - "compName": "Splitter#34", + "compName": "Splitter#32", "pinName": "I" }, "pin2": { "compName": "Am2901#1", "pinName": "Y" }, - "name": "unnamedWire#323", + "name": "unnamedWire#314", "path": [ { "x": 990.0, @@ -6447,10 +6281,10 @@ "pinName": "Y" }, "pin2": { - "compName": "Splitter#35", + "compName": "Splitter#33", "pinName": "I" }, - "name": "unnamedWire#324", + "name": "unnamedWire#315", "path": [ { "x": 800.0, @@ -6468,10 +6302,10 @@ "pinName": "D" }, "pin2": { - "compName": "Splitter#39", + "compName": "Splitter#37", "pinName": "I" }, - "name": "unnamedWire#325", + "name": "unnamedWire#316", "path": [ { "x": 785.0, @@ -6485,14 +6319,14 @@ }, { "pin1": { - "compName": "Splitter#38", + "compName": "Splitter#36", "pinName": "I" }, "pin2": { "compName": "Am2901#1", "pinName": "D" }, - "name": "unnamedWire#326", + "name": "unnamedWire#317", "path": [ { "x": 990.0, @@ -6506,14 +6340,14 @@ }, { "pin1": { - "compName": "Splitter#37", + "compName": "Splitter#35", "pinName": "I" }, "pin2": { "compName": "Am2901#2", "pinName": "D" }, - "name": "unnamedWire#327", + "name": "unnamedWire#318", "path": [ { "x": 950.0, @@ -6527,14 +6361,14 @@ }, { "pin1": { - "compName": "Splitter#36", + "compName": "Splitter#34", "pinName": "I" }, "pin2": { "compName": "Am2901#3", "pinName": "D" }, - "name": "unnamedWire#328", + "name": "unnamedWire#319", "path": [ { "x": 910.0, @@ -6555,7 +6389,7 @@ "compName": "WireCrossPoint#29", "pinName": "" }, - "name": "unnamedWire#329", + "name": "unnamedWire#320", "path": [] }, { @@ -6567,7 +6401,7 @@ "compName": "BitDisplay#1", "pinName": "" }, - "name": "unnamedWire#330", + "name": "unnamedWire#321", "path": [ { "x": 275.0, @@ -6575,18 +6409,6 @@ } ] }, - { - "pin1": { - "compName": "Splitter#3", - "pinName": "O4" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O8" - }, - "name": "unnamedWire#331", - "path": [] - }, { "pin1": { "compName": "WireCrossPoint#29", @@ -6596,7 +6418,7 @@ "compName": "mux1_16#0", "pinName": "I0" }, - "name": "unnamedWire#332", + "name": "unnamedWire#322", "path": [ { "x": 250.0, @@ -6613,7 +6435,7 @@ "compName": "BitDisplay#2", "pinName": "" }, - "name": "unnamedWire#333", + "name": "unnamedWire#323", "path": [ { "x": 275.0, @@ -6623,14 +6445,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#36", + "compName": "WireCrossPoint#33", "pinName": "" }, "pin2": { "compName": "WireCrossPoint#24", "pinName": "" }, - "name": "unnamedWire#334", + "name": "unnamedWire#324", "path": [ { "x": 340.0, @@ -6640,14 +6462,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#36", + "compName": "WireCrossPoint#33", "pinName": "" }, "pin2": { "compName": "NandGate#5", "pinName": "A" }, - "name": "unnamedWire#335", + "name": "unnamedWire#325", "path": [ { "x": 270.0, @@ -6669,26 +6491,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#37", + "compName": "WireCrossPoint#34", "pinName": "" }, "pin2": { "compName": "WireCrossPoint#32", "pinName": "" }, - "name": "unnamedWire#336", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#3", - "pinName": "O3" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O7" - }, - "name": "unnamedWire#337", + "name": "unnamedWire#326", "path": [] }, { @@ -6700,7 +6510,7 @@ "compName": "WireCrossPoint#30", "pinName": "" }, - "name": "unnamedWire#338", + "name": "unnamedWire#327", "path": [] }, { @@ -6712,62 +6522,9 @@ "compName": "WireCrossPoint#5", "pinName": "" }, - "name": "unnamedWire#339", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#3", - "pinName": "O2" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O6" - }, - "name": "unnamedWire#340", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#3", - "pinName": "O1" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O5" - }, - "name": "unnamedWire#341", - "path": [] - }, - { - "pin1": { - "compName": "Splitter#3", - "pinName": "O0" - }, - "pin2": { - "compName": "Splitter#4", - "pinName": "O4" - }, - "name": "unnamedWire#342", + "name": "unnamedWire#328", "path": [] }, - { - "pin1": { - "compName": "Splitter#4", - "pinName": "I" - }, - "pin2": { - "compName": "mux1_12#0", - "pinName": "I0" - }, - "name": "unnamedWire#343", - "path": [ - { - "x": 260.0, - "y": 435.0 - } - ] - }, { "pin1": { "compName": "Am2900MemoryController#0", @@ -6777,7 +6534,7 @@ "compName": "Am2900MainMemory#0", "pinName": "A" }, - "name": "unnamedWire#344", + "name": "unnamedWire#329", "path": [ { "x": 210.0, @@ -6791,14 +6548,14 @@ }, { "pin1": { - "compName": "Splitter#10", + "compName": "Splitter#8", "pinName": "O38" }, "pin2": { - "compName": "WireCrossPoint#37", + "compName": "WireCrossPoint#34", "pinName": "" }, - "name": "unnamedWire#345", + "name": "unnamedWire#330", "path": [ { "x": 725.0, @@ -6812,26 +6569,26 @@ }, { "pin1": { - "compName": "WireCrossPoint#44", + "compName": "WireCrossPoint#41", "pinName": "" }, "pin2": { "compName": "WireCrossPoint#20", "pinName": "" }, - "name": "unnamedWire#346", + "name": "unnamedWire#331", "path": [] }, { "pin1": { - "compName": "WireCrossPoint#44", + "compName": "WireCrossPoint#41", "pinName": "" }, "pin2": { "compName": "dff16#0", "pinName": "C" }, - "name": "unnamedWire#347", + "name": "unnamedWire#332", "path": [ { "x": 365.0, @@ -6841,14 +6598,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#42", + "compName": "WireCrossPoint#39", "pinName": "" }, "pin2": { "compName": "dff16_invwe#0", "pinName": "C" }, - "name": "unnamedWire#348", + "name": "unnamedWire#333", "path": [ { "x": 480.0, @@ -6858,14 +6615,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#43", + "compName": "WireCrossPoint#40", "pinName": "" }, "pin2": { "compName": "Am2910#0", "pinName": "Y" }, - "name": "unnamedWire#349", + "name": "unnamedWire#334", "path": [ { "x": 440.0, @@ -6875,14 +6632,14 @@ }, { "pin1": { - "compName": "WireCrossPoint#43", + "compName": "WireCrossPoint#40", "pinName": "" }, "pin2": { "compName": "BitDisplay#0", "pinName": "" }, - "name": "unnamedWire#350", + "name": "unnamedWire#335", "path": [] }, { @@ -6894,7 +6651,7 @@ "compName": "Am2900MemoryController#0", "pinName": "RWmem" }, - "name": "unnamedWire#351", + "name": "unnamedWire#336", "path": [ { "x": 215.0, @@ -6915,31 +6672,31 @@ "compName": "Am2900MemoryController#0", "pinName": "EN" }, - "name": "unnamedWire#352", + "name": "unnamedWire#337", "path": [] }, { "pin1": { - "compName": "WireCrossPoint#39", + "compName": "WireCrossPoint#36", "pinName": "" }, "pin2": { "compName": "Am2900MemoryController#0", "pinName": "C" }, - "name": "unnamedWire#353", + "name": "unnamedWire#338", "path": [] }, { "pin1": { - "compName": "WireCrossPoint#38", + "compName": "WireCrossPoint#35", "pinName": "" }, "pin2": { "compName": "Am2900MemoryController#0", "pinName": "_C" }, - "name": "unnamedWire#354", + "name": "unnamedWire#339", "path": [] }, { @@ -6948,10 +6705,10 @@ "pinName": "" }, "pin2": { - "compName": "WireCrossPoint#42", + "compName": "WireCrossPoint#39", "pinName": "" }, - "name": "unnamedWire#355", + "name": "unnamedWire#340", "path": [] } ], @@ -7017,6 +6774,12 @@ "delegateTarget": "Am2900MicroInstructionMemory#0" } }, + "mprom": { + "id": "delegating", + "params": { + "delegateTarget": "Am2900MPROM#0" + } + }, "muir_1": { "id": "delegating", "params": { diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MPROM.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MPROM.java new file mode 100644 index 00000000..fbfc44d0 --- /dev/null +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/components/ModelAm2900MPROM.java @@ -0,0 +1,29 @@ +package net.mograsim.logic.model.am2900.components; + +import net.mograsim.logic.model.am2900.machine.Am2900MPROMDefinition; +import net.mograsim.logic.model.model.LogicModelModifiable; +import net.mograsim.logic.model.serializing.IdentifyParams; +import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; +import net.mograsim.machine.mi.components.ModelMPROM; + +public class ModelAm2900MPROM extends ModelMPROM +{ + public ModelAm2900MPROM(LogicModelModifiable model, String name) + { + super(model, Am2900MPROMDefinition.instance, name); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "Am2900MPROM"; + } + + static + { + IndirectModelComponentCreator.setComponentSupplier(ModelAm2900MPROM.class.getCanonicalName(), (m, p, n) -> + { + return new ModelAm2900MPROM(m, n); + }); + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java index 80bce799..0fcaed54 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/AbstractAm2900MachineDefinition.java @@ -13,6 +13,7 @@ import net.mograsim.logic.model.am2900.machine.registers.am2910.Am2910RegisterGr import net.mograsim.logic.model.model.LogicModelModifiable; import net.mograsim.machine.ISASchema; import net.mograsim.machine.MachineDefinition; +import net.mograsim.machine.mi.MPROMDefinition; import net.mograsim.machine.registers.Register; import net.mograsim.machine.registers.RegisterGroup; @@ -123,4 +124,9 @@ public class AbstractAm2900MachineDefinition implements MachineDefinition return Am2900MicroInstructionMemoryDefinition.instance; } + @Override + public MPROMDefinition getMPROMDefinition() + { + return Am2900MPROMDefinition.instance; + } } diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MPROMDefinition.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MPROMDefinition.java new file mode 100644 index 00000000..e8f4afc2 --- /dev/null +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900MPROMDefinition.java @@ -0,0 +1,36 @@ +package net.mograsim.logic.model.am2900.machine; + +import net.mograsim.machine.mi.MPROMDefinition; + +public class Am2900MPROMDefinition implements MPROMDefinition +{ + public static final Am2900MPROMDefinition instance = new Am2900MPROMDefinition(); + + @Override + public int getMemoryAddressBits() + { + return 8; + } + + @Override + public long getMinimalAddress() + { + return 0; + } + + @Override + public long getMaximalAddress() + { + return 0xFF; + } + + @Override + public int getMicroInstructionMemoryAddressBits() + { + return 12; + } + + private Am2900MPROMDefinition() + { + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java index e48134f0..00c4d6da 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/machine/Am2900Machine.java @@ -20,9 +20,11 @@ import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.machine.Machine; import net.mograsim.machine.MachineDefinition; +import net.mograsim.machine.mi.AssignableMPROM; import net.mograsim.machine.mi.AssignableMicroInstructionMemory; import net.mograsim.machine.mi.MicroInstruction; import net.mograsim.machine.mi.MicroInstructionDefinition; +import net.mograsim.machine.mi.StandardMPROM; import net.mograsim.machine.mi.StandardMicroInstructionMemory; import net.mograsim.machine.mi.parameters.MicroInstructionParameter; import net.mograsim.machine.mi.parameters.ParameterClassification; @@ -39,6 +41,7 @@ public class Am2900Machine implements Machine private Timeline timeline; private AssignableMainMemory mainMemory; private AssignableMicroInstructionMemory instMemory; + private AssignableMPROM mprom; private CoreClock clock; private long activeInstructionAddress; @@ -59,9 +62,11 @@ public class Am2900Machine implements Machine mainMemory = new AssignableMainMemory(new WordAddressableMemory(am2900MachineDefinition.getMainMemoryDefinition())); instMemory = new AssignableMicroInstructionMemory( new StandardMicroInstructionMemory(am2900MachineDefinition.getMicroInstructionMemoryDefinition())); + mprom = new AssignableMPROM(new StandardMPROM(am2900MachineDefinition.getMPROMDefinition())); timeline = LogicCoreAdapter.convert(logicModel, params); am2900.setHighLevelState("ram.memory_binding", mainMemory); am2900.setHighLevelState("mpm.memory_binding", instMemory); + am2900.setHighLevelState("mprom.memory_binding", mprom); clock = logicModel.getComponentBySubmodelPath("Am2900.Clock#0", ModelClock.class).getClock(); clock.registerObserver(c -> { @@ -177,6 +182,12 @@ public class Am2900Machine implements Machine return instMemory; } + @Override + public AssignableMPROM getMPROM() + { + return mprom; + } + @Override public long getActiveMicroInstructionAddress() { diff --git a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/standardComponentIDMapping.json b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/standardComponentIDMapping.json index 273a74e7..c680e3cb 100644 --- a/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/standardComponentIDMapping.json +++ b/plugins/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/am2900/standardComponentIDMapping.json @@ -1,6 +1,7 @@ { "Am2900MainMemory": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.ModelAm2900MainMemory", "Am2900MicroInstructionMemory": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.ModelAm2900MicroInstructionMemory", + "Am2900MPROM": "resloader:Am2900Loader:class:net.mograsim.logic.model.am2900.components.ModelAm2900MPROM", "Am2900": "resloader:Am2900Loader:jsonres:net/mograsim/logic/model/am2900/components/Am2900.json", "Am2900MemoryController": "resloader:Am2900Loader:jsonres:net/mograsim/logic/model/am2900/components/Am2900MemoryController.json", diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/Machine.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/Machine.java index 66408ced..0f713b28 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/Machine.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/Machine.java @@ -6,6 +6,7 @@ import net.mograsim.logic.core.components.CoreClock; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.model.model.LogicModel; +import net.mograsim.machine.mi.AssignableMPROM; import net.mograsim.machine.mi.AssignableMicroInstructionMemory; import net.mograsim.machine.registers.Register; import net.mograsim.machine.standard.memory.AssignableMainMemory; @@ -35,6 +36,8 @@ public interface Machine AssignableMicroInstructionMemory getMicroInstructionMemory(); + AssignableMPROM getMPROM(); + void addActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener); void removeActiveMicroInstructionChangedListener(ActiveMicroInstructionChangedListener listener); diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/MachineDefinition.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/MachineDefinition.java index b568e7e0..a379c06f 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/MachineDefinition.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/MachineDefinition.java @@ -2,6 +2,7 @@ package net.mograsim.machine; import java.util.List; +import net.mograsim.machine.mi.MPROMDefinition; import net.mograsim.machine.mi.MicroInstructionMemoryDefinition; import net.mograsim.machine.registers.Register; import net.mograsim.machine.registers.RegisterGroup; @@ -81,4 +82,13 @@ public interface MachineDefinition */ MicroInstructionMemoryDefinition getMicroInstructionMemoryDefinition(); + /** + * Returns the definition of the machines instruction memory. + * + * @return the {@link InstructionMemoryDefinition} that defines the instruction memory. + * + * @author Daniel Kirschten + */ + MPROMDefinition getMPROMDefinition(); + } diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java index f0d755f5..8f1904d1 100644 --- a/plugins/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/StandardMemoryDefinition.java @@ -1,11 +1,11 @@ package net.mograsim.machine; -class StandardMemoryDefinition implements MemoryDefinition +public class StandardMemoryDefinition implements MemoryDefinition { private final int memoryAddressBits; private final long minimalAddress, maximalAddress; - StandardMemoryDefinition(int memoryAddressBits, long minimalAddress, long maximalAddress) + public StandardMemoryDefinition(int memoryAddressBits, long minimalAddress, long maximalAddress) { super(); this.memoryAddressBits = memoryAddressBits; diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java new file mode 100644 index 00000000..04050130 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/AssignableMPROM.java @@ -0,0 +1,99 @@ +package net.mograsim.machine.mi; + +import java.math.BigInteger; +import java.util.HashSet; +import java.util.Set; + +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.machine.Memory.MemoryCellModifiedListener; + +public class AssignableMPROM implements MPROM, MemoryCellModifiedListener +{ + + private Set observers = new HashSet<>(); + + private Set reassignmentListeners = new HashSet<>(); + private MPROM real = null; + + public AssignableMPROM(MPROM standardMPROM) + { + real = standardMPROM; + real.registerCellModifiedListener(this); + } + + public void bind(MPROM real) + { + this.real.deregisterCellModifiedListener(this); + this.real = real; + real.registerCellModifiedListener(this); + notifyMemoryChanged(-1); + notifyMemoryReassigned(real); + } + + @Override + public BitVector getCell(long address) + { + return real.getCell(address); + } + + @Override + public void setCell(long address, BitVector data) + { + real.setCell(address, data); + } + + @Override + public BigInteger getCellAsBigInteger(long address) + { + return real.getCellAsBigInteger(address); + } + + @Override + public void registerCellModifiedListener(MemoryCellModifiedListener ob) + { + observers.add(ob); + } + + @Override + public void deregisterCellModifiedListener(MemoryCellModifiedListener ob) + { + observers.remove(ob); + } + + private void notifyMemoryChanged(long address) + { + observers.forEach(o -> o.update(address)); + } + + @Override + public MPROMDefinition getDefinition() + { + return real.getDefinition(); + } + + @Override + public void update(long address) + { + notifyMemoryChanged(address); + } + + public void registerMemoryReassignedListener(MPROMReassignedListener listener) + { + reassignmentListeners.add(listener); + } + + public void deregisterMemoryReassignedListener(MPROMReassignedListener listener) + { + reassignmentListeners.remove(listener); + } + + private void notifyMemoryReassigned(MPROM newAssignee) + { + reassignmentListeners.forEach(l -> l.reassigned(newAssignee)); + } + + public static interface MPROMReassignedListener + { + public void reassigned(MPROM newAssignee); + } +} diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROM.java new file mode 100644 index 00000000..0d8be38d --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROM.java @@ -0,0 +1,14 @@ +package net.mograsim.machine.mi; + +import java.math.BigInteger; + +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.machine.Memory; + +public interface MPROM extends Memory +{ + public BigInteger getCellAsBigInteger(long address); + + @Override + public MPROMDefinition getDefinition(); +} \ No newline at end of file diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROMDefinition.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROMDefinition.java new file mode 100644 index 00000000..680a1fa2 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/MPROMDefinition.java @@ -0,0 +1,26 @@ +package net.mograsim.machine.mi; + +import net.mograsim.machine.MemoryDefinition; + +/** + * This interface provides a means to get information about the machines memory architecture. It is not bound to any actual memory. + * + * @author Christian Femers + * + */ +public interface MPROMDefinition extends MemoryDefinition +{ + /** + * The width in bits of an addressable memory cell/unit. This is often 8 (= one byte). The actual cells/lines of the memory may be a lot + * larger. + * + * @return the addressable unit width in bits + * @author Christian Femers + */ + int getMicroInstructionMemoryAddressBits(); + + public static MPROMDefinition create(int opcodeBits, int microInstructionMemoryAddressBits) + { + return new StandardMPROMDefinition(opcodeBits, microInstructionMemoryAddressBits); + } +} diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROM.java new file mode 100644 index 00000000..48df1656 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROM.java @@ -0,0 +1,73 @@ +package net.mograsim.machine.mi; + +import java.math.BigInteger; +import java.util.HashSet; + +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.machine.standard.memory.MemoryException; + +public class StandardMPROM implements MPROM +{ + private BitVector[] data; + private MPROMDefinition definition; + private HashSet observers = new HashSet<>(); + + public StandardMPROM(MPROMDefinition definition) + { + if (definition.size() > Integer.MAX_VALUE) + throw new MemoryException("Size of MPROM must be an int, not a long"); + this.definition = definition; + data = new BitVector[(int) definition.size()]; + } + + private int translate(long address) + { + return (int) (address - definition.getMinimalAddress()); + } + + @Override + public BitVector getCell(long address) + { + int translatedAddress = translate(address); + BitVector cell = data[translatedAddress]; + if (cell == null) + cell = data[translatedAddress] = BitVector.from(address * 16, definition.getMicroInstructionMemoryAddressBits()); + return cell; + } + + @Override + public BigInteger getCellAsBigInteger(long address) + { + return getCell(address).getUnsignedValue(); + } + + @Override + public void setCell(long address, BitVector data) + { + this.data[translate(address)] = data; + notifyMemoryChanged(address); + } + + @Override + public void registerCellModifiedListener(MemoryCellModifiedListener ob) + { + observers.add(ob); + } + + @Override + public void deregisterCellModifiedListener(MemoryCellModifiedListener ob) + { + observers.remove(ob); + } + + private void notifyMemoryChanged(long address) + { + observers.forEach(ob -> ob.update(address)); + } + + @Override + public MPROMDefinition getDefinition() + { + return definition; + } +} diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROMDefinition.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROMDefinition.java new file mode 100644 index 00000000..cbc97901 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/StandardMPROMDefinition.java @@ -0,0 +1,20 @@ +package net.mograsim.machine.mi; + +import net.mograsim.machine.StandardMemoryDefinition; + +class StandardMPROMDefinition extends StandardMemoryDefinition implements MPROMDefinition +{ + private final int microInstructionMemoryAddressBits; + + StandardMPROMDefinition(int opcodeBits, int microInstructionMemoryAddressBits) + { + super(opcodeBits, 0, 1 << opcodeBits); + this.microInstructionMemoryAddressBits = microInstructionMemoryAddressBits; + } + + @Override + public int getMicroInstructionMemoryAddressBits() + { + return microInstructionMemoryAddressBits; + } +} diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/CoreMPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/CoreMPROM.java new file mode 100644 index 00000000..e2d66dfd --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/CoreMPROM.java @@ -0,0 +1,81 @@ +package net.mograsim.machine.mi.components; + +import java.util.List; + +import net.mograsim.logic.core.components.BasicCoreComponent; +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.timeline.TimelineEventHandler; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; +import net.mograsim.machine.Memory.MemoryCellModifiedListener; +import net.mograsim.machine.mi.MPROM; +import net.mograsim.machine.mi.MPROMDefinition; + +public class CoreMPROM extends BasicCoreComponent +{ + private final ReadWriteEnd data; + private final ReadEnd address; + private final MPROMDefinition definition; + private final MemoryCellModifiedListener memObs; + private MPROM memory; + + public CoreMPROM(Timeline timeline, int processTime, MPROMDefinition definition, ReadWriteEnd data, ReadEnd address) + { + super(timeline, processTime); + if (data.width() != definition.getMicroInstructionMemoryAddressBits()) + throw new IllegalArgumentException( + String.format("Bit width of data wire does not match MPROM definition. Expected: %d Actual: %d", + definition.getMicroInstructionMemoryAddressBits(), data.width())); + if (address.width() != definition.getMemoryAddressBits()) + throw new IllegalArgumentException( + String.format("Bit width of address wire does not match MPROM definition. Expected: %d Actual: %d", + definition.getMemoryAddressBits(), address.width())); + + this.data = data; + this.address = address; + this.definition = definition; + this.memObs = a -> update(); + address.registerObserver(this); + } + + public void setMemory(MPROM memory) + { + if (memory != null && !memory.getDefinition().equals(definition)) + throw new IllegalArgumentException("Memory of incorrect memory definition given"); + if (this.memory != null) + this.memory.registerCellModifiedListener(memObs); + this.memory = memory; + if (memory != null) + memory.registerCellModifiedListener(memObs); + update(); + } + + public MPROM getMemory() + { + return memory; + } + + @Override + public List getAllInputs() + { + return List.of(address); + } + + @Override + public List getAllOutputs() + { + return List.of(data); + } + + @Override + protected TimelineEventHandler compute() + { + if (memory == null || !address.getValues().isBinary()) + return e -> data.feedSignals(Bit.U.toVector(data.width()));// TODO don't always feed U, but decide to feed X or U. + long addressed = address.getValues().getUnsignedValueLong(); + BitVector storedData = memory.getCell(addressed); + return e -> data.feedSignals(storedData); + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/MPROMAdapter.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/MPROMAdapter.java new file mode 100644 index 00000000..9eab2b49 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/MPROMAdapter.java @@ -0,0 +1,30 @@ +package net.mograsim.machine.mi.components; + +import java.util.Map; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.CoreWire; +import net.mograsim.logic.core.wires.CoreWire.ReadEnd; +import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd; +import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.modeladapter.CoreModelParameters; +import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter; + +public class MPROMAdapter implements ComponentAdapter +{ + @Override + public Class getSupportedClass() + { + return ModelMPROM.class; + } + + @Override + public void createAndLinkComponent(Timeline timeline, CoreModelParameters params, ModelMPROM modelComponent, + Map logicWiresPerPin) + { + ReadWriteEnd data = logicWiresPerPin.get(modelComponent.getDataPin()).createReadWriteEnd(); + ReadEnd address = logicWiresPerPin.get(modelComponent.getAddressPin()).createReadOnlyEnd(); + CoreMPROM mem = new CoreMPROM(timeline, 2, modelComponent.getDefinition(), data, address); + modelComponent.setCoreModelBinding(mem); + } +} \ No newline at end of file diff --git a/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMPROM.java b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMPROM.java new file mode 100644 index 00000000..b1f791c2 --- /dev/null +++ b/plugins/net.mograsim.machine/src/net/mograsim/machine/mi/components/ModelMPROM.java @@ -0,0 +1,118 @@ +package net.mograsim.machine.mi.components; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import net.mograsim.logic.model.model.LogicModelModifiable; +import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.model.wires.PinUsage; +import net.mograsim.logic.model.modeladapter.LogicCoreAdapter; +import net.mograsim.logic.model.serializing.IdentifyParams; +import net.mograsim.logic.model.snippets.HighLevelStateHandler; +import net.mograsim.machine.ModelMemory; +import net.mograsim.machine.mi.MPROM; +import net.mograsim.machine.mi.MPROMDefinition; + +public abstract class ModelMPROM extends ModelMemory +{ + private final Pin addrPin, dataPin; + private CoreMPROM memory; + private final MPROMDefinition definition; + + private final List> memoryBindingListeners; + + public ModelMPROM(LogicModelModifiable model, MPROMDefinition definition, String name) + { + super(model, 30, 80, name, "MPROM", false); + this.definition = definition; + addPin(addrPin = new Pin(model, this, "A", definition.getMemoryAddressBits(), PinUsage.INPUT, getWidth(), 30)); + addPin(dataPin = new Pin(model, this, "D", definition.getMicroInstructionMemoryAddressBits(), PinUsage.OUTPUT, getWidth(), 50)); + + memoryBindingListeners = new ArrayList<>(); + + setHighLevelStateHandler(new HighLevelStateHandler() + { + @Override + public Object get(String stateID) + { + if (stateID.equals("memory_binding")) + return memory.getMemory(); + throw new IllegalArgumentException("No high level state with ID " + stateID); + } + + @Override + public void set(String stateID, Object newState) + { + if (stateID.equals("memory_binding")) + { + memory.setMemory((MPROM) newState); + memoryBindingListeners.forEach(l -> l.accept(newState)); + } else + throw new IllegalArgumentException("No high level state with ID " + stateID); + } + + @Override + public void addListener(String stateID, Consumer stateChanged) + { + if (stateID.equals("memory_binding")) + memoryBindingListeners.add(stateChanged); + else + throw new IllegalArgumentException("No high level state with ID " + stateID); + } + + @Override + public void removeListener(String stateID, Consumer stateChanged) + { + if (stateID.equals("memory_binding")) + memoryBindingListeners.remove(stateChanged); + else + throw new IllegalArgumentException("No high level state with ID " + stateID); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return null; + } + + @Override + public Object getParamsForSerializing(IdentifyParams idParams) + { + return null; + } + }); + + init(); + } + + public MPROMDefinition getDefinition() + { + return definition; + } + + public Pin getAddressPin() + { + return addrPin; + } + + public Pin getDataPin() + { + return dataPin; + } + + public CoreMPROM getCoreMemory() + { + return memory; + } + + public void setCoreModelBinding(CoreMPROM memory) + { + this.memory = memory; + } + + static + { + LogicCoreAdapter.addComponentAdapter(new MPROMAdapter()); + } +} \ No newline at end of file -- 2.17.1