DEVICE NAME := "SRAM SIMM MODULE"
PINS
ADDRESS := 71, 70, 69, 39, 40, 33, 34, 58, 56, 54, 52, 22, 20, 18, 59, 55, 53, 51, 21, 19, 17;
DATA := 67, 65, 63, 61, 49, 47, 45, 43, 66, 64, 62, 60, 50, 48, 46, 44,
29, 27, 25, 23, 15, 13, 11, 9, 30, 28, 26, 24, 14, 12, 10, 8;
NOE := 41;
NWE := 32;
NCS := 37, 38, 35, 36;
PD := 4, 3, 7, 6;
END;
DISABLE DEVICE
NCS := 1;
PD := Z;
END;
TEST COVERAGE
ADDRESS := SHORTS OPEN HI LO;
DATA := SHORTS OPEN HI LO;
NOE := OPEN HI LO;
NWE := OPEN HI LO;
NCS := SHORTS OPEN HI LO;
END;
FILES
"memtestSRAM.xje";
END;
END;
CONST INT DATA_BUS_WIDTH := WIDTHOF(DATA);
CONST INT ADDR_BUS_WIDTH := WIDTHOF(ADDRESS);
CONST INT NCE_BUS_WIDTH := WIDTHOF(NCS);
CONST INT RESULT_PASS := FALSE;
CONST INT RESULT_FAIL := TRUE;
CONST INT DEBUG := FALSE;
Test()(INT result)
PRINT("\nTesting memory chip ", DEVICE_REF, "...\n");
result := RESULT_PASS;
PRINT("Calling MemTest...\n");
MemTest()(result);
IF (result = RESULT_FAIL) THEN
PRINT("Memory chip ", DEVICE_REF, " FAILED...\n\n");
RETURN;
END;
PRINT("Testing nOE...\n");
TestnOE()(result);
IF (result = RESULT_FAIL) THEN
PRINT("Memory chip ", DEVICE_REF, " FAILED...\n\n");
RETURN;
END;
PRINT("Memory chip ", DEVICE_REF, " PASSED...\n\n");
END;
TestnOE()(INT result WIDTH 1)
INT data WIDTH DATA_BUS_WIDTH;
result := RESULT_PASS;
WriteCycle(0, 0x55[(DATA_BUS_WIDTH-1)..0],0);
SET DATA := 0;
SET ADDRESS := 0, DATA := I, NOE :=1, NCS := 0;
SET NCS := 1, NOE := 1, data := DATA;
IF DEBUG THEN PRINT("\tTrying to read from address 0x0 with nOE held high\n"); END;
IF data = 0x55[(DATA_BUS_WIDTH-1)..0] THEN
result := RESULT_FAIL;
PRINT("Error: nOE appears to be stuck low.\n");
END;
END;
PrintChipEnable(INT i)()
PRINT(PINNUM(NCS[i]));
END;
PrintAddr(INT i)()
PRINT(PINNUM(ADDRESS[i]));
END;
PrintData(INT i)()
PRINT(PINNUM(DATA[i]));
END;
ChipWritable()(INT result)
IF WRITEABLE(NCS) THEN
result := TRUE;
ELSE
result := FALSE;
END;
END;
WriteCycle(INT address WIDTH ADDR_BUS_WIDTH, INT data WIDTH DATA_BUS_WIDTH, INT byte WIDTH NCE_BUS_WIDTH)()
SET ADDRESS := address[(ADDR_BUS_WIDTH-1)..0], DATA := data[(DATA_BUS_WIDTH-1)..0], NCS := byte[(NCE_BUS_WIDTH-1)..0], NOE := 1;
SET NWE := 0;
SET NCS := ~0[(NCE_BUS_WIDTH-1)..0], NWE := 1;
IF DEBUG THEN PRINT("\tWrite 0x", HEX(data), " to address 0x", HEX(address), "\n"); END;
END;
ReadCycle(INT address WIDTH ADDR_BUS_WIDTH)(INT data WIDTH DATA_BUS_WIDTH)
SET ADDRESS := address[(ADDR_BUS_WIDTH-1)..0], DATA := I, NOE :=0, NCS := 0;
SET NCS := ~0[(NCE_BUS_WIDTH-1)..0], NOE := 1, data := DATA;
IF DEBUG THEN PRINT("\tRead 0x", HEX(data), " from address 0x", HEX(address), "\n"); END;
END;