Programmable Read Only Memories (PROMs) are a type of Read Only Memory (ROM) that can be programmed with desired arbitrary data at least once. That is, they do not have to be manufactured with the desired data already present, they can be programmed by someone other than the manufacturer of the chip, by using some sort of ROM burner/device programmer.

Typically, when one refers to a PROM, one means a PROM that can only be programmed once (See far below). One scheme for programming PROMs involves creating a matrix of fuses that connect addresses to data. For example, a simple 4-byte PROM might look like this:

    +----------+                      * = Intact Fuse
A1--|         0|--*-*-*-*-*-*-*-*
A0--|   1/4    |  | | | | | | | |       
    |         1|--*-*-*-*-*-*-*-*         
    | Decoder  |  | | | | | | | |
    |         2|--*-*-*-*-*-*-*-*
    |          |  | | | | | | | |
    |         3|--*-*-*-*-*-*-*-*
    |          |  | | | | | | | |
    +----------+  | | | | | | | |
                  b7b6b5b4b3b2b1b0

Now, suppose we wish to program the following data into our PROM:

Address   Data (b7-b0)
 A1 A0  |  7654 3210 
--------+-------------
  0  0  |  0000 0000
  0  1  |  1101 0011
  1  0  |  0100 1001
  1  1  |  0110 0000

Then we stick our PROM into a ROM burner programmed with the above data, and it will burn out all of the fuses that correspond to the zeroes in the table above, and leave the fuses that correspond to the ones intact:

    +----------+                      * = Intact Fuse
A1--|         0|-----------------
A0--|   1/4    |  | | | | | | | |       
    |         1|--*-*---*-----*-*         
    | Decoder  |  | | | | | | | |
    |         2|----*-----*-----*
    |          |  | | | | | | | |
    |         3|----*-*----------
    |          |  | | | | | | | |
    +----------+  | | | | | | | |
                  b7b6b5b4b3b2b1b0

Now we can use the device. We put the address we desire to lookup on A1-A0 and the apropriate data appears on b7-b0, as listed in the table above. You can see that current can only flow through the intact fuses, translating into a '1' for those intersections, while the broken fuses prevent current flow, and translate into a '0'.

Note that, essentially, what we are doing is burning a truth table directly into a piece of hardware. It is for this reason that a PROM is the only type of simple programmable logic that guarantees that we can implement even the worst (that is, least optimizable) functions with a given piece of hardware. However, in doing this we must implement the entire truth table, which often requires much more hardware than other methods (especially for functions that are highly optimizable). See hardware/flexibility tradeoff.

Also, because we face the possibility of connecting outputs directly together (as is done in b6 and b0 above) we must also assure that only one decoder output will be influencing the matrix at a given time--otherwise the High voltage level at one decoder output might conflict with the Low voltage level at another output, leading to unacceptable output voltages (and wierd behavior) on b7-b0. To prevent this from happening, we can put a diode in series with each fuse, such that current only flows out of "High" decoder outputs, and not into "Low" decoder outputs. Each "intact fuse" above, then, might look like this:

                  |               -|>|- = Diode
--------+-------------------      -(~)- = Fuse
        |         |
        +-|>|-(~)-+
                  |

Another way to prevent these conflicts is by putting three state buffers on each of the decoder outputs, such that a "Low" output from the decoder will activate the High Impedance state of the buffer.

There are other sorts of PROMs that can be programmed more than once: these are called EPROMs (Erasable PROMs).

Log in or register to write something here or to contact authors.