Fixed test setup and added support for high level state access
authorChristian Femers <femers@in.tum.de>
Mon, 2 Sep 2019 01:26:39 +0000 (03:26 +0200)
committerChristian Femers <femers@in.tum.de>
Mon, 2 Sep 2019 01:26:39 +0000 (03:26 +0200)
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910.java
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2910/TestableAm2910Impl.java

index 115f9cb..5290c5a 100644 (file)
@@ -1,5 +1,8 @@
 package net.mograsim.logic.model.am2900.am2910;
 
+import java.util.Arrays;
+import java.util.stream.Stream;
+
 import net.mograsim.logic.model.am2900.TestableCircuit;
 
 public interface TestableAm2910 extends TestableCircuit
@@ -19,6 +22,8 @@ public interface TestableAm2910 extends TestableCircuit
 
        void set_OE(String val_1_bit);
 
+       void setDirectly(Register r, String val_X_bit);
+
        String getY();
 
        String get_FULL();
@@ -29,8 +34,27 @@ public interface TestableAm2910 extends TestableCircuit
 
        String get_VECT();
 
+       String getDirectly(Register r);
+
        enum Am2910_Inst
        {
                JZ, CJS, JMAP, CJP, PUSH, JSRP, CJV, JRP, RFCT, RPCT, CRTN, CJPP, LDCT, LOOP, CONT, TWB;
        }
+
+       enum Register
+       {
+               S_0, S_1, S_2, S_3, S_4, SP, PC, REG_COUNT;
+
+               public static Stream<Register> stream()
+               {
+                       return Arrays.stream(values());
+               }
+
+               public int size()
+               {
+                       if (this == SP)
+                               return 3;
+                       return 12;
+               }
+       }
 }
index f3686aa..8b2cddf 100644 (file)
@@ -1,12 +1,9 @@
 package net.mograsim.logic.model.am2900.am2910;
 
-import org.junit.Test;
-
 import net.mograsim.logic.core.components.BitDisplay;
 import net.mograsim.logic.core.components.ManualSwitch;
 import net.mograsim.logic.core.timeline.Timeline;
 import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.logic.model.am2900.TestEnvironmentHelper;
 import net.mograsim.logic.model.am2900.TestEnvironmentHelper.DebugState;
 import net.mograsim.logic.model.model.components.GUIComponent;
@@ -22,13 +19,13 @@ public class TestableAm2910Impl implements TestableAm2910
        private ManualSwitch D;
        private ManualSwitch _CC;
        private ManualSwitch _CCEN;
-       private ManualSwitch _RDL;
+       private ManualSwitch _RLD;
        private ManualSwitch _OE;
        private BitDisplay _FULL;
        private BitDisplay Y;
        private BitDisplay _PL, _MAP, _VECT;
 
-       private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "GUIAm2910");
+       private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "file:components/am2910/GUIAm2910.json");
 
        @Override
        public void setup()
@@ -84,7 +81,7 @@ public class TestableAm2910Impl implements TestableAm2910
        @Override
        public void set_RLD(String val_1_bit)
        {
-               _RDL.setState(BitVector.parse(val_1_bit));
+               _RLD.setState(BitVector.parse(val_1_bit));
        }
 
        @Override
@@ -93,6 +90,12 @@ public class TestableAm2910Impl implements TestableAm2910
                _OE.setState(BitVector.parse(val_1_bit));
        }
 
+       @Override
+       public void setDirectly(Register r, String val_X_bit)
+       {
+               am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_X_bit));
+       }
+
        @Override
        public String getY()
        {
@@ -123,4 +126,30 @@ public class TestableAm2910Impl implements TestableAm2910
                return _VECT.getDisplayedValue().toString();
        }
 
+       @Override
+       public String getDirectly(Register r)
+       {
+               return am2901.getHighLevelState(regToStateID(r)).toString();
+       }
+
+       private static String regToStateID(Register r)
+       {
+               switch (r)
+               {
+               case S_0:
+               case S_1:
+               case S_2:
+               case S_3:
+               case S_4:
+                       return "stack.c" + BitVector.from(r.ordinal(), 3);
+               case SP:
+                       return "sp.q";
+               case PC:
+                       return "mupc.q";
+               case REG_COUNT:
+                       return "r.q";
+               default:
+                       throw new IllegalArgumentException("unknown: " + r);
+               }
+       }
 }