- 
 
The processor can usually address a memory space that is 
much larger
 than the memory space covered by an individual memory chip. 
 
 
- 
 
In order to splice a memory device into the address space of the processor, decoding is necessary.
 
 
- 
 
For example, the 8088 issues 
20-bit 
addresses for a total of 
1MB 
of memory address space.
 
 
- 
 
 However, the BIOS on a 2716 EPROM has only 2KB of memory and 
11
 address pins.
 
 
- 
 
A decoder can be used to decode the additional 
9 
address pins and allow the EPROM to be placed in 
any
 2KB section of the 1MB address space.
 
- 
 
To determine the address range that a device is mapped into:
 
 
- 
 
This 2KB memory segment maps into the 
reset location
 of the 8086/8088 (FFFF0H).
 
 
- 
 
NAND gate decoders are not often used.
- 
 
Rather the 3-to-8 Line Decoder (74LS138) is more common.
 
- 
 
The 3-to-8 Line Decoder (74LS138)
- 
 
Note that all 
three
 Enables (G2A, G2B, and G1) must be active, e.g. low, low and high, respectively.
- 
 
Each output of the decoder can be attached to an 2764 EPROM (
8K X 8
).
 
- 
 
The EPROMs cover a 64KB section of memory.
 
- 
 
Yet a third possibility is a 
PLD
 (Programmable Logic Device).
- 
 
PLDs come in three varieties:
- 
 
 
PLA
 (Programmable Logic Array)
- 
 
 
PAL
 (Programmable Array Logic)
- 
 
 
GAL
 (Gated Array Logic)
 
 
- 
 
PLDs have been around since the mid-1970s but have only recently appeared in memory systems (PALs have replaced PROM address decoders).
 
 
- 
 
PALs and PLAs are 
fuse-programmed
 (like the PROM).
- 
 
Some are erasable (like the EPROM).
 
 
- 
 
A PAL example (16L8) is shown in the text and is commonly used to decode the memory address, particularly for 32-bit addresses generated by the 80386DX and above.
 
- 
 
AMD 16L8 PAL decoder.
- 
 
It has 10 fixed inputs (Pins 1-9, 11), two fixed outputs (Pins 12 and 19) and 6 pins that can be either (Pins 13-18).
- 
 
AND/NOR device with logic expressions (outputs) with up to 16 ANDed inputs and 7 ORed product terms.
 
- 
 
The memory systems "sees" the 8088 as a device with:
- 
 
 
20 
address connections (A19 to A0).
- 
 
 
8
 data bus connections (AD7 to AD0).
- 
 
 
3
 control signals, IO/M, RD, and WR.
 
 
- 
 
We'll look at interfacing the 8088 with:
- 
 
 
32K
 of EPROM (at addresses F8000H through FFFFFH).
- 
 
 
512K
 of SRAM (at addresses 00000H through 7FFFFH).
 
 
- 
 
The EPROM interface uses a 74LS138 (3-to-8 line decoder) plus 
8 
2732 (
4K X 8
) EPROMs.
 
 
- 
 
The EPROM will also require the generation of a wait state.
- 
 
The EPROM has an access time of 
450ns
.
- 
 
The 74LS138 requires 
12ns
 to decode.
- 
 
The 8088 runs at 5MHz and only allows 
460ns
 for memory to access data.
- 
 
A wait state adds 
200ns
 of additional time.
 
- 
 
The 8088 cold starts execution at 
FFFF0H
. JMP to F8000H occurs here.
 
- 
 
The 
16
 62256s on the previous slide are actually SRAMs.
- 
 
Access times are on order of 
10ns
.
 
 
- 
 
Flash memory can also be interfaced to the 8088 (see text).
- 
 
However, the write time (
400ms
 !) is too slow to be used as RAM (as shown in the text).
 
 
- 
 
Parity Checking:
- 
 
Parity checking is used to detect single bit errors in the memory.
 
 
- 
 
The current trend is away from parity checking.
 
 
- 
 
Parity checking adds 
1
 bit for every 
8
 data bits.
- 
 
 For 
EVEN
 parity, the 
9th
 bit is set to yield an even number of 1's in all 9 bits.
- 
 
 For 
ODD
 parity, the 
9th 
bit is set to make this number odd.
 
 
- 
 
For 72-pin SIMMs, the number of data bits is 32 + 4 = 36 (
4
 parity bits).
 
- 
 
74AS280 Parity Generator/Checker
- 
 
This circuit generates 
EVEN
 or 
ODD
 parity for the 9-bit number placed on its inputs.
- 
 
Typically, for generation, the 9th input bit is set to 0.
 
 
- 
 
This circuit also checks 
EVEN
 or 
ODD
 parity for the 9-bit number.
- 
 
In this case, the 
9th
 input bit is connected to the 
9th
 bit of memory.
- 
 
For example, if the original byte has an even # of 1's (with 
9th
 bit at GND), the parity bit is set to 1 (from the 
EVEN
 output).
- 
 
If the 
EVEN
 output goes high during the check, then an error occurred.
 
- 
 
This parity scheme can only detect a single bit error.
- 
 
 Block-Check Character (
BCC
) or Checksum.
- 
 
Can detect 
multiple bit 
errors.
- 
 
This is simply the 
two's complement sum
 (the negative of the sum) of the sequence of bytes.
- 
 
No error occurred if adding the data values and the checksum produces a 0.
- 
 
For example:
- 
 
This is not fool proof. 
- 
 
If 45 changes to 44 
AND
 04 changes to 05, the error is missed.
 
- 
 
 Cyclic Redundancy Check (
CRC
).
- 
 
Commonly used to check data transfers in hardware such as harddrives.
- 
 
Treats data as a stream of serial data 
n-bits
 long.
- 
 
The bits are treated as coefficients of a 
characteristic polynomial
, 
M(X) 
of the form:
 
- 
 
 Cyclic Redundancy Check (
CRC
) (cont.)
- 
 
The 
CRC 
is found by applying the following equation.
- 
 
G(X)
 is the called the 
generator polynomial
 and has special properties.
- 
 
A commonly used polynomial is:
 
 
- 
 
The remainder 
R(X) 
is 
appended
 to the data block.
- 
 
When the 
CRC
 and 
R(X)
 is computed by the receiver, 
R(X)
 should be zero.
- 
 
Since 
G(X)
 is of power 16, the remainder, 
R(X)
, cannot be of order higher than 15.
- 
 
Therefore, no more than 
2
 bytes are needed independent of the data block size.
 
- 
 
 Cyclic Redundancy Check (
CRC
)(cont.)
 
- 
 
Parity
, 
BCC
 and 
CRC
 are only mechanisms for error detection.
- 
 
The system is halted if an error is found in memory.
 
 
- 
 
Error 
correction
 is starting to show up in new systems.
- 
 
SDRAM
 has ECC (Error Correction Code).
 
 
- 
 
Correction will allow the system can continue operating.
- 
 
If 
two
 errors occur, they can be 
detected
 but not 
corrected
.
- 
 
Error correction will of course cost more in terms of extra bits.
 
 
- 
 
Error correction is based on 
Hamming Codes
.
- 
 
There is lots of theory here but our focus will be on implementation.
- 
 
The objective is to correct any single bit errors in an 8-bit data byte.
- 
 
In other words, we need 
4 
parity bits to correct single bit errors.
- 
 
Note that the parity bits are at bit positions that are 
powers of 2
.
 
- 
 
Hamming Codes (cont).
- 
 
P1 is generated by computing the parity of X
3
, X
5
, X
7
, X
9
, X
11
, X
13
, X
15
.
- 
 
These numbers have a 1 in bit position 1 of the subscript in binary.
 
- 
 
The 74LS636 corrects errors by storing 
5
 parity bits with each byte of data.
- 
 
 
8
 data I/O pins
- 
 
 
5
 check bit I/O pins
- 
 
 
2
 control pins
- 
 
 
2
 error outputs
- 
 
Single error flag (
SEF
)
- 
 
Double error flag (
DEF
).
- 
 
See the text for an example of its use in a circuit.