From de4ce44622b2a40c2ff4030467de8f56db917329 Mon Sep 17 00:00:00 2001 From: Christian Femers Date: Fri, 23 Aug 2019 04:42:13 +0200 Subject: [PATCH] Moved main memory to machine module Maybe there is some better structure possible? --- net.mograsim.logic.core/META-INF/MANIFEST.MF | 1 - .../logic/core/tests/ComponentTest.java | 42 ------------- net.mograsim.machine/.classpath | 14 ++++- net.mograsim.machine/META-INF/MANIFEST.MF | 8 ++- .../machine/standard/memory}/GUIMemoryWA.java | 4 +- .../memory/WordAddressableMemory.java | 2 +- .../memory}/WordAddressableMemoryAdapter.java | 5 +- .../WordAddressableMemoryComponent.java | 2 +- .../memory/WordAddressableMemoryTest.java | 61 +++++++++++++++++++ 9 files changed, 85 insertions(+), 54 deletions(-) rename {net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic => net.mograsim.machine/src/net/mograsim/machine/standard/memory}/GUIMemoryWA.java (95%) rename {net.mograsim.logic.core/src/net/mograsim/logic/core/components => net.mograsim.machine/src/net/mograsim/machine/standard}/memory/WordAddressableMemory.java (97%) rename {net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters => net.mograsim.machine/src/net/mograsim/machine/standard/memory}/WordAddressableMemoryAdapter.java (83%) rename {net.mograsim.logic.core/src/net/mograsim/logic/core/components => net.mograsim.machine/src/net/mograsim/machine/standard}/memory/WordAddressableMemoryComponent.java (97%) create mode 100644 net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java diff --git a/net.mograsim.logic.core/META-INF/MANIFEST.MF b/net.mograsim.logic.core/META-INF/MANIFEST.MF index 7312d958..2aff2ab9 100644 --- a/net.mograsim.logic.core/META-INF/MANIFEST.MF +++ b/net.mograsim.logic.core/META-INF/MANIFEST.MF @@ -6,7 +6,6 @@ Bundle-Version: 0.1.0.qualifier Export-Package: net.mograsim.logic.core, net.mograsim.logic.core.components, net.mograsim.logic.core.components.gates, - net.mograsim.logic.core.components.memory, net.mograsim.logic.core.timeline, net.mograsim.logic.core.types, net.mograsim.logic.core.wires diff --git a/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java b/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java index 6055296f..d0ae8c58 100644 --- a/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java +++ b/net.mograsim.logic.core/test/net/mograsim/logic/core/tests/ComponentTest.java @@ -23,7 +23,6 @@ import net.mograsim.logic.core.components.gates.NorGate; import net.mograsim.logic.core.components.gates.NotGate; import net.mograsim.logic.core.components.gates.OrGate; import net.mograsim.logic.core.components.gates.XorGate; -import net.mograsim.logic.core.components.memory.WordAddressableMemoryComponent; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; @@ -519,47 +518,6 @@ class ComponentTest test2.assertAfterSimulationIs(Bit.ONE); } - @Test - public void wordAddressableMemoryLargeTest() - { - Wire rW = new Wire(t, 1, 2); - Wire data = new Wire(t, 16, 2); - Wire address = new Wire(t, 64, 2); - ReadWriteEnd rWI = rW.createReadWriteEnd(); - ReadWriteEnd dataI = data.createReadWriteEnd(); - ReadWriteEnd addressI = address.createReadWriteEnd(); - - WordAddressableMemoryComponent memory = new WordAddressableMemoryComponent(t, 4, 4096L, Long.MAX_VALUE, data.createReadWriteEnd(), - rW.createReadOnlyEnd(), address.createReadOnlyEnd()); - - Random r = new Random(); - for (long j = 1; j > 0; j *= 2) - { - for (int i = 0; i < 50; i++) - { - String sAddress = String.format("%64s", BigInteger.valueOf(4096 + i + j).toString(2)).replace(' ', '0'); - sAddress = new StringBuilder(sAddress).reverse().toString(); - BitVector bAddress = BitVector.parse(sAddress); - addressI.feedSignals(bAddress); - t.executeAll(); - String random = BigInteger.valueOf(Math.abs(r.nextInt())).toString(5); - random = random.substring(Integer.max(0, random.length() - 16)); - random = String.format("%16s", random).replace(' ', '0'); - random = random.replace('2', 'X').replace('3', 'Z').replace('4', 'U'); - BitVector vector = BitVector.parse(random); - dataI.feedSignals(vector); - rWI.feedSignals(Bit.ZERO); - t.executeAll(); - rWI.feedSignals(Bit.ONE); - t.executeAll(); - dataI.clearSignals(); - t.executeAll(); - - assertBitArrayEquals(dataI.getValues(), vector.getBits()); - } - } - } - private static void assertBitArrayEquals(BitVector actual, Bit... expected) { assertArrayEquals(expected, actual.getBits()); diff --git a/net.mograsim.machine/.classpath b/net.mograsim.machine/.classpath index e801ebfb..c9d880bb 100644 --- a/net.mograsim.machine/.classpath +++ b/net.mograsim.machine/.classpath @@ -1,7 +1,17 @@ - + + + + + + + + + + + - + diff --git a/net.mograsim.machine/META-INF/MANIFEST.MF b/net.mograsim.machine/META-INF/MANIFEST.MF index 3be14f8a..518b6a13 100644 --- a/net.mograsim.machine/META-INF/MANIFEST.MF +++ b/net.mograsim.machine/META-INF/MANIFEST.MF @@ -7,5 +7,9 @@ Bundle-Vendor: Mograsim Team Automatic-Module-Name: net.mograsim.machine Bundle-RequiredExecutionEnvironment: JavaSE-11 Require-Bundle: net.mograsim.logic.core;bundle-version="0.1.0", - net.mograsim.logic.model;bundle-version="0.1.0" -Export-Package: net.mograsim.machine.isa + net.mograsim.logic.model;bundle-version="0.1.0", + net.mograsim.preferences +Export-Package: net.mograsim.machine, + net.mograsim.machine.isa, + net.mograsim.machine.isa.types, + net.mograsim.machine.standard.memory diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMemoryWA.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java similarity index 95% rename from net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMemoryWA.java rename to net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java index 464a8b10..3d63b470 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMemoryWA.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/GUIMemoryWA.java @@ -1,4 +1,4 @@ -package net.mograsim.logic.model.model.components.atomic; +package net.mograsim.machine.standard.memory; import org.eclipse.swt.graphics.Color; @@ -11,9 +11,9 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.components.GUIComponent; +import net.mograsim.logic.model.model.components.atomic.GUIAndGate; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; -import net.mograsim.logic.model.modeladapter.componentadapters.WordAddressableMemoryAdapter; import net.mograsim.logic.model.serializing.IdentifierGetter; import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; import net.mograsim.preferences.Preferences; diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemory.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java similarity index 97% rename from net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemory.java rename to net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java index 3e83832c..719c993e 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemory.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemory.java @@ -1,4 +1,4 @@ -package net.mograsim.logic.core.components.memory; +package net.mograsim.machine.standard.memory; import java.util.Arrays; import java.util.HashMap; diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/WordAddressableMemoryAdapter.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java similarity index 83% rename from net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/WordAddressableMemoryAdapter.java rename to net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java index 339c238b..bc979dc7 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/modeladapter/componentadapters/WordAddressableMemoryAdapter.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryAdapter.java @@ -1,15 +1,14 @@ -package net.mograsim.logic.model.modeladapter.componentadapters; +package net.mograsim.machine.standard.memory; import java.util.Map; -import net.mograsim.logic.core.components.memory.WordAddressableMemoryComponent; import net.mograsim.logic.core.timeline.Timeline; import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; -import net.mograsim.logic.model.model.components.atomic.GUIMemoryWA; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.modeladapter.LogicModelParameters; +import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter; public class WordAddressableMemoryAdapter implements ComponentAdapter { diff --git a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemoryComponent.java b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java similarity index 97% rename from net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemoryComponent.java rename to net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java index 33262717..4a3edde2 100644 --- a/net.mograsim.logic.core/src/net/mograsim/logic/core/components/memory/WordAddressableMemoryComponent.java +++ b/net.mograsim.machine/src/net/mograsim/machine/standard/memory/WordAddressableMemoryComponent.java @@ -1,4 +1,4 @@ -package net.mograsim.logic.core.components.memory; +package net.mograsim.machine.standard.memory; import java.util.List; diff --git a/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java b/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java new file mode 100644 index 00000000..74aeb3e2 --- /dev/null +++ b/net.mograsim.machine/test/net/mograsim/machine/standard/memory/WordAddressableMemoryTest.java @@ -0,0 +1,61 @@ +package net.mograsim.machine.standard.memory; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.math.BigInteger; +import java.util.Random; + +import org.junit.jupiter.api.Test; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.types.Bit; +import net.mograsim.logic.core.types.BitVector; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.core.wires.Wire.ReadWriteEnd; + +class WordAddressableMemoryTest { + + private Timeline t = new Timeline(10); + + @Test + public void wordAddressableMemoryLargeTest() + { + Wire rW = new Wire(t, 1, 2); + Wire data = new Wire(t, 16, 2); + Wire address = new Wire(t, 64, 2); + ReadWriteEnd rWI = rW.createReadWriteEnd(); + ReadWriteEnd dataI = data.createReadWriteEnd(); + ReadWriteEnd addressI = address.createReadWriteEnd(); + + WordAddressableMemoryComponent memory = new WordAddressableMemoryComponent(t, 4, 4096L, Long.MAX_VALUE, data.createReadWriteEnd(), + rW.createReadOnlyEnd(), address.createReadOnlyEnd()); + + Random r = new Random(); + for (long j = 1; j > 0; j *= 2) + { + for (int i = 0; i < 50; i++) + { + String sAddress = String.format("%64s", BigInteger.valueOf(4096 + i + j).toString(2)).replace(' ', '0'); + sAddress = new StringBuilder(sAddress).reverse().toString(); + BitVector bAddress = BitVector.parse(sAddress); + addressI.feedSignals(bAddress); + t.executeAll(); + String random = BigInteger.valueOf(Math.abs(r.nextInt())).toString(5); + random = random.substring(Integer.max(0, random.length() - 16)); + random = String.format("%16s", random).replace(' ', '0'); + random = random.replace('2', 'X').replace('3', 'Z').replace('4', 'U'); + BitVector vector = BitVector.parse(random); + dataI.feedSignals(vector); + rWI.feedSignals(Bit.ZERO); + t.executeAll(); + rWI.feedSignals(Bit.ONE); + t.executeAll(); + dataI.clearSignals(); + t.executeAll(); + + assertEquals(dataI.getValues(), vector); + } + } + } + +} -- 2.17.1