计算机组成原理实验解析
于2021年12月7日2021年12月7日由Sukuna发布
数据表示实验
第一关:汉字转换
- 区位码 2020H=国标码
- 那么根据补码原理,国标-2020H = 国标 FFFFH-2020H 1 = 国标 DFDFH 1 = 国标 DFE0H
第二关:偶校验码生成
回忆:偶校验就是为了让数里面1的个数为偶数,做法是所有数位.奇校验就是让数里面1的个数为奇数
第三关:检验错误
偶校验检验错误就是看数里面1的个数是不是偶数,做法就是异或:
第四关:海明编码
海明码的位置是这样的,校验位占据2的幂方次位,其他数据位就是占据其他没有被校验位占据的位置. 对于数据位
怎么放置校验组的方法就是看数据位的下标,把下标
用二进制标出来,第几位是1就放进第几组校验组. 第n组校验组里面全部都是下标第n位为1的数据 比如说
,二进制标出来是1111,就放入第一个第二个第三个第四个校验组里面.然后每个校验码都是校验组里面所有数据位异或即可.
第五关:海明解码
看看总校验码G的大小,G=0代表没有出错,G=n代表第n位出错了,最后有一个总的偶检验位,如果发生了两位错,偶检验是检验不出来的,但是一位错偶检验肯定能看出来.
运算器实验
第一关:8位可控加减法器
时延已经填写在上面了,全加器的时延是,产生进位需要5T,获取答案需要6T,但是我们知道在第二个全加器之后,有关X和Y的运算都已经算好了,就等待上一个全加器的进位信号了,也就是说假如说有关X和Y的运算已经算好的情况下,全加器输出进位只需要2T,输出结果只需要3T.也就是说n个全加器输出进位信号只需要2n 6T的时间.
实验的思路很简单,就是上一位的进位沿着进位链进行传播.下面用一个Sub信号代表控制减法,因为根据减法的性质,我们可以知道x-y就相当于x -y的补码,负数的补码就是取反 1,这个可以用异或门代表取反,谁异或0都是自己,谁异或1都是自己的相反.
第二关:四位先行进位加法器
我们可以构造
,
,这个时候我们就知道
,
,然后按照级次来依次构造,生成本组的进位生成函数和进位传递函数,这个时候我们对于4的倍数位加法就可以进行分割,每4位进行一次加法,然后每个四位都可以生成进位和得数
第三关:四位快速加法器
输入X和Y,通过每一位的P和G生成进位,这个时候可以利用生成得到的进位函数直接带入全加器进行运算,就是用一个电路并行生成进位,然后再用这个进位直接生成答案
第四关:16位快速加法器
这下可以把16位拆成4个4位运算,把每个4位运算当成整体来进行计算,先输入X和Y(4位),每4位都可以产生进位生成函数和进位传递函数,接着传给CLA74182,它会并行生成
的进位信号.接着4个快速加法器可以并行生成答案.
思路就是把16位的分解成4个4位的,对每个4位的加法都当成一个整体,这4位加法都产生进位生成函数和进位生成函数然后传递给CLA74182,接着生成进位.并行计算
时延:每个快速加法器生成P和G,5T,74182计算进位,2T,就是7T,每个元素算出答案是5T,就是12T
第五关:32位快速加法器
把32位拆成2个16位,第一个16位加法运算的向后进位传递给第二个16位加法运算.
第六关:阵列乘法器
对着书看就行
第七关:乘法流水线
模仿竖式计算的思路,通过与门阵列的元素乘数第n位乘以被乘数的值,这个是5位的,然后就是模拟竖式计算的.
第八关:补码阵列乘法器
单独对符号位进行处理.负负得正,正负得负.
第九关:原码一位乘法器
为什么计数器要到9才停止呢?因为第一次要载入Y,有n位就做n次加法运算,然后维护一个暂存值P,每一次做加法都看y的最低一位,如果最低一位是0的话,暂存值就加0,如果最低一位是1的话,暂存值就加x.注意,每次做完加法Y和暂存值P都要往右移动一位
第十关:补码一位乘法器
在y的右边增加一位,这样一来,Y就有n 1位元素了!还是一样,有一个暂存值P还有一个Y值,加法的时候就是看Y的最后两位(包括增加的那一位),如果最后两位是01的话就是暂存值P加x,如果最后两位是11&00的话就是暂存值P加0,如果最后两位是10的话就是暂存值P减去x.做完加法后的话暂存值和Y都是要右走一位的.
存储器实验
第一关:字库实验
一个大的块分成若干个小的块,地址不变的情况的情况下,地址的高位选择究竟是哪块,低地址就是选择块内的哪一个字节.
第二关:RAM
首先是选择究竟是直接访问一个字,还是一个字节,还是只是半个字.如果是一个字就好办,如果只是半个字的话,另外一半字就是要输出0,如果只是一个字节,那么另外3/4个字就是0.写也是一样,但是写的话可以选择究竟写在哪个半字,究竟写在哪个字节里面.
在字节的情况下,Din0,Din1,Din2,Din3都是一样的,在字的情况下,Din0,Din1&Din2,Din3都是一样的,然后我们可以根据半字选择和字选择选择写在哪里或者读在哪里.假设字有4位,那么倒数第2位就是选择写在哪个半字里面,最后2位就是字内偏移.
第三关:寄存器组,W#确定写在哪里,WE表示这里要开始写数据了,R1#表示选择哪个寄存器来读.很简单(注意,第一个寄存器一定是0)
第四关:四路组相连Cache
这个电路比较复杂,现在我在这里进行讲解.
这一个部分是对地址进行分析的,把地址进行了分块,最低的就是块内偏移,index代表会分到哪一个组里面,这个是确定的,这里面一共分成了4个部分,每个部分有两组.最后一个就是tag.
cache被分成固定大小的组,每组有k行,就是k-路组相连.cache组号=主存块号�che组数(这里cache有两组)
接着就是存储功能的器件:这里cache有8个行,一组有4行,一共有两个组,所以说cache组号=块号%2,每一行存储了淘汰计数,valid,tag和数据副本.
检查命中:检查命中的原理就是,先看这个主存地址属于哪一组,然后在这个组内部的4个元素一一进行比较,找到和哪个tag是一样的.
写入也是一样的,对于要写入cache的主存地址,首先看看这个主存地址属于哪个组里面,再在这个组里面寻找到一个合适的位置塞进去.
所有的行里面的valid都满了那就是槽满了
淘汰策略:没有被访问过计数器的值 1,被访问过了就清零,然后看计数器内部的元素谁最大?
选择写在那个槽里面