计算机组成原理 寄存器实验详解(含工程文件)
寄存器实验
先放一张 Proteus 总体仿真图,设计过程还是比较复杂的,需要考虑总体的布局,线路的排布等等。。。<font color="red">我将原工程文件放在文末,需要可自取</font>
实验要求
基本要求
理解 CPU 运算器中寄存器的作用
设计并验证寄存器组(至少四个寄存器)
利用寄存器或组合逻辑电路实现移位运算功能(至少含左移、右移、循环左移、循环右移四种运算功能)
扩展要求
实现更多的寄存器
实现多总线结构寄存器访问
分析
实验要求设计验证寄存器,还有实现移位功能,扩展功能是使用多总线结构和更多寄存器,这里我使用双总线结构,八个寄存器。
实验中用到的元器件如下
74LS373(寄存器)
74LS299(通用移位/存储寄存器)
74LS138(译码器,用来控制八个寄存器)
74LS245(数据传送)
SW-SPDT(单刀双掷开关)
LED(用来显示输出)
RES(LED 下拉电阻)
4073(与门)
4075(或门)
74LS04(非门)
74LS299 功能表如下
其功能被表引脚与 Proteus 元器件有些许不同
CLR 对应 MR(低电平有效)
不管任何状态,强制清零
输出控制 G1、G2 对应 OE1、OE2(低电平有效)
需要输出时,将这两个引脚置 0
CLK
脉冲信号
查看功能表即可,需要上升沿时,就将开关拨高再拨低
D7、D0
下一位移位的数
Q7、Q0
保存最高位和最低位
其他元器件的使用自行百度即可
设计
这里说一下怎么使用 74LS138 和门电路组合实现控制八个 74LS373
我们使用 74LS138 的输出和 两个开关(一个读开关、一个写开关)作为输入,因为我们实现能够 <font color="red">同时控制 74SL373 的读/写 </font>
对应的输出就是 74LS373 的读和写
可得到如下真值表
对应表达式如下
最后根据表达式进行连线即可
运行流程图如下
电路设计可根据下述操作慢慢理解
具体实现
<font color="red">(一)验证寄存器写操作</font>
首先,通过开关给 74LS245 输入数据,打开 74LS245 开关(CE 引脚置 0),将数据传送到总线上。如果需要对数据进行保存,通过 74LS138 输入开关(A、B、C)选通某个 74LS373 寄存器,打开 74LS373 的写开关(OE 引脚),将数据写入 74SL373 ,然后关闭写开关,关闭 74LS245(CE 引脚置 1)。关闭 74LS245 后,此时总线上无数据。(放一张中间的图吧,下图对应的 74LS138 选通的是第一个寄存器,打开 74SL373 写开关)
<font color="red">我这里测试的八位数据是
00100100
,选择的寄存器是第一个</font>
<font color="red">(二)验证寄存器读操作</font>
接着上一步,将 74LS373 的读开关(LE 引脚)打开,将 74LS373 中所存的数据输出到总线上,读操作完成。
如图,此时 74LS245 是关闭的(CE 引脚为 1)的,打开 74LS373 的读开关后,数据输出到总线
<font color="red">(三)移位操作</font>
移位和循环移位的区别
循环移位区别于一般移位的是移位是 <font color="red">没有数位的丢失</font>。
循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧
例: 10110011
右移 1 位得到 :01011001
循环右移 1 位得到:11011001
进行移位操作前,需要先将总线上的数据写入 74LS299 ,接着上一步,我们已经将 74LS373 的数据输出到总线上,然后我们给与 74LS299 的 CLK 引脚一个上升沿,就可以将总线上的数据写入 到 74LS299 中, 然后关闭 74LS373 的读开关(此时总线无数据)
<font color="red">左移操作</font>
74LS299 的 OE1、OE2、S1 、D7、D0 引脚均置 0,S0、MR 引脚置 1(MR 为 0 强制清零),持续给 CLK 上升沿就可以了(将开关重复拨上拨下) ,观察 LED 的变化。
如下图,持续进行左移操作,发现 <font color="red">最高位被移出</font>
<font color="red">右移操作</font>
右移 S1 置 1,S0 置 0,OE1、OE2、S0 、D7、D0 引脚均置 0,S1、MR 引脚置 1,同样持续给与 CLK 引脚上升沿,然后观察 LED 的变化。
如下图,持续进行右移操作,发现 <font color="red">最低位被移出</font>
<font color="red">(四)循环移位操作</font>
<font color="red">循环左移</font>
将 74LS299 的 D7 引脚接到 Q0 引脚,D0 引脚接到 Q7 引脚,OE1、OE2、S1 、D7、D0 引脚均置 0,S0、MR 引脚置 1,持续给与 CLK 上升沿,观察 LED 变化。
如下图进行循环左移操作,我们可以看出,<font color="red">循环左移最高位移动到了最低位</font>
<font color="red">循环右移</font>
将 74LS299 的 D7 引脚接到 Q0 引脚,D0 引脚接到 Q7 引脚,OE1、OE2、S0 、D7、D0 引脚均置 0,S1、MR 引脚置 1,持续给与 CLK 上升沿,观察 LED 变化。
如下图进行循环右移操作,我们可以看出,<font color="red">循环右移最低位移动到了最高位</font>
我们可以将循环右移后的总线上的数据写入 74LS373 中。如图,将总线上的数据写入到 74SL373 中,并进行了
读操作
(LE)
思考问题
最后有一个小的思考问题
思考随着寄存器的增多,电路设计的复杂度是什么比例增大
寄存器增多,设计上来说复杂度是成倍的增加,电路的设计难度也有一定的提高。
<font color="red">原工程文件:</font>链接:https://pan.baidu.com/s/1mVnxtAznoFetXNdCohPYkg 提取码:hmcq
如果本文对你有小小的帮助,请点个赞再走吧 :smile:
版权声明: 本文为 InfoQ 作者【若尘】的原创文章。
原文链接:【http://xie.infoq.cn/article/5e1ab87955fe68b7249e89b57】。文章转载请联系作者。
评论