+ @Test\r
+ public void wordAddressableMemoryLargeTest()\r
+ {\r
+ Wire rW = new Wire(t, 1, 2);\r
+ Wire data = new Wire(t, 16, 2);\r
+ Wire address = new Wire(t, 64, 2);\r
+ ReadWriteEnd rWI = rW.createReadWriteEnd();\r
+ ReadWriteEnd dataI = data.createReadWriteEnd();\r
+ ReadWriteEnd addressI = address.createReadWriteEnd();\r
+\r
+ WordAddressableMemoryComponent memory = new WordAddressableMemoryComponent(t, 4, 4096L, Long.MAX_VALUE, data.createReadWriteEnd(),\r
+ rW.createReadOnlyEnd(), address.createReadOnlyEnd());\r
+\r
+ Random r = new Random();\r
+ for (long j = 1; j > 0; j *= 2)\r
+ {\r
+ for (int i = 0; i < 50; i++)\r
+ {\r
+ String sAddress = String.format("%64s", BigInteger.valueOf(4096 + i + j).toString(2)).replace(' ', '0');\r
+ sAddress = new StringBuilder(sAddress).reverse().toString();\r
+ BitVector bAddress = BitVector.parse(sAddress);\r
+ addressI.feedSignals(bAddress);\r
+ t.executeAll();\r
+ String random = BigInteger.valueOf(Math.abs(r.nextInt())).toString(5);\r
+ random = random.substring(Integer.max(0, random.length() - 16));\r
+ random = String.format("%16s", random).replace(' ', '0');\r
+ random = random.replace('2', 'X').replace('3', 'Z').replace('4', 'U');\r
+ BitVector vector = BitVector.parse(random);\r
+ dataI.feedSignals(vector);\r
+ rWI.feedSignals(Bit.ZERO);\r
+ t.executeAll();\r
+ rWI.feedSignals(Bit.ONE);\r
+ t.executeAll();\r
+ dataI.clearSignals();\r
+ t.executeAll();\r
+\r
+ assertBitArrayEquals(dataI.getValues(), vector.getBits());\r
+ }\r
+ }\r
+ }\r
+\r