DEVICE NAME := "SRAM - SOP 28"
PINS
ADDRESS := 1, 26, 2, 23, 21, 24, 25, 3, 4, 5, 6, 7, 8, 9, 10;
DATA := 19, 18, 17, 16, 15, 13, 12, 11;
nWE := 27;
nOE := 22;
nCE := 20;
END;
DISABLE DEVICE
nOE := 1;
nCE := 1;
END;
TEST COVERAGE
ADDRESS := SHORTS OPEN HI LO;
DATA := SHORTS OPEN HI LO;
nWE := OPEN HI LO;
nOE := OPEN HI LO;
nCE := 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_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, nCE := 0;
SET nCE := 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(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 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], nCE := byte[(NCE_BUS_WIDTH-1)..0];
SET nWE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nWE := 1;
IF DEBUG THEN PRINT("\tWrote 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, nCE := 0;
SET nCE := ~0[(NCE_BUS_WIDTH-1)..0], nOE := 1, data := DATA;
IF DEBUG THEN PRINT("\tJust read 0x", HEX(data)," from address 0x", HEX(address),".\n"); END;
END;