DEVICE NAME := "SRAM TSOP44"
PINS
ADDRESS := 44, 43, 42, 27, 26, 25, 24, 21, 20, 19, 18, 5, 4, 3, 2, 1;
DATA := 38, 37, 36, 35, 32, 31, 30, 29, 16, 15, 14, 13, 10, 9, 8, 7;
nOE := 41;
nWE := 17;
nCE := 6;
nBHE := 40;
nBLE := 39;
END;
DISABLE DEVICE
nOE := 1;
nCE := 1;
END;
TEST COVERAGE
ADDRESS := SHORTS OPEN HI LO;
DATA := SHORTS OPEN HI LO;
nOE := OPEN HI LO;
nWE := OPEN HI LO;
nCE := OPEN HI LO;
nBHE := OPEN HI LO;
nBLE := 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(nCE);
CONST INT RESULT_FAIL := TRUE;
CONST INT RESULT_PASS := FALSE;
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("Testing nBLE...\n");
TestnBLE()(result);
IF (result = RESULT_FAIL) THEN
PRINT("Memory chip ", DEVICE_REF, " FAILED...\n\n");
RETURN;
END;
PRINT("Testing nBHE...\n");
TestnBHE()(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, nCE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], 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;
TestnBLE()(INT result WIDTH 1)
INT data WIDTH DATA_BUS_WIDTH;
result := RESULT_PASS;
WriteCycle(0,0,0);
IF DEBUG THEN PRINT("\tTrying to write 0xFF to 0x0 with nBLE held high\n"); END;
SET ADDRESS := 0, DATA := 0xFF, nCE := 0, nBLE := 1, nBHE := 0;
SET nWE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nWE := 1, nBLE := 1, nBHE := 1;
SET DATA := 0;
ReadCycle(0)(data);
IF (data = 0xFF) THEN
result := RESULT_FAIL;
PRINT("Error: nBLE appears to be stuck low.\n");
END;
END;
TestnBHE()(INT result WIDTH 1)
INT data WIDTH DATA_BUS_WIDTH;
result := RESULT_PASS;
WriteCycle(0,0,0);
IF DEBUG THEN PRINT("\tTrying to write 0xFF00 to 0x0 with nBHE held high\n"); END;
SET ADDRESS := 0, DATA := 0xFF00, nCE := 0, nBLE := 0, nBHE := 1;
SET nWE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nWE := 1, nBLE := 1, nBHE := 1;
SET DATA := 0;
ReadCycle(0)(data);
IF (data = 0xFF00) THEN
result := RESULT_FAIL;
PRINT("Error: nBHE appears to be stuck low.\n");
END;
END;
PrintChipEnable(INT i)()
PRINT(PINNUM(nCE[i]));
END;
PrintAddr(INT i)()
PRINT(PINNUM(ADDRESS[i]));
END;
PrintData(INT i)()
PRINT(PINNUM(DATA[i]));
END;
ChipWritable()(INT result)
IF WRITEABLE(nCE) THEN
result := TRUE;
ELSE
result := FALSE;
END;
END;
WriteCycle(INT address, INT data, INT byte)()
SET ADDRESS := address[(ADDR_BUS_WIDTH-1)..0], DATA := data[(DATA_BUS_WIDTH-1)..0],
nCE := byte[(NCE_BUS_WIDTH-1)..0], nBLE := 0, nBHE := 0;
SET nWE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nWE := 1, nBLE := 1, nBHE := 1;
IF DEBUG THEN PRINT("\tWrite 0x", HEX(data), " to address 0x", HEX(address), "\n"); END;
END;
ReadCycle(INT address)(INT data)
SET ADDRESS := address[(ADDR_BUS_WIDTH-1)..0], DATA := I, nOE :=0,
nCE := 0,nBHE := 0, nBLE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nOE := 1, data := DATA, nBLE := 1, nBHE := 1;
IF DEBUG THEN PRINT("\tRead 0x", HEX(data), " from address 0x", HEX(address), "\n"); END;
END;