组成原理/系统结构学习001
发布于 6月16日 编辑
存储器与CPU的连接
1.地址线的连接
2.数据线的连接
3.读/写命令线的连接
4.片选线的连接
- 要确认CPU访问的是存储器,不是IO
- 每一个内存芯片,都有自己的地址范围
- 每一根地址线,都要用到,有一些地址,作为存储芯片内部地址,给它输入到存储芯片内部,
- 有一些地址,要作为片选信号,来保证对某一个芯片的访问一定是在给定的的地址范围内访问
5.合理的选择存储芯片
- 一般来说,保存系统程序的地方,用ROM,保存配置信息的也用ROM,不常改变
- 用户的程序,系统程序运行的,用RAM
- 芯片尽可能数量少,片选逻辑尽可能简单
6.其它 时序,负载 ( 不怎么关注 )
例子: 16根地址线( 寻址范围是64K ),8根数据线( CPU每次向存储器中读或者写数据,都要读或者写8位 )
通过片选线连接在一起,就可以使得位拓展
138译码器的例子
结构和功能
1.三个输入 C,B,A
2.一共有8个输出端,有一个是低电平,其他都是高电平
3.要想正常工作,三个控制端G1,G2A,G2B要有相应的信号输入才能工作
4.所有的地址线都要用
G2A,G2B都是低电平有效,A15是低电平.故要连接在一起
这里的MREQ一定要用到,只有G2B的低电平,这次访问的地址才在存储器中.
中间想是不是要写点什么
ROM里的数据只能进行读出,不能写入,所以数据线是单向的.编程端接地.
RAM是可以读出写入的,所以数据线是双向的.所以有WR线和它相连.
两片1K* 4位的RAM,是分别连接到D0-D3,D4-D7的.
这是一道稍作修改条件的同类题目:
后面就是分配地址线,C,B,A分别对应的是A14-A12,
把A11-A0地址给每一个芯片,前面的给片选信号来用.
G1高电平,直接接电源,或者A15取反接到G1.
G2A,G2B都是低电平,用A15就可
MREQ低电平有效,接A15或者A14
这是CPU与存储器的连接图:
片选信号很灵活.可以使用数字逻辑的知识,自己画片选.
MREQ也是要考虑的,所以不要忘记了.
存储器的校验
1.编码的最小距离
任意两组合法代码之间 二进制数 的 最少差异 编码的纠错,检错能力,与编码的最小距离有关.
L-1 =D + C (D>=C)
L---编码的最小距离
D---检测错误的位数
C---纠正错误的位数
汉明码 是一种具有一位纠错能力的编码
- 汉明码采用奇偶校验
- 汉明码采用分组校验
汉明码的分组是一种非划分方式(为啥这么分,我也不知道)
这里参考这篇帖子,戳我
1|2|3|4|5|6|7
分为三组,每组有1位校验位,共包括四位数据位
第一组: [ 1,3,5,7 ]
第二组: [ 2,3,6,7 ]
第三组: [ 4,5,6,7 ]
如何分组
第一组 xxxx1 1357
*这里之前有疑问,为啥不是1,3,5,6呢?其实就是最后这个 位是1,那么必然是奇数,绝不可能是6,遂取7
第二组 xxx1x 2367
*这里的取值为啥不是2,3,5,6呢? 笨蛋!因为5对应是0101
这样两次傻瓜般的猜想,才令人安心
第三组 xx1xx 4567
第四组 x1xxx
第五组 1xxxx
(这里第四,第五没有是因为这个例子用不到,就是表示这个含义)
如果 从右往左数,两位都为1,比如 xx1x1这种类型,说明这 表示第一组和第三组相同的那个值(见韦恩图中的交叉部分)
汉明码的组成
汉明码三要素:
- 增添多少位检测位
添加多少检测位,就是分成多少组.
校验位有 k 位,信息位有 n 位
2^k >= n + k + 1 - 检测位的位置在哪
放在 2^i (i= 0,1,2…) - 检测位的取值
取值与该为所在的检测"小组"承担的就校验任务有关
然后就是这个,第i小组,其独占2^(i-1)位
例题: 求0101按照"偶校验"配置的汉明码
信息位数为 4
2 ^ k >= 5 + k --> k = 3
所以求得三组,有2^(i-1)可得,放在1,2,4位置上,3,5,6,7放传输的代码.即放0101
汉明码排序如下:
二进制序号 | 1 2 3 4 5 6 7
名称 |C1 C2 0 C4 1 0 1
//说白了就是确定C1,C2,C3具体数值
第一组:1,3,5,7
第二组:2,3,6,7
第三组:4,5,6,7
对应上方的表,取出来之后,
第1组: C1 , 0 , 1 , 1
第2组: C2 , 0 , 1 , 0
第3组: C4 , 1 , 0 , 1
采用的是偶校验,保证它1的个数是偶数个即可
那么很明显:
C1 = 0
C2 = 1
C4 = 0
所以汉明码就是010 0101
汉明码的纠错过程
形成新的检测位Pi,其位数与增添的检测位有关,如增添3位(k=3),新的检测位为P4,P2,P1
其实是异或来的.
以下神奇操作,我还没怎么明白,但是知道做法:
为0是没错的,为1是有错的.
把出错的它们中的算术组成元素找到相同的,就是错的位数.
{或者,使用P4P2P1连接在一起,组成110,也是6(感觉很神奇),把第六位制反,就可以了}
???这里写一点疑问,为啥它就直接写124,然后剩下四位就是信息位???
上方
应该是因为1,2,4,8开头的数
例题: 0101101的纠错过程
1 3 5 7
0 0 1 1 --> 0
2 3 6 7
1 0 0 1 --> 0
4 5 6 7
1 1 0 1 --> 1
所以对比发现 4 有问题 把 0 0 1 倒过来 是100,也是4,那么就是第 四位改为反.即0101是正确的信息位.
???but老师说,可以不纠错第四位,因为纠错只纠信息位,那意思是第四位不是信息位???
汉明编码最小长度是3.
{为啥我也不知道}
提高访存的速度的措施
- 采用高速器件
- 采用层次结构 Cache-主存
- 调整主存结构
1.单体多字系统
就是增大存储体的位数
2.多体并行系统
高位交叉
适合增加容量,但仅此而已.
低位交叉
下面这个是实现并行的.
地位交叉的特点:
在不改变存储周期的前提下,增加存储器的带宽.
热心UP主配的课后习题
附上B站网课链接
某机字长为32位,其存储容量是64KB
1) 若主存按字编址,它的寻址范围是多少?
2) 若主存按字节编址,是画出主存字地址和字节地址的分配情况.
这里要说的是,不论字长是多少位,1 Byte = 8 bit 是恒成立的.
Byte(字节)
说明字长多少位,就是这里说的字长 = 2B or 4B 的问题
解:
1. 字长32位,说明一个字 等于4B
64KB / 4B = 16K
2.按字节编址 ,那么就是
64KB / 1B = 64K
字号就是每一个字的标识符,用于表示 第一个字,第二个字.....
由于可以划分成16k个,那么就是2^14个,于是需要14位.
如图中所示,是假设高位字节地址为字地址,
那么就是可以向途中清晰看到啦,左边一串红色的,就是表示字号的.
例题:
某8位微型机地址码为18位,若使用4K 4位的RAM芯片组成的模块版*结构的存储器,试问:
1) 该机所允许的最大主存空间是多少?
2) 若每个模块板为32K * 8位,共需几个模块版?
3) 每个模块版内有几片RAM芯片?
4) 共有多少片RAM?
5) CPU如何选择各块模板?
解:
1> 2^18 * 8 =256 K
2> (2^18 8) / 32k 8 = 2^18 / 2^15 =8片
3> 32K 8 / 4K 4 =16
4> 16 * 8 =144
5>主要想要说明的
这是一个18位地址码的机器,问题就是如何分配这18位
由于微型机是8位的,那么用4K* 4位的机器,就需要位 拓展(片选线连一起,两个当一个用,这样才能变8位)
|模块板号|RAM片号|每个RAM中的片内地址|
| 3 | 3 | 12 |
|<------------共18位-------------->|
有 8 块模块板,编号0-7,可以考虑用3位表示
每块模块板里面,有16片RAM芯片,编号0-15,
每个RAM芯片里,容量是4K,即12位
这里着重说明上面3,3,12是怎么来的.
- 第一个3是模板块号
- 第二个3是表示在0-15的RAM片号中, 4K*4位RAM芯片两两一组,所需要的标识是0-7,故只需要三位
- 第三个12 18-3-3 = 12 or (4k*4位的RAM芯片可以看到4k = 2^12)
再看一个题:
(刘宏伟老师之前讲了一模一样,只是口述无ppt)