【计算机组成与体系结构Ⅰ】实验4 存储器原理实验

一、实验目的

1:了解双端口静态存储器IDT7132的工作特性及使用方法。

2:了解半导体存储器如何读写。

二、实验总结

0:实验内容

双端口存储器RAM:

    左端口的数据部分与数据总线DBUS7-DBUS0相联;右端口的数据引脚与指令传输线IN7-IN0连接,显示地址和IR中的数据用IR/DBUS切换。左端口地址由AR1提供,右端口地址由AR2(两片74HC298)提供,向AR1、AR2输入地址时注意,应切换AR1/AR2开关。地址和输入数据均由SW7-SW0输入,左、右地址分别存在AR1、AR2中,并在输入时要注意AR1/AR2的切换。

左端口

右端口

CEL#(低有效)

芯片CER#(内部经过一个反向器,低有效),但是控制信号CER=1(高有效)

LRW(1=读,0=写)

RRW(1=读,0=写,RRW已接固定高电平

OEL#(低电平,仿真已经设置)

OER#(OER#固定接低电平)

实验步骤:

Step1:控制信号接线, 如下表所示。

开关

K0

K1

K2

K3

K4

K5

K6

控制信号

CEL#

LRW

CER

LDAR1

LDAR2

SW_BUS#

LDIR

Step2:DP=1,DB=0,DZ=0。

Step3:合上电源,按CLR#。

Step4:从左端口写入数据,IR/DBUS=DBUS,AR1/AR2=AR1,向10H单元写入11H数据。

Step5:从右端口读出数据,AR1/AR2=AR2,IR/DBUS=IR,读出存储器10H单元的数据,数据送入IR中并在指示灯上显示。

上述操作的各步骤中控制信号的内容如下表所示:

K0

K1

K2

K3

K4

K5

K6

执行的操作内容

CEL#

LRW

CER

LDAR1

LDAR2

SW_BUS#

LDIR

1

1

0

1

0

0

0

地址10H写入AR1

此时SW7至SW0为:00010000

0

0

0

0

0

0

0

11H写入M[10H]

此时SW7至SW0为:00010001

1

1

0

1

0

0

0

地址10H写入AR1

此时SW7至SW0为:00010000

0

1

0

0

0

1

0

左端口读出M[10H]

1

1

0

0

1

0

0

地址10H写入AR2

1

1

1

0

0

0

1

右端口读出M[10H]

 


其中将11H写入10H地址后,可以双击双端口RAM,观察到数据成功写入给定的地址中,如下图所示(地址10H,值11H):

 

从左端口读出M[10H]如下图所示:


从右端口读出M[10H]如下图所示:

 

Step6:将控制器产生的控制信号与存储器部分的接线端孔相连接,即控制器的输出LDAR1、AR1_INC、SW_BUS#、CEL#、LRW依次与数据通路的对应信号连接,时序发生器的输入TJI接控制存储器的输出TJ。通过SWC、SWB、SWA的设置选择KWE写存储器,后续采用KRD读存储器。

(1)令DP = 0,DB = 0,DZ = 0,使实验系统处于连续运行状态。令SWC = 0、SWB = 1、SWA = 0,使实验系统处于写双端口存储器工作方式KWE。

按CLR#按钮,使实验系统处于初始状态。置SW7—SW0为80H,按QD按钮,将80H写入AR1。置SW7—SW0为01H,按QD按钮,将01H写入存储器80H单元AR1自动加1,变为81H。置SW7—SW0为02H,按QD按钮,将02H写入存储器81H单元。AR1自动加1,变为82H。

(2)令DP = 0,DB = 0,DZ =0,使实验系统处于连续运行状态。令SWC = 0、SWB = 0、SWA = 1,使实验系统处于读双端口存储器工作方式KRD。

按CLR#按钮,使实验系统处于初始状态。置SW7—SW0为80H,按QD按钮,将80H写入AR1。按QD按钮,读出该存储单元的数据。按QD,AR1自动加1,变为81H。按QD可读出该单元的存储数据。

1:实验中问题及解决方法

无。

2:在什么情况下出现冲突?出现冲突后,左/右端口在何种条件下可被访问?

在 LRW置为1,CEL#置为0,CER置为1的情况下,会出现冲突,即左右端口同时读主存的同一个存储单元。

出现冲突后,左右端口在以下条件下可被访问:①如果CER不变,则需要将CEL#置为1,使得左端口为无效;或者将LRW置为0,使得左端口执行写操作而非读操作,此时可以安全访问。②如果CEL#和LRW不变,则需要将CER置为0,使得右端口为无效,此时可以安全访问。


在实际的硬件电路中,双端口存储器器件采用以下方式来判断两个端口的信号(即增加BUSY标志判断优先级,或按照两端口读写的先后顺序):

3:实验总结

 

  • IDT7132的右端口无法写入数据,只能进行读出数据。当RRW=1时执行读操作,当RRW=0时执行写操作。本实验中RRW 已接固定高电平,故只能读出数据。
  • 本实验数据线共8条,地址线共11条(8条为SW7至SW0,3条为SWC、SWB、SWA),地址的总容量为2^11*8位,其中SWC~SWA的功能为片选。
  • LRW为控制双端口RAM左侧进行读写操作的信号,AR1_INC为控制地址寄存器1地址自增的信号。AR1_INC在Step1~Step5中置为0,在Step6中会置为1,使得地址自动实现增加1。
  • 将寄存器R0中的数据存入给定地址中:首先通过SW_BUS置地址,存入AR1中,双端口RAM从AR1中读取地址;然后将R0寄存器的数据通过DR2直通到ALU中,从A端输出到DBUS内,(或者将R0寄存器的数据写入RS0中,从B端输出到DBUS内),双端口RAM从DBUS中写入数据进入给定地址。

 

  • 存储器由若干个存储单元构成,实现对地址和数据的存储功能;存储单元由若干个存储位元构成,一个存储单元可以对应一个地址或数据;存储位元是0/1存储的最小单位,硬件上存储每一位的高低电平。
  • 控制台方式开关 SWC、SWB、SWA的工作方式如下表所示:

SWC

SWB

SWA

工作方式

0

0

0

PR,启动程序

0

0

1

KRD,读取端口存储器

0

1

0

KWE,写双端口存储器

0

1

1

KLD,加载寄存器堆

1

0

0

KRR,读寄存器堆


  • 当SW_BUS# = 0,LRW = 1,CEL# = 0的时候,有多个器件同时向总线输出,会发生数据冲突,即SW控制台向数据总线输入数据,同时双端口RAM向数据总线输入数据。在虚拟实验中,报错如下图所示:

 

三、仿真分析

打开仿真软件,仿真面板左下角【数据通路总体图】,参照本实验指导“数据通路总体图”和存储器原理图,从存储器左端口在10H单元存入数据AAH后,并从做左端口读出10H单元中的数据,存入寄存器R1中,并从B端口读出R1的内容输出到总线。写出实现这个功能所需步骤中操作控制信号,按照操作控制信号有效的先后顺序写出。

1:向地址寄存器AR1写入地址10H,此时SW_BUS# =0,LDAR1=1,其余信号设为无效,QD脉冲后完成操作。

2:向双端口RAM左侧写入数据AAH,并存入10H中,此时SW_BUS# =0,CEL# =0,LRW=0,其余信号设为无效,QD脉冲后完成操作。

3:双击双端口RAM,可以查看到地址10H中已经存入AAH,说明存入有效。

4:从双端口RAM左侧读出10H存储的数据,此时CEL# =0,LRW=1,其余信号设为无效,不需要QD脉冲即可在DBUS上读出数据。可以查看到DBUS上端红色的数据显示10101010,说明成功读取。同时由于AR1中的地址没改变,所以不需要重新给AR1写入所读取的存储单元的地址。

5:将读取的数据写入暂存器ER,此时CEL# =0,LRW=1,LDER=1,其余信号设为无效,QD脉冲后完成操作。可以查看到暂存器上端紫色的数据显示为10101010,说明成功写入。

6:将暂存器ER的数据写入RF的R1寄存器中,此时WRD=1,WR1=0,WR0=1,其余信号设为无效,QD脉冲后完成操作。可以查看到寄存器RF左端第二个橙色的数据显示为10101010,说明成功写入R1寄存器。

7:从B端口读出R1的内容输出到总线,此时WR1=0,WR0=1,RS1=0,RS0=1,RS_BUS# =0,其余信号设为无效,不需要QD脉冲即可在DBUS上读出数据。可以查看到DBUS上端红色的数据显示10101010,说明成功读取R1寄存器。
8:流程完成后的最终结果如下图所示:


四、问题回答

 

根据数据通路总图分析,指令和数据输入到存储器采用在哪种控制台方式?若程序执行应该在哪种控制台方式?

指令和数据输入到存储器时,可以采用PR控制台方式,即SWC=SWB=SWA=0。因为此时人工控制QD来启动相应程序。

如果程序执行第一个红框的内容时,可以采用KRD控制台方式,即SWC=SWB=0,SWA=1。因为第一个红框先通过SW7至SW0向AR1输入地址,然后从RAM左端口读出对应的数据到DBUS上,按QD后AR1中的地址自增1,而后重复从左端口读出数据的过程。即从起始输入的地址开始,连续对后面的存储单元读取数据,直到按下CLR#终止操作为止。

如果程序执行第二个红框的内容时,可以采用KWE控制台方式,即SWC=SWA=0,SWB=1。因为第二个红框先通过SW7至SW0向AR1输入地址,然后从RAM左端口写入对应的数据进地址,按QD后AR1中的地址自增1,而后重复从左端口写入数据的过程。即从起始输入的地址开始,连续对后面的存储单元写入数据,直到按下CLR#终止操作为止。

各控制台方式的具体内容如下表所示:

控制台方式

具体内容

PR

PR是启动程序方式。

首先在 SW7 一 SW0 指定启动地址,按启动按钮 QD 后,启动程序运行。

KRD

KRD是读取端口存储器方式。

(l)首先在 SW7 一 SW0 置好存储器地址; 按 QD 按钮,则将此地址打入地址寄存器 ARl,并读出该地址存储器内容到数据总线 DBUS。

(2)每按一次 QD 按钮,地址寄存器 ARl 加 l,并读出新地址存储器内容到数据总线 DBUS。

依次进行下去,直到按复位按钮 CLR#为止。

KWE

KWE是写双端口存储器方式。

(l)首先在 SW7 一 SW0 置好存储器地址; 按 QD 按钮,则首先将此地址打入地址寄存器 ARl,然后等待输入数据。

(2)在 SW7 一 SWO 置好数据,按 QD 按钮,首先写数据到 ARl 指定的存储器单元,然后地址寄存器 ARl 加 l,等待新的输入数据。

依次进行下去,直到按复位按钮 CLR#为止。

KLD

KLD是加载寄存器堆方式,用于对寄存器堆加载。

(1)首先在 SW7 一 SW0 置好 存储器地址,按 QD 按钮,则将此地址打入地址寄存器 ARl 和地址寄存器 AR1。

(2)在 SW7 一 SW0 置好数据,数据的低 2 位 Dl、D0 为寄存器堆中的寄存器号,按一次 QD 按钮,则 写数据到 ARl 指定的存储器单元;然后将写入的数据从右端口读出,并送入指令寄存器 IR。

(3)在 SW7 一 SW0 置好数据,该数据为写入寄存器的数据,寄存器号由 IR 低 2 位指定。 按 QD 按钮,则首先将此数据写入寄存器 ER,然后将 ER 中的数据写入指定的寄存器。

(4) 返回(2),依次进行下去,直到按复位按钮 CLR#为止。

KRR

KRR是读寄存器堆方式,用于读寄存器堆中的寄存器。

(1)首先在 SW7 一 SW0 置好存储器地址,按 QD 按钮,则将此地址打入地址寄存器 ARl 和地址寄存器 AR1。

(2) 在 SW7 一 SW0 置好数据,数据的 D3、D2 位为寄存器堆中的寄存器号,按一次 QD 按钮。 则与数据到 ARl 指定的存储器单元;然后将写入的数据从右端口读出,并送入指令寄存器

IR。同时将 IR3、IR2 指定的寄存器送往数据总线 DBUS。拨动开关 IR/DBUS 可看到 IR 的值和 IR 指定的寄存器的值。

(3)返回(2),依次进行下去,直到按复位按钮 CLR#为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务拆分部署

最近在工作中遇到需要将现网运行的服务拆分出一套,放置于本地机房,拆分服务运行有两种方案: 第一种是本地部署一个独立spring应用,业务上的要求是尽量隔离 第二种是采用阿里集群部署 采用第二种方案目前看是隔离度最高的

基于springboot+Redis的前后端分离项目之分布式锁(四)-【黑马点评】

🎁🎁资源文件分享 链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码:eh11 分布式锁 分布式锁1 、基本原理和实现方式对比2 、Redis分布式锁的实现核心思路3 、实现分布式锁版本一4 、Redis分布式锁误删情况…

硬盘或者U盘提示需要格式化的解决办法

插入硬盘之后提示: 使用驱动器 G:中的光盘之前需要将其格式化 是否要将其格式化? 如下图所示 顿时慌了啊,里面还有比较重要的东西呢,这一下子完蛋? 遇事找某宝,上面估计有这种技术服务。果然有这一类的技术服务&…

飞书接入机器人NODE开发自动回复

一、创建飞书应用 1.登录飞书开放平台 进入开发者后台 创建自建应用 2.添加应用能力 选择机器人添加 3.添加事件订阅并根据权限开通权限 此处只添加获取消息事件 4.配置应用服务端地址(当事件触发 会触发设置的地址 并发送事件数据)开启Encrypt Key 实…

Spring Boot 中的任务执行器是什么,如何使用

Spring Boot 中的任务执行器是什么,如何使用 Spring Boot 是一个非常流行的 Java 开发框架,它的核心理念是通过简单的配置和约定来提高开发效率。在很多情况下,我们需要在后台执行一些任务,比如异步处理、定时任务等等。为了简化…

【ARM Coresight 系列文章 3 - ARM Coresight 组件 DAP(Debug Access Port) 介绍】

文章目录 1.1 Debug Access Port1.2 Access Port1.2.1 IDR 寄存器 1.3 Mem-APs 介绍1.3.1 Debug 寄存器访问模型1.3.2 APs 中寄存器的介绍 1.1 Debug Access Port 外部 Debugger(DS-5/Trace32) 会通过JTAG接口或者SWD接口和DAP相连: JITAG 一般是5个pin&#xff1…

qt对话框

完善文本编辑器 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowTitle("聊天室界面");//设置标题this->setWindowIcon(QIcon(&…

Spring Boot 中的 @HystrixCommand 注解

Spring Boot 中的 HystrixCommand 注解 简介 在分布式系统中,服务之间的调用是不可避免的。但随着服务数量的增加,服务之间的依赖关系也会变得越来越复杂,服务的故障也会变得越来越常见。一旦某个服务出现故障,它所依赖的服务也…

keepalived 实现 IP 地址漂移

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

RabbitMQ学习笔记9 TTL死信队列+延迟队列实战

我们去新建一个交换机: 然后我们再用这种方法直接创建一个队列: 点击bind这样我们的交换机和队列就绑定到一起了。 然后我们要新建普通队列,设置过期时间,指定死信交换机。 发布一条消息。 它会把队列传递到死信队列中去。

nvm 下载nodejs 失败

解决办法: 1.查看nvm安装路径 nvm root2、在安装路径下找到setting.txt,添加两句话 node_mirror: http://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/3.再执行nvm install 就可以了。

【网络】TCP三次握手和四次挥手(感性理解)

目录 三次握手 文字描述三次握手过程 为什么是三次握手? 什么是SYN洪水? 连接和半连接队列 一次、两次握手行不行,四/五/六次握手行不行? 三次握手一定会成功吗? 三次握手的过程中可不可以携带数据 TCP中的IS…