- @Test
- void wireConnections()
- {
- // Nur ein Experiment, was über mehrere 'passive' Bausteine hinweg passieren würde
-
- Wire a = new Wire(t, 1, 2);
- Wire b = new Wire(t, 1, 2);
- Wire c = new Wire(t, 1, 2);
- ReadWriteEnd aI = a.createReadWriteEnd();
- ReadWriteEnd bI = b.createReadWriteEnd();
- ReadWriteEnd cI = c.createReadWriteEnd();
-
- TestBitDisplay test = new TestBitDisplay(t, c.createReadOnlyEnd());
- TestBitDisplay test2 = new TestBitDisplay(t, a.createReadOnlyEnd());
- LongConsumer print = time -> System.out.format("Time %2d\n a: %s\n b: %s\n c: %s\n", time, a, b, c);
-
- cI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
-
- cI.feedSignals(Bit.X);
- test.assertAfterSimulationIs(print, Bit.X);
-
- cI.feedSignals(Bit.X);
- cI.feedSignals(Bit.Z);
- test.assertAfterSimulationIs(print, Bit.Z);
-
- new Connector(t, b.createReadWriteEnd(), c.createReadWriteEnd()).connect();
- test.assertAfterSimulationIs(print, Bit.Z);
- System.err.println("ONE");
- bI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
- System.err.println("ZERO");
- bI.feedSignals(Bit.ZERO);
- test.assertAfterSimulationIs(print, Bit.ZERO);
- System.err.println("Z");
- bI.feedSignals(Bit.Z);
- test.assertAfterSimulationIs(print, Bit.Z);
-
- new Connector(t, a.createReadWriteEnd(), b.createReadWriteEnd()).connect();
- System.err.println("Z 2");
- aI.feedSignals(Bit.Z);
- test.assertAfterSimulationIs(print, Bit.Z);
- test2.assertAfterSimulationIs(Bit.Z);
- System.err.println("ONE 2");
- aI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
- test2.assertAfterSimulationIs(Bit.ONE);
- System.err.println("ZERO 2");
- aI.feedSignals(Bit.ZERO);
- test.assertAfterSimulationIs(print, Bit.ZERO);
- test2.assertAfterSimulationIs(Bit.ZERO);
- System.err.println("Z 2 II");
- aI.feedSignals(Bit.Z);
- test.assertAfterSimulationIs(print, Bit.Z);
- test2.assertAfterSimulationIs(Bit.Z);
-
- System.err.println("No Conflict yet");
- bI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
- test2.assertAfterSimulationIs(Bit.ONE);
- aI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
- test2.assertAfterSimulationIs(Bit.ONE);
- System.err.println("Conflict");
- aI.feedSignals(Bit.ZERO);
- test.assertAfterSimulationIs(print, Bit.X);
- test2.assertAfterSimulationIs(Bit.X);
- aI.feedSignals(Bit.ONE);
- test.assertAfterSimulationIs(print, Bit.ONE);
- 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());
- }
- }
- }
-