<
meta content="text/html; charset=ISO-8859-2" http-equiv="content-type">
 
    <
h1>Memory simulation in <
i>μCsim<
/i><
/h1>
 
    Typical microprocessor system can look like this:
 
    <
p><
img src="cpu-mem.svg" alt="[CPU-memory connection]" border="0"><
/p>
 
    <
h3><
a name="address_space">Address space<
/a><
/h3>
 
    In our terminology "<b>address space</b>" means a set of:
 
      <
li>address bus lines <
/li>
 
      <
li>control 
(read
/write
) lines<
/li>
 
    Bus lines can be shared by address spaces, in this case number of control
 
    line sets specifies the address spaces.
 
    <
p>Microcontrollers usually have more address spaces. Some is used inside
 
      only, some can be used 
for external memories. <
/p>
 
    <
p>Address space does not store any 
value. It just specifies range of
 
      addresses by <
i>
start address<
/i> 
(which is not necessarily zero
) and <
i>size<
/i>
 
      which the CPU can provide when it tries to access a memory location.<
/p>
 
    <
h3><
a name="chip">Memory chip<
/a><
/h3>
 
    "<b>Memory chip</b>" is a circuit which can hold values in cells. Cells are
 
    indexed from 0 up to size-1. Each cell stores some (usually 8) bits.
 
    <
p><
img src="chip.svg" alt="[Memory chip]" border="0"><
/p>
 
    <
h3><
a name="address_decoder">Address decoder<
/a><
/h3>
 
    Addresses coming from an address space via address bus must be routed to
 
    memory and translated to cell indexes. This is done by the "<b>address
 
      decoder</b>". It listens addresses on the bus and control lines and
 
    enables exactly one memory chip. This way cells of the memory chip appear in
 
    the address space.
 
    <
p><
img src="decoded.svg" boder
="0" alt="[Decoded addresses]"> <
/p>
 
    <
p>It is possible that some addresses are not decoded. Writing to such an
 
      address results data to be lost. Reading of a non-decoded address results
 
      random value. Pullup or pulldown resistors can be applied to data bus
 
      lines to provide a specific 
value for read operations. <
/p>
 
    <
p>As it shown above, it is also possible that some cells of a chip is not
 
      mapped to any address. <
/p>
 
    <
h3><
a name="shared_chips">Mixed address spaces 
(shared chips
)<
/a><
/h3>
 
    Decoder connects an address of an address space to a cell of a memory chip.
 
    Only one cell can be connected to each addresses but same cell can be
 
    connected to more than one address spaces. This is done by routing different
 
    control lines to the same chip through logic <
b>L<
/b>:
 
    <
p><
img src="share-chip.svg" alt="[Sharing memchip]" border="0"> <
/p>
 
    <
p>Because each cell of a memory chip uses same read
/write control, in real
 
      world it is not possible to share individual cells of a chip between
 
      address spaces. In μCsim simulator we can define as many address decoders
 
      as we want so it is possible to map any cell to any address. <
/p>
 
    <
h3><
a name="banking">Memory banking<
/a><
/h3>
 
    <
h3><
a name="banding">Bit banding<
/a><
/h3>