2.4.2 地址和地址译码器
CPU输出一个存储器地址到地址总线上,这个地址怎样才能选中一个存储单元,这就是地址译码器要解决的问题。
地址译码器是这样一种器件:输入为数字量(即地址),根据输入的数字量在多个输出端中选一个有效。打个比方:地址译码器就像电话系统,打电话时输入电话号码就好比地址,根据输入的电话号码在若干门电话中只有一门电话被选中。如下图2.13。是一个3线---8线译码器,输入信号为3位数字量,3位数字量的变化范围是000B~111B。(末尾的B表示二进制数),输出为8个输出端。根据输入量在8个输出端中只能一个有效。该译码器的输入输出关系见下表2.2。 | 图2.13 译码器
|
表2.2 3线---8线译码器真值表
输 入 | 有效输出端 | ||
C | B | A | |
0 | 0 | 0 | Y0 |
0 | 0 | 1 | Y1 |
0 | 1 | 0 | Y2 |
0 | 1 | 1 | Y3 |
1 | 0 | 0 | Y4 |
1 | 0 | 1 | Y5 |
1 | 1 | 0 | Y6 |
1 | 1 | 1 | Y7 |
由于存储器单元数量很多,比如在8086系统中,地址线数为20根,存储器单元数达到1M,当地址译码器输入线数为20根,输出线数便达到1048576根,采用一级译码难度很大。实际组成存储器系统时,通常采用多级译码的方法实现,把若干存储单元和芯片内部译码器集成在存储器芯片中,然后用多片存储器芯片与译码器组成存储器系统。
如右图2.14所示的存储器芯片内部有64K个8位的存储单元,即存储容量为64K×8位,外部引腿有16根地址线,8根数据线,读/写控制线,片选线等。芯片用16位地址线通过内部译码器选择存储单元。用16片这种存储器芯片可以组成1MB的存储器系统。 每一个存储器芯片内部的存储单元都有2个地址,一个是芯片内部地址,一个是系统地址。内部地址是与外部连线无关的,如右图2.14的芯片,每一个芯片内部地址范围都是从0000H~FFFFH。而系统地址取决于外部连线。 | 图2.14 64K×8位的存储器芯片 |
如下图2.15所示,系统地址线接地址译码器的片选,、、接到地址译码器的3个输入端。地址译码器的输出端接储器芯片IC1的片选。
图2.15 芯片的系统地址范围
我们可以计算该芯片的系统地址范围如下:系统地址线=0选中地址译码器,而、、为000选中端有效从而选中IC1,地址线用于选择IC1内部单元。因此IC1占用的最低的系统地址为00000H,如下图2.16所示,而占用的最高址为0FFFFH,如下图2.17所示:
图2.16 IC1的最低地址 | 图2.17 IC1的最高地址 |
如果芯片IC1的片选输入端接到地址译码器的输出端,、、三根地址线为001选中端有效,则IC1占用的系统地址为10000H~1FFFFH。
在上述计算中,要区分片内地址和片外地址。比如某种芯片有10根地址线,则该芯片存储单元的片内地址是从0~-1=3FFH。而片外地址除与芯片地址线的数量有关,还与芯片连接到系统地址总线的方法有关。