计算机组成原理(2)-----存储芯片与CPU的连接

目录

一.单块存储芯片与CPU的连接

二.多块存储芯片与CPU的连接

1.位扩展

2.字扩展

(1)线选法

(2)译码器片选法

3.字位同时扩展

三.译码器相关


一.单块存储芯片与CPU的连接

如图所示是8*8位的芯片,总共8个存储字,每个存储字有8位

回忆一下存储器芯片的输入输出信号:

 注:现在的计算机MAR、MDR通常集成在CPU内部。存储芯片内只需一个普通的寄存器(暂存输入、输出数据)

二.多块存储芯片与CPU的连接

1.位扩展

只有存储字长与数据总线的宽度一致,才能尽可能地发挥数据总线的性能,若单块存储芯片字长小于数据总线的宽度,就可以使用位扩展

如下图所示,8K表示2^13次方,所以需要13根地址线A0~A12,CPU会把想要访问的地址通过地址线送到存储器中

WE则表示当这个信号是高电平时,CPU需要往存储器写数据,低电平时,表示CPU需要往其中读数据。

由于存储芯片位8K*1位,所以每次只能通过数据总线传送一个bit,数据总线没有被充分利用

CS为片选信号,高电平有效

为了解决数据总线没有被充分利用的问题,我们可以给主存加上一块相同型号的存储芯片。因为两个存储芯片都有8K个存储单元,若将CPU将13位的地址信息同时送给两个芯片,则这个地址数据会对应两个芯片相同位置的存储单元。

与第一块芯片不同的是,右边这一芯片读出的数据,可以作为CPU的D1读入的数据,如图所示,给CS都加上高电平,两块芯片就能同时工作:

使用同样的方法,可以增至8块存储芯片,如图所示:

数据总线可以同时把8位的数据信息,送至CPU,所以整个主存的存储字长被拓展为8bit

8片8Kx1位的存储芯片---->1个8Kx8位的存储器,总容量8KB,这就是位拓展

2.字扩展

若想要扩展主存字数,可以使用字扩展,如图所示的存储芯片,由于其字长已经是8位,数据总线宽度=存储字长,所以不需要进行位扩展了

但是我们会发现另一个问题,如图所示的CPU中MAR有16位,即2^16的寻址能力,但是我们只用了A0~A13这13根地址线,若依然使用第1节中位扩展的方法,这两个存储单元的8位的信息,会通过数据总线传给CPU,都会导致数据总线的冲突。

(1)线选法

对这一芯片的第一种改造方法为线选法我们将A13地址线连接到第一个芯片,将A14地址线连接到第二个芯片,当A13和A14两个信号分别为1,0时,第一个芯片CS为1,会工作,第二个芯片CS为0,不会工作。同理,若第二个存储器CS信号为1,第一个存储器CS信号为0。那么第二个存储器会工作。

所以A13,A14为01或10

A14,A13为01,第一个芯片工作,A14,A13为10,第二个芯片工作

总结:

可以看到线选法中A14,A13只能为01或10,n个存储体,就需要n条专门的地址线来表示n个选片信号。

(2)译码器片选法

其实只需要一根专门的地址线就可以表示片选信号。如图所示用A13传送片选信号。如图所示,若A13为1,那么第一个存储芯片的片选信号为1,第二个存储芯片的片选信号为0,若A13为0,则反过来即可。

所以A13为1,第一个芯片工作,A13为0,第二个芯片工作。

这里的电路我们可以将其看作1-2译码器,即输入一位地址信息,可能呈现2^1两种状态

总结:

我们可以使用译码器处理CPU的高位地址部分,对于专门用来表示片选信号的地址线,n条线就可以表示2^n个选片信号,如图所示3位译码器就对应8(2^3)根地址线

注:译码器的编号也可以逆过来

举个例子,如图所示,使用的是2-4译码器,这里各存储器的地址线是都是一端连接CPU,一段连接存储器的,这里只是为了看起来比较简洁

例如A13,A14为00,那么0号线会被选通,对应的存储芯片会工作,所以其地址范围为00 0....0~00 1.....1(00跟上13位地址) 

注:若为\overline{CS},则存储芯片\overline{CS}信号端,要画一个小圆圈

与此同理,其他存储器的地址范围如图所示:

若将A13,A15作为译码器的输入信号,无论A14这一位取0还是1,都影响不到选片操作,如图所示,对于第一个存储芯片,当A14为0时,有8K个合法地址,当A14为1时,也有8K个合法地址。

本来芯片只有8K个存储单元,然而有16个合法地址对应8K个存储单元,其他存储芯片也是类似,所以实际应用中,这种设计是不合理的。

总结:

对于字扩展,有线选法和译码片选法两种方法:

实际应用时都用译码片选法

3.字位同时扩展

如图所示,总共8个存储芯片,每两个芯片为一组,因为每个芯片为4位,而CPU能同时读写8位地址,即数据总线有8根,所以可以用两块芯片为1组进行位扩展

每个芯片是16K,即2^14次方,所以CPU的A0~A13这14位的地址信息作为片内地址,由于CPU的A14,A15两个地址信息没有使用,所以可以接一个2-4译码器,进行字扩展,总共有4个片选信号,所以可以接4组,每组有两个存储芯片。

1组为16K*8位,4组为64K*8位,合法的地址:

第一组为00开头,第二组为01开头,第三组为10开头,第四组为11开头,地址范围如图所示:

三.译码器相关

 补充(译码器相关知识点):

译码器输出端只有1条线能输出高电平,这种译码器就能和片选信号CS高电平有效存储芯片配合使用

若译码器输出端画了个小圆圈,那么有效信号是0,无效信号是1,这种译码器就能和片选信号CS低电平有效存储芯片配合使用

 

实际的译码器还有使能端,高电平有效,若使能端为1,则译码器工作

还有的译码器会有多个使能端,只有以下使能端都有效,译码器才能工作

对于74LS138译码器,是最常见的。若使能信号是非法的状态,译码器输出的都是全1

CPU可使用译码器的使能端控制片选信号的生效时间,CPU地址的输出与数据的输入输出外,还有一个很重要的输出信号(\overline{}\overline{MREQ},memory request) ,当CPU访问主存时,CPU就会使这个信号有效,即置为低电平

如下图所示,我们把译码器的G1和\overline{G_{2A}}置为1和0,即合法的值,再把\overline{G_{2B}}接通\overline{MREQ}信号的输出端,当CPU没有发出主存请求信号时,\overline{G_{2B}}输出1,此时译码器不工作,所有片选信号都为1,当CPU发出主存请求信号时,\overline{G_{2B}}输出0,译码器才会工作,把输入的地址信号映射为某一位选通信号

所以CPU与译码器是这样配合工作的:

① CPU先通过地址线送出地址信号,包括传到存储器的低的13位和传到译码器的高3位

这些地址信息是通过电信号传输的,当CPU刚开始输出电信号时,电信号不稳定,因此CPU发出地址信息后,会等电流稳定才发出主存请求信号\overline{MREQ}

② 这样能保证译码器的某一根选通线有效时,这块选通线所对应存储芯片所接收的地址信号稳定。

 具体地看一下RAM的读周期:

从红色划线处开始,CPU送出了地址信息

但CPU会等地址信号稳定后,才会发出主存请求信号\overline{MREQ},这会导致译码器的某个输出端,输出一个有效的片选信号,使得某片存储芯片被选通。

通过一段时间后,这个芯片某个存储单元的数据就可以通过数据总线传出到CPU,即图中的D_{out}

等数据传出一段时间后,CPU就会撤回主存请求信号\overline{MREQ},即撤回片选信号

当CPU确定接收到主存发来的数据后,就会撤回刚刚发出的地址信号

注:这样往上往下的画法表示输出的信号有0也有1

\overline{CS}低电平有效,高电平无效

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

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

相关文章

OS设备管理

设备管理 操作系统作为系统资源的管理者,其提供的功能有:处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机,或者可以接收…

高校危化试剂管理:Java与SpringBoot的革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Vue核心基础6:Vue内置指令、自定义指令、生命周期

1 Vue中的内置指令 <script>const vm new Vue({el: #root,data: {n: 1,m: 100,name: Vue,str: <h3>你好</h3>}})</script> 1.1 v-text <div v-text"name"></div>1.2 v-html <div v-html"str"></div> …

最小生成树(Kruskal算法及相关例题)

1.Kruskal算法概念以及基本思路 &#xff08;1&#xff09;概念&#xff1a; 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。它的时间复杂度为O&#xff08;ElogE&#xff09;(E是图G的边的总数)&#xff0c;适合于求边稀疏的网的最小生成树 。 其基本思想是&#xff…

黄金交易策略(Nerve Nnife.mql4):做单手数设计

完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 NK的做单量是由参数设定的&#xff0c;以下分别是参数项&#xff1a; 考虑到复利的情况&#xff0c;若10000本金&#xff0c;在以上三个参数的设计下&#xff0c;第1单的购买量是0.01*10,第2单是0.01*10*2…

Java迭代器详解,看这一篇就够了

文章目录 &#x1f6a9;Java 迭代器详解 &#x1f4da;迭代器的定义 &#x1f4d2;认识Iterator ✏️类结构图 ✒️Iterable接口 &#x1f58d;️Iterator接口 &#x1f4c3;Iterator接口的方法 &#x1f4d9;迭代器的使用 &#x1f3f7;️使用迭代器遍历集合 &#x1f516;Ite…

[BIZ] - 1.金融交易系统特点

1. 典型数据汇总 数据 说明 新增数据量(条/天) Qps(条/s) 消息大小(Byte) 实时性 可丢失性 可恢复性 实时行情 1.使用场景&#xff1a;交易&#xff0c;报价&#xff0c;策略验证&#xff1b; 2.冷热分离&#xff1a;彭博行情/其他行情&#xff1b;黄金&期货行情/…

Java图形化界面编程——AWT概论 笔记

2.3 Container容器 2.3.1 Container继承体系 Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;Panel可以容纳其他组件&#xff0c;但不能独立存在&#xff0c;它必须内嵌其他容器中使用&#xff0c;默认使用FlowLayout管理其内部组件布局&#xff1b;S…

交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计…

MySQL学习Day15——MySQL安装与使用

一、Linux下的MySQL的安装与使用: 卸载MySQL: 1.关闭当前MySQL服务:systemctl stop mysql.service 2.查看当前mysql安装状况:rpm -qa | grep -i mysql 3.卸载上述命令查询出的已安装的程序:yum remove mysql-xxx mysql-xxx mysql-xxxx 4.删除mysql相关文件: (1)查找相关文…

解决vscode报错,在赋值前使用了变量“XXX“

问题&#xff1a;如图所示 解决方法&#xff1a; 法一&#xff1a; 补全函数使其完整 法二&#xff1a; 使用断言

c++Qt网络操作

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

【STM32 CubeMX】串口编程DMA

文章目录 前言一、DMA方式1.1 DMA是什么1.2 CubeMX配置DMA1.3 DMA方式函数使用DMA的发送接收函数 总结 前言 在嵌入式系统中&#xff0c;串口通信是一项至关重要的功能&#xff0c;它允许单片机与外部设备进行数据交换&#xff0c;如传感器、显示器或其他设备。然而&#xff0…

Linux笔记之xhost +和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解

Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解 ——2024-02-11 code review! 文章目录 Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解xhost 的作用xhost 与 Docker 的关系 -e GDK_SCALE 和 -e GDK_DPI_SCALE详解GDK_SCALEGDK_DPI_SC…

【Linux】进程的初步认识

进程的初步认识 基本概念描述进程task_struct-PCB的一种task_stuct内容分类 查看进程通过系统调用获取进程标识符 基本概念 要了解进程&#xff0c;首先我们要知道两点 我们可以同时启动多个程序&#xff0c;也就意味着我们可以将多个.exe文件加载到内存操作系统如何去管理这些…

036-安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入

036-安全开发-JavaEE应用&第三方组件&Log4j日志&FastJson序列化&JNDI注入 #知识点&#xff1a; 1、JavaEE-组件安全-Log4j 2、JavaEE-组件安全-Fastjson 3、JavaEE-基本了解-JNDI-API 演示案例&#xff1a; ➢Java-三方组件-Log4J&JNDI ➢Java-三方组件-Fa…

OpenAI全新发布文生视频模型Sora - 现实,不存在了

OpenAI&#xff0c;发他们的文生视频大模型&#xff0c;Sora了。。。。。 而且&#xff0c;是强到&#xff0c;能震惊我一万年的程度。。。 https://openai.com/sora 如果非要用三个词来总结Sora&#xff0c;那就是“60s超长长度”、“单视频多角度镜头”和“世界模型” &am…

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

这场还是很有含金量的&#xff0c;B题开始就有难度了&#xff0c;B是个推结论的题&#xff0c;C要推结论然后递推&#xff0c;D题是有点难的树上DP&#xff08;主要是状态转移方程不好写&#xff09;&#xff0c;E题是个二进制预处理然后状压DP&#xff0c;F题是个数论&#xf…

写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数输入-1表示结束

#include <stdio.h> int main(void) {int x;int count[10];int i;for(i0;i<10;i){//初始化数组 count[i]0;}scanf("%d",&x);while(x!-1){if( x>0 && x<9){count[x];//数组参与运算 }scanf("%d",&x);}for(i0;i<10;i){pr…

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…