• 【计算机组成原理】寄存器的本质——锁存器


    一.逻辑门电路 

            逻辑门的与门知道吧

            

            逻辑门的或门听说过吧

            

             逻辑门中的非门简单吧

            

            基础知识就复习到这里(—...—)

    二.AND—OR锁存器

            如果把与门的其中一个输入与输出连接在一起会发生什么?

           我们可以观察到,激活状态后无论IN1输入“1”或者“0”,OUT都总是“0”,因此我们就有了一个可以存储“0”的电路了!

            那如果把非门的其中一个输入与输出连接在一起会发生什么?

           我们可以观察到,激活状态后无论IN1输入“1”或者“0”,OUT都总是“1”,因此我们就有了一个可以存储“1”的电路了!

            如果把我们两个电路同时连接起来,就可以组成一个名为“AND-OR锁存器”的电子器件:

             当INPUT1=1,RESET=0时,输出如下(深色部分意味着电路通):

            当INPUT1=1,RESET=1时,输出如下(深色部分意味着电路通):

             如图上所示,在“与”逻辑电路中,由于两个输入“1”和“0”导致条件没有成立,所以“AND”这个电路没有通,这也意味着电路的输出(OUTPUT)1为上次锁保存到的1,也就意味着电路记住了1个bit的信息。

            我们再来,当INPUT1=0,RESET=1时,输出如下(深色部分意味着电路通):

            这样可能很难发现问题所在,我们把前面三个图的输出汇总成一个表格:

            发现问题了吗?其实RESET线是起到开关的作用!当RESET=1时,锁存器电路关闭数据输入,这时候不管INPUT1输入什么数据,OUTPUT端都是保存了上一次保存到的数据。当RESET=0时,锁存器电路打开数据输入,这时候INPUT1输入什么就会把上一次保存的数据替换掉,不信吗?那你尝试下把RESET打开,INPUT1输入0,不出意外你会得到以下表格:

     

             PS:要是问最后两个结果为什么和之前不一样,请认真看看上面的文字

            总结下:之所以叫锁存器,是因为它将1个值锁住保持不变,输入该值的操作被称为写入,输出该值的操作被称为读取

    三.门控锁存器

            只要了解了前面的AND-OR锁存器,门控锁存器其实很容易理解,因为使用INPUT1和RESET这两个端口来储存数据一般人很难理解,所以在AND-OR锁存器基础上加多一个门锁电路,来控制数据是否允许被写入,这就叫做门控锁存器。电路图如下:

            这个电路看起来似乎很复杂,其实你只要知道,只有当“允许写入线”打开时(输入为1),才允许电路放入需要保存的数据,而当“允许写入线”关闭时(输入为0),数据输入线输入啥都不会被储存(原理)

    四.寄存器

            以上的锁存器只能保存一位数据,但用一排锁存器组成的电路就叫寄存器。多少位的寄存器就有多少个锁存器,比如以下有个八位的寄存器:

            (这里借用B站宝藏课程:计算机速成课Crash Course Computer Science 的图片) 

            这八个寄存器用一个线来连接所有的“允许写入线”,当需要写入一个八位数据时,先接通“允许写入线”,紧接着就可以在“数据输入线”里把所要保存的数字传输进去。现今计算机中有很多名称的寄存器(PC计数寄存器、地址寄存器等等),但其实本质只是一个可以存N位数据的锁存器而已,至于怎么用就是人为定义的了。

             当然,采用以上并排连接的方式在少位数的寄存器中或许可行,但在一些多位数的寄存器里就是耗费巨多线路的事情了(比如256bit寄存器,需要513根线),解决的办法就是矩阵

             (继续借用B站宝藏课程:计算机速成课Crash Course Computer Science 的图片)

             将并排放置的寄存器改为网格,对于256位寄存器,我们将其放置为16x16的网格,如果启用某个寄存器,仅需要打开对应行和列的线:

             真方便!

  • 相关阅读:
    4种 MySQL 同步 ES 方案
    Linux:命令行参数和环境变量
    Linux查询mac物理地址
    AOSP 编译真机镜像与AVD镜像
    C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例
    $route和$router的区别详解
    小游戏外包开发流程及费用
    在Ubuntu上搭建幻兽帕鲁服务器
    ubuntu下docker环境使用GPU配置
    QT的QStringList的使用
  • 原文地址:https://blog.csdn.net/qq_41884002/article/details/125982660