Alex_McAvoy

想要成为渔夫的猎手

双端口 RAM 与多模块存储器

【双端口 RAM】

双端口 RAM 是指同一个存储器有左、右两个独立的端口,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元

当两个端口的地址不相同时,在两个端口上进行读写操作一定不会发生冲突,当两个端口同时存取存储器的同一地址单元时,就会因数据冲突造成数据存储或读取错误

两个端口对同一主存操作有以下四种情况:

  1. 两个端口不同时对同一地址单元存取数据
  2. 两个端口同时对同一地址单元读出数据
  3. 两个端口同时对同一地址单元写入数据
  4. 两个端口同时对同一地址单元,一个写入数据,另一个读出数据

其中,第 $1$ 种和第 $2$ 种情况不会出现错误,第 $3$ 种情况会出现写入错误,第 $4$ 种情况会出现读出错误

解决方法:置忙信号 $\overline{BUSY}$ 为 $0$,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问

【多模块存储器】

为提高访存速度,常采用多模块存储器,常用的有单体多字存储器和多体低位交叉存储器

单体多字存储器

单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储 $m$ 个字,总线宽度也为 $m$ 个字,一次并行读出 $m$ 个字,地址必须顺序排列并处于同一存储单元

单体多字系统在一个存取周期内,从同一地址取出 $m$ 条指令,然后逐条将指令送至 CPU 执行,即每隔 $\frac{1}{m}$ 存取周期,CPU 向主存取一条指令,这样显然增大了存储器的带宽,提高了单体存储器的工作速度

但由于指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显

多体并行存储器

多体并行存储器由多体模块组成,每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器,它们既能并行工作,又能交叉工作。

多体并行存储器分为高位交叉编址(顺序方式)和低位交叉编址(交叉方式)两种

高位交叉编址:高位地址表示体号,低位地址为体内地址

低位交叉编址:低位地址表示体号,高位地址为体内地址,由于程序连续存放在相邻体中,因此常称采用此编址方式的存储器为交叉存储器

多体模块结构的存储器采用低位交叉编址后,可以在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器的带宽

设模块字长等于数据总线宽度,模块存取一个字的存取周期为 $T$,总线传送周期为 $r$,为实现流水线方式存取,则存储器交叉模块数应大于等于:

式中,$m$ 称为交叉存取度,每经 $r$ 时间延迟后启动下一个模块,交叉存储器要求其模块数必须大于或等于 $m$,以保证启动某模块后经过 $m\times r$ 的时间后再次启动该模块时,其上次存取操作已经完成(即流水线不间断)

这样连续存取 $m$ 个字所需的时间为:

而顺序方式连续读取 $m$ 个字所需时间为:

可见低位交叉存储器的带宽大大提高了


下面给出一个模块数为 $4$ 的流水线方式存取的实例

设存储器容量为 $32$ 个字,字长为 $64$ 位,模块数 $m=4$,分别采用顺序方式和交叉方式进行组织,存储周期 $T=200ns$,数据总线宽度为 $64$ 位,总线传输周期 $r=50ns$,在连续读出 $4$ 个字的情况下,求顺序存储器和交叉存储器各自的带宽

顺序存储器和交叉存储器连续读出 $m=4$ 个字的信息总量均是:

顺序存储器和交叉存储器连续读出 $4$ 个字所需的时间分别是:

顺序存储器和交叉存储器的带宽分别是:

感谢您对我的支持,让我继续努力分享有用的技术与知识点!