计算机组成原理 寄存器实验详解(含工程文件)

188 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

寄存器实验

先放一张 Proteus 总体仿真图,设计过程还是比较复杂的,需要考虑总体的布局,线路的排布等等。。。 我将原工程文件放在文末,需要可自取

在这里插入图片描述

实验要求


  • 基本要求
    • 理解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 的输出和 两个开关(一个读开关、一个写开关)作为输入,因为我们实现能够 同时控制 74SL373 的读/写
  • 对应的输出就是 74LS373 的读和写
  • 可得到如下真值表在这里插入图片描述
  • 对应表达式如下 在这里插入图片描述
  • 最后根据表达式进行连线即可
  • 运行流程图如下 在这里插入图片描述
  • 电路设计可根据下述操作慢慢理解

具体实现

(一)验证寄存器写操作

  • 首先,通过开关给 74LS245 输入数据,打开 74LS245 开关(CE引脚置0),将数据传送到总线上。如果需要对数据进行保存,通过 74LS138 输入开关(A、B、C)选通某个 74LS373 寄存器,打开 74LS373 的写开关(OE引脚),将数据写入 74SL373 ,然后关闭写开关,关闭 74LS245(CE引脚置1)。关闭 74LS245 后,此时总线上无数据。(放一张中间的图吧,下图对应的 74LS138 选通的是第一个寄存器,打开 74SL373 写开关)

我这里测试的八位数据是 00100100,选择的寄存器是第一个

在这里插入图片描述

(二)验证寄存器读操作

  • 接着上一步,将 74LS373 的读开关(LE引脚)打开,将 74LS373 中所存的数据输出到总线上,读操作完成。
  • 如图,此时 74LS245 是关闭的(CE引脚为1)的,打开 74LS373 的读开关后,数据输出到总线 在这里插入图片描述

(三)移位操作

移位和循环移位的区别

  • 循环移位区别于一般移位的是移位是 没有数位的丢失。
  • 循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧
  • 例: 10110011
    • 右移1位得到 :01011001
    • 循环右移1位得到:11011001
  • 进行移位操作前,需要先将总线上的数据写入 74LS299 ,接着上一步,我们已经将 74LS373 的数据输出到总线上,然后我们给与 74LS299 的 CLK 引脚一个上升沿,就可以将总线上的数据写入 到74LS299 中, 然后关闭 74LS373 的读开关(此时总线无数据)

  • 左移操作

    • 74LS299 的 OE1、OE2、S1 、D7、D0 引脚均置 0,S0、MR 引脚置1(MR为0强制清零),持续给 CLK 上升沿就可以了(将开关重复拨上拨下) ,观察 LED 的变化。
    • 如下图,持续进行左移操作,发现 最高位被移出 在这里插入图片描述
    • 右移操作
      • 右移 S1置1,S0 置0,OE1、OE2、S0 、D7、D0 引脚均置 0,S1、MR 引脚置1,同样持续给与 CLK 引脚上升沿,然后观察 LED 的变化。
      • 如下图,持续进行右移操作,发现 最低位被移出 在这里插入图片描述

(四)循环移位操作

  • 循环左移
    • 将 74LS299 的 D7 引脚接到Q0引脚,D0 引脚接到 Q7 引脚,OE1、OE2、S1 、D7、D0 引脚均置 0,S0、MR 引脚置1,持续给与 CLK 上升沿,观察 LED 变化。
    • 如下图进行循环左移操作,我们可以看出,循环左移最高位移动到了最低位在这里插入图片描述
  • 循环右移
    • 将 74LS299 的 D7 引脚接到Q0引脚,D0 引脚接到 Q7 引脚,OE1、OE2、S0 、D7、D0 引脚均置 0,S1、MR 引脚置1,持续给与 CLK 上升沿,观察 LED 变化。

    • 如下图进行循环右移操作,我们可以看出,循环右移最低位移动到了最高位 在这里插入图片描述

    • 我们可以将循环右移后的总线上的数据写入 74LS373 中。如图,将总线上的数据写入到 74SL373 中,并进行了 读操作(LE) 在这里插入图片描述

思考问题

  • 最后有一个小的思考问题 思考随着寄存器的增多,电路设计的复杂度是什么比例增大

  • 寄存器增多,设计上来说复杂度是成倍的增加,电路的设计难度也有一定的提高。

原工程文件: 链接:pan.baidu.com/s/1mVnxtAzn… 提取码:hmcq