ppfvy wrote
I'm not sure this is even worthwhile to post, just thought it was interesting - you can seemingly end up with the same random-access characteristics from RAM with a totally mixed up internal state, unless I missed something.
This is a legitimate question, and worth a
bit of discussion 8-)
At this level of abstraction, it doesn't matter where in which sub-RAM/Register the words get stored, as long as there is a one-to-one mapping of addresses to storage locations. The mapping doesn't even need to be consistent between the sub parts. For example, consider this, with address[3..5] used to select between Ram8s:
RAM8(address=address[0..2], ...);
RAM8(address[0]=address[0], address[1]=address[2], address[2]=address[1], ...);
RAM8(address[0]=address[1], address[1]=address[0], address[2]=address[2], ...);
RAM8(address[0]=address[1], address[1]=address[2], address[2]=address[3], ...);
...
That's a whole lot of typing for no useful gain!
There can be a reason to use some of the low-order address bit to select between physical RAM chips.
Consider an architecture that allows byte, word, and double-word access to RAM. In this case one might want to use address[0..2] to select the internal sub-parts. This is called
interleaving.
The data buses would be 32 bits wide and the memory system would have a control circuit that would allow parallel access to up to four 8-bit wide RAM chips in a single memory cycle.
--Mark