Memory addressing problem


Below is a fictional RAM chip.

It has only four cells, i.e. can only store four bits, labelled below as 0,1,2, and 3.


Fictional RAM chip.png


Example operation

To write a 1 to cell 2:
   Step 1:  Put 2 on the address bus pins (A1 and A0).
   Step 2:  Set the 'read or write' pin to write.
   Step 3:  Set the 'data bit in' pin to 1.
   Step 4:  Set the enable pin to enable.

To later read back that cell:
   Step 1:  Put 2 on the address bus pins (A1 and A0).
   Step 2:  Set the 'read or write' pin to read.
   Step 3:  Set the enable pin to enable.
   Step 4:  Examine the 'data bit out' pin.


Inadequate testing

You might think that the following test script would be good enough to test the chip.

STEP 1:  Cell 0 is target - Write the data of 0 to address 0, then verify that 0 is read back from address 0.
STEP 2:  Cell 0 is target - Write the data of 1 to address 0, then verify that 1 is read back from address 0.

STEP 3:  Cell 1 is target - Write the data of 0 to address 1, then verify that 0 is read back from address 1.
STEP 4:  Cell 1 is target - Write the data of 1 to address 1, then verify that 1 is read back from address 1.

STEP 5:  Cell 2 is target - Write the data of 0 to address 2, then verify that 0 is read back from address 2.
STEP 6:  Cell 2 is target - Write the data of 1 to address 2, then verify that 1 is read back from address 2.

STEP 7:  Cell 3 is target - Write the data of 0 to address 3, then verify that 0 is read back from address 3.
STEP 8:  Cell 3 is target - Write the data of 1 to address 3, then verify that 1 is read back from address 3.


Example of an addressing problem

Let us pretend that the example chip has a fault that internally, results in the A1 line always being LOW.

I execute the aforementioned test script.  It results in a PASS !!!

Here is what happened:

STEP 1:  Cell 0 is target - 0 stored in cell 0, and read back as 0.  <-- PASS
STEP 2:  Cell 0 is target - 1 stored in cell 0, and read back as 1.  <-- PASS

STEP 3:  Cell 1 is target - 0 stored in cell 1, and read back as 0.  <-- PASS
STEP 4:  Cell 1 is target - 1 stored in cell 1, and read back as 1.  <-- PASS

STEP 5:  Cell 2 is target - Due to the addressing fault, the cell reached is cell 0, not 2.  0 stored in cell 0, and read back as 0.  <-- PASS
STEP 6:  Cell 2 is target - Due to the addressing fault, the cell reached is cell 0, not 2.  1 stored in cell 0, and read back as 1.  <-- PASS

STEP 7:  Cell 3 is target - Due to the addressing fault, the cell reached is cell 1, not 3.  0 stored in cell 1, and read back as 1.  <-- PASS
STEP 8:  Cell 3 is target - Due to the addressing fault, the cell reached is cell 1, not 3.  1 stored in cell 1, and read back as 1.  <-- PASS


Cells 2 and 3 did not get tested.

But that is minor compared to the addressing problem, eg. writing to address 2 overwrites the data stored at address 0.

How might this problem be tested for?  By verifying that a test write to each address does not affect another address.


Additional information

The motherboard (or RAM card) circuitry can also create this situation.

ROM's can be similarly affected.