zoukankan      html  css  js  c++  java
  • 双端口RAM和多模块存储器

    [TOC]

    双端口RAM

    提高存储器访存速度一些措施。

    存取周期

    进行一次存取之后,是不能立即进入下一次存取的,存储器要进行一次恢复。

    存取周期=存取时间+恢复时间

    1. 对不同时间进行不同存取操作,双端RAM
    2. 流水线的方式,多模块存储器

    双端口RAM

    置一个忙信号

    多模块存储器

    CPU的速度比存储器要快的,如果从存储器中同时存取n个字。可以提高cpu使用资源

    补充:可以并行工作,如总线宽度为mW时,可以同时取出长度为mW的数据。

    普通存储器

    每行为1个存储单元

    单体多字存储器

    每个存储单元存储m个字,总线宽度也为m个字,一行并行读出m个字。

    增加了存储器的带宽。

    缺点:指令和数据在主存内必须连续存放。

    多体并行的存储器

    每个模块都有相同的容量和存取速度,各个模块都有独立的读写控制电路、地址寄存器和数据寄存器

    编制方式:

    高位交叉编址的多体存储器

    高位是体号,低位是体内地址

    假如有8个存储单元

    相当于说,先确定是哪一个(存储体),然后在在那一个里面找相对应的一块。

    低位交叉编址的多提存储器

    低位是体号,高位是体内地址

    假如有8个存储单元

    先找到具体的位置,在看哪一个存储体。

    为什么要这么弄?

    假如每个存储体的存储周期为T

    连续访问:

    00000

    00001

    00010

    00011

    00100

    高位

    其实就是在M0里一直访问

    时空图:

    如果连续访问这个5个地址,需要花费5t个时间。并没有带来什么好处。

    高位交叉编址相当于扩容,每个其实还是相当于独立的,并没有带来时间优势。

    采用高位交叉编址,连续取n个存储字,耗时nT

    低位

    先访问M0的0号单元,接下来00001,是M1的0号单元,只需要间隔一小段时间。然后就是M2,M3.都是用一小段时间。可以相当于是同时访问。大大减少了存取时间。

    时空图:

    时间如何计算?

    假设启动完M0后启动M1的时间间隔是τ,启动完M1在启动M2的时间间隔是τ、启动完M2在启动M3的时间间隔是τ,接下来启动完M3在启动M0的时间间隔也是τ

    所以就有总时间T+4τ

    假如连续存取n个存储字,采用低位交叉编址,耗时:T+(n-1)τ

    流水线(考试常考)

    微观(计算题)

    有m个存储体,存储周期是T,字长W,每隔r时间启动下一个存储体,连续存放n个字,求存储器的存取速率。

    [ 连续存取n个字耗时=T+(n-1)r ]
    [ !!!注意:m≥T/r ]

    如果m<T/r

    还需要在等多一个r

    如果m>T/r

    所以:

    [ 带宽=frac{n*w}{T+(n-1)r} ]

    如果n较大时,带宽->W/r

    对比单个存储体的带宽:W/T

    宏观(概念题)

    一个存储周期内,交叉存储器可以提供的数据量为单个模块的m倍。

    回顾

    提出这样的存储器是为了提高CPU的访存速度

  • 相关阅读:
    jmeter非GUI模式运行单节点
    Feign详细构建过程及自定义扩展
    【springboot 源码解析】springboot 依赖管理
    通知神器——java调用钉钉群自定义机器人
    【乱纪】Markdown中常用的乱七八糟的东西
    【Java入地】 01 多线程与高并发
    【Linux】默认文本编辑器 vim 的入门与进阶
    【Linux】 安装搜狗输入法
    【Linux】系统发展史上的血雨腥风
    【Java进阶】01 Lambda 使用与进阶
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13561073.html
Copyright © 2011-2022 走看看