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

news2024/9/22 11:38:38

一、实验目的

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.coloradmin.cn/o/735945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】在DACS沙箱内配置Telepresence工具(社区版限制5人连接)

使用 Telepresence 映射 Kubernetes 服务到 DACS 沙箱内 Telepresence 属于沙箱工具,它可以把我们在AWS云平台的EKS(Kubernetes)上部署的服务映射到本地,这样大家就可以在本地访问EKS(Kubernetes)上的资源了,如注册中心Nacos、Redis、Kafka等服务 安装 Telepresence 安装…

使用最小二乘进行多项式曲线拟合

目录 写在前面曲线拟合方法pcl实现的b样条曲线拟合最小二乘曲线拟合原理代码注:结果 参考完 写在前面 1、本文内容 使用Eigen进行最小二乘拟合曲线 2、平台/环境 Eigen(open3d), cmake, pcl 3、转载请注明出处: https://blog.csdn.net/qq_41102371/ar…

【Git】Github 上传文件到远程仓库时,经常发生网络错误,一个比较稳定的连接方法及我的示例

文章目录 一、问题导读二、完整的一个流程2.1 初始化2.2 从远程仓库拉取最新的更改并合并到当前分支2.3 远程仓库的 SSH URL2.4 添加到暂存区2.5 提交操作2.6 将一个远程仓库添加为 Git 仓库的远程别名2.7 推送到远程仓库2.8 最后的结果 三、HTTP和SSH的理解3.1 两者的区别3.1.…

【网络系统集成】网络认证实验

1.实验名称 网络认证实验 2.实验目的 学习网络认证配置 3.实验内容 3.1拓扑结构图 3.2地址分配 <

OpenCV实战(28)——光流估计

OpenCV实战&#xff08;28&#xff09;——光流估计 0. 前言1. 光流估计原理2. 光流算法实现3. 完整代码小结系列链接 0. 前言 当相机进行拍摄时&#xff0c;拍摄到的亮度图案会投射到图像传感器上&#xff0c;从而形成图像。在视频序列中&#xff0c;我们通常需要捕捉运动模式…

HCIP--OSPF实验1

1、合理规划IP地址&#xff0c;启用ospf单区域 2、R1-R2之间启用ppp的单向认证 3、R2-R3之间启用ppp的chap认证 4、R3-R5-F6之间使用MGRE&#xff0c;R3为hub端&#xff0c;R5,R6为spoke端&#xff1b; 要求MGRE接口网络型为BMA&#xff0c;spoke之间通信必须经过hub端 5、全…

Linux--进程

什么叫做进程&#xff1f; 程序加载到内存就叫进程&#xff08;看不懂是吧&#xff0c;看下面更详细一些&#xff09; 进程对应的代码和数据进程对应的PCB结构体

MySQL索引原理和优化

目录 1 什么是索引&#xff1f;1.1 引言1.2 索引原理1.3 索引分类1.3.1 主键索引1.3.2 普通索引&#xff08;单列索引&#xff09;1.3.3 复合索引&#xff08;组合索引&#xff09;1.3.4 唯一索引1.3.5 全文索引1.3.6 索引的查询和删除 1.4 索引的优缺点 2 索引数据结构2.1 Has…

做题遇见的PHP函数汇总

mb_substr函数 mb_substr() 函数返回字符串的一部分&#xff0c;之前学过 substr() 函数&#xff0c;它只针对英文字符&#xff0c;如果要分割的中文文字则需要使用 mb_substr() 语法&#xff1a; mb_substr ( $str ,$start [, $length NULL [, $encoding mb_encoding() ]] …

改进版简化路径。

美图 在原有的基础上增加对 cd - 的处理。 在 Unix 命令中&#xff0c;cd - 表示返回上一次所在的目录。我们可以使用一个变量来记录上一次所在的目录&#xff0c;在遇到 cd - 时将当前目录设置为上一次所在的目录。 以下是增加对 cd - 的处理后的代码&#xff1a; 4 cd /…

016 - STM32学习笔记 - SPI读写FLASH(一)

016 - STM32学习笔记 - SPI访问Flash&#xff08;一&#xff09; 之前csdn的名称是宥小稚&#xff0c;后来改成放学校门口见了&#xff0c;所以前面内容看到图片水印不要在意&#xff0c;都是自己学习过程中整理的&#xff0c;不涉及版权啥的。 1、什么是SPI&#xff1f; SP…

Linux项目自动化构建工具-make/Makefile以及git三板斧

目录 一、关于make/makefile的背景知识二、依赖关系和依赖方法三、make/makefile如何书写&#xff1f;四、文件的三个时间(Access、Modify、Change)五、Linux下倒计时和进度条代码的书写5.1 回车换行5.2 缓冲区5.3 倒计时代码实现5.4 进度条代码实现 六、git三板斧6.1 什么是gi…

10.15资源加载

定义&#xff1a; 1.直接属性引用 生成一个actor和声音&#xff1a; 运行时就会产生一个Myactor中设置的Actor并且播放Myactor中设置的声音。 音频&#xff1a;class USoundCue&#xff1b; 纹理&#xff1a;class UTexture&#xff1b; 材质&#xff1a; class UMaterial 模…

TCP/IP出现的背景及其历史【图解TCP/IP(笔记八)】

文章目录 TCP/IP出现的背景及其历史从军用技术的应用谈起ARPANET的诞生TCP/IP的诞生UNIX系统的普及与互联网的扩张商用互联网服务的启蒙 TCP/IP出现的背景及其历史 从军用技术的应用谈起 20世纪60年代&#xff0c;很多大学和研究机构都开始着力于新的通信技术。其中有一家以美…

jmeter列表数据断言

在jmeter接口请求中&#xff0c;通常需要根据接口data列表有无返回的数据断言是接口请求成功&#xff0c;如图1&#xff0c; 通常有这么几种方法&#xff1a; beanshell断言 json断言 响应断言 图1&#xff1a; 失败请求&#xff1a;{"code":0,"msg"…

小甲鱼- python -洗牌算法 —— Fisher-Yates

练习1 自己的原始代码 &#xff08;比较复杂&#xff09; 1.没有把字符串转为列表&#xff0c;所以不能利用pop # 打乱的次数 for i in range(1,4):s "ABCDEF"n 4list []l len(s)while l > 0:k random.randint(1, l)list.append(s[k-1])s s.replac…

电子设备电池容量与充电器功率的关系

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 抛出问题 手机的工作电压 手机的工作电流 手机的电池容量 电能转换公式 充电器功率 充电时间计算 总结 抛出问题 你是否也想过&#xff0c;你的手机电池容量是5000mAh&#xff0c;手机充电器是120W快…

基于低代码平台的项目设计的一般流程及低代码平台(基于iVX)与MVC的关系

基于低代码平台的项目设计的一般流程及低代码平台&#xff08;基于iVX&#xff09;与MVC的关系 1.基于低代码平台的项目设计的一般流程a.流程图b.MVC架构应用于iVX项目的各分层排序&#xff1a;&#xff08;1&#xff09;第一步&#xff1a;写M&#xff08;2&#xff09;第二步…

LeetCode[912]排序数组

难度&#xff1a;Medium 题目&#xff1a; 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,…

Openlayers实战:显示海量数据

Openlayers地图中通常的加载方式是canvas,另外还一种加载方式是webGL,在绘制海量数据时,使用GPU进行绘制可有效减少CPU的负载,提升绘制时的速度在浏览器中,可以使用WebGL的方式与GPU交互。 在本实战中,使用WebGLPoints显示海量数据。 效果图 源代码 /* * @Author: 大剑…