tags:
- Notes
存储器扩展技术
在数字电路中,二进制译码器可以把
为了更清楚地理解 CPU 的
序号 | 输入端(A,B,C) | 输出(Y0-Y7) |
---|---|---|
0 | 000 | 1111 1110 |
1 | 001 | 1111 1101 |
2 | 010 | 1111 1011 |
3 | 011 | 1111 0111 |
4 | 100 | 1110 1111 |
5 | 101 | 1101 1111 |
6 | 110 | 1011 1111 |
7 | 111 | 0111 1111 |
在74LS138译码器中,当输出端被选中后会变为低电平(0),其余输出端口保持高电平(1),在设计译码电路时,我们可以人为规定选中后呈现高电平或是低电平。现在,我们就应该理解为什么
当地址线条数有 12 根,且按照字节寻址,那么 CPU 直接寻址范围就等于:
位平面(Bit plane) 是存储体的重要组成部分。而每个内存芯片(DRAM chip)中可以包含多个存储体。明晰了它们之间的关系,我们来看下面这张图,假如每个位平面都包含 64*64 的位元,也就是说每个位平面的寻址范围都是 0-4096,每一个可寻址位都包含 1bit 信息。这样,8 个位平面摞在一起就可以每次寻址 8bits(也就是1byte)的数据。
在上节中我们看到,寻址空间的范围是会随地址线条数的增加翻倍增长的。地址线每增加一根,可寻址空间增大一倍。这样会导致一个很直接的问题,那就是如果我们只采用一个译码器,译码器每增加一个输入端就会使得输出端翻倍!12 根地址线译码后可是能产生 4096 个输出端口。这样设计的译码电路会使得整个芯片奇长无比,但显然设计人员考虑到了这个问题。因而,我们现在的内存多采用的是二维地址译码方式。
我们将地址线划分成为不同行(Row)不同列(Column),当某寻址单元行选中同时列选中时也可以选中这一单元。这样可以避免译码器过于庞大。而且现代计算机多采用地址线分时复用,也就是用 6 根地址线分时复用,由 RAS(Row Address Select) 和 CAS(Column Address Select) 控制分时的时序。这样,原先 12 根地址线就可以减少到 7 根(6根复用线,1根 RAS/CAS)。
看上去好像分时复用要花上比原先多一倍的时间去访存。但实际上分时复用其实并不会浪费多少时间,因为行译码后会将这一整行的数据全部放到行缓冲中,这是用 SRAM 做的,速度要比主存快很多,当列选中信号到来的时候,CPU直接从行缓冲中读取数据。而且行缓冲技术遵循了 程序的局部性原理 当CPU后面再需要访存的时候,如果行译码后仍然在这一行,CPU就会直接从 SRAM 中读取数据。这样不但访存时间不会增加,反而因为局部性原理访存时间还减少了不少。
存储器也会出现和一维地址译码方式类似的问题。如果单方面扩大存储芯片的存储容量,就可能导致芯片越做越大,不但可能影响存储性能,也会对物理空间造成影响。因此,我们可以对存储芯片进行编址,这种增加芯片数量增大寻址范围的方式就是我们所说的字扩展。
举个例子,两片 4K * 8bits 的芯片可以通过字扩展形成 8K * 8bits 的”组合芯片“。通过字扩展,CPU 可以寻址的范围就从 0-4095 变为 0-8191。
芯片进行字扩展时,因为字长不需要改变,所以芯片的字线相连一模一样。片内的地址线也不需要改变,只需要译码芯片选中时将输出端连接响应的芯片片选引脚即可。我们使用3-8译码器,3位地址线可以编址选中 8 片芯片。
字扩展可以帮我们解决内存寻址大小的问题,但是随着16位机、32位机器甚至64位机的出现,我们还需要对内存芯片进行位扩展来使得我们一次性能读出符合机器的的位数。假如我们的机器是16位机,而恰好我们手头上只有位宽8位的芯片,不论寻址大小是多少,我们总需要两片这样的芯片才能位扩展成16位 I/O 的数据宽度要求。
当我们用芯片进行位扩展时,我们想要扩展芯片 I/O 的数据宽度。若 CPU 数据线有16根,我们用两个 4K*8bits 的芯片,片选和地址引脚连接完全相同,芯片1的8位数据线连接系统数据线 D0-D7,芯片2的8位数据线连接系统的 D8-D15即可完成芯片的位扩展。
字位同时扩展。