从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

    • 网课-计算机组成原理(北大-陆俊林)

      • 概述-计算机组成原理(北大-陆俊林)
      • 第1周-计算机组成章节视频简介
      • 101-电子计算机的兴起
      • 102-冯·诺依曼结构的要点
      • 103-冯·诺依曼结构的小故事
      • 104-计算机结构的简化模型
      • 105-计算机执行指令的过程
      • 106-计算机输入和输出
      • 107-冯诺依曼结构和具体实现
      • 201-设计自己的计算机
      • 202-x86 体系结构
      • 203-x86 指令简介
      • 204-复杂的 x86 指令举例
      • 205-MIPS 体系结构
      • 206-MIPS 指令简介
      • 301-算术运算和逻辑运算
      • 302-门电路的基本原理
      • 303-寄存器的基本原理
      • 304-逻辑运算的实现
      • 305-加法和减法的实现
      • 306-加法器的优化
      • 401-乘法的运算过程
      • 402-乘法器的实现
      • 403-乘法器的优化 1
      • 404-乘法器的优化 2
      • 405-除法的运算过程
      • 406-除法器的实现
      • 407-除法器的优化
      • 501-处理器的设计步骤
      • 502-数据通路的建立
      • 503-运算指令的控制信号
      • 504-访存指令的控制信号
      • 505-分支指令的控制信号
      • 506-控制信号的集成
      • 601-流水线的基本原理
      • 602-流水线的优化
      • 603-超标量流水线
      • 604-流水线的冒险
      • 605-数据冒险的处理
      • 606-控制冒险的处理
      • 701-存储层次结构概况
      • 702-DRAM 和 SRAM
      • 703-主存的工作原理
      • 704-主存技术的发展
      • 705-高速缓存的工作原理
      • 706-高速缓存的组织结构
      • 707-存储容量的计算
      • 801-中断和异常的来源
      • 802-中断向量表的结构
      • 803-中断向量表的发展
      • 804-中断的处理过程
      • 805-内部中断分类说明
      • 806-基于中断的功能调用
      • 901-输入输出接口的基本功能
      • 902-输入输出接口的编址方式
      • 903-输入输出的控制方式
      • 904-中断控制方式
      • 905-外部中断的处理过程
      • 906-直接存储器访问方式
  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • 数据库

  • 计算机基础
  • 计算机组成原理
  • 网课-计算机组成原理(北大-陆俊林)
2023-06-13

303-寄存器的基本原理

# 303-寄存器的基本原理

CPU 中有很多的寄存器,有临时保存数据的通用寄存器,也有专门保存指令编码或者指令地址的寄存器,它们都有存储信息的能力,那在这一节,我们就来分析这些寄存器是如何实现的。

‍‍

在 CPU 当中用来存放信息的非常重要的部件就是通用寄存器, 比如说零号通用寄存器,在 mips 的体系结构中,它就是一个 32 位的寄存器, 从电路实现上来说这 32 个比特都是同样的。 我们来看其中一个,它就可以用这样一个结构来实现。 这个结构就是我们将要介绍的 D 触发器。

​

‍

‍

触发器是具有存储信息能力的基本单元, 它有很多种类型,d 触发器是其中一种。 其实触发器也没有那么神秘,它也是由与或非这样的逻辑门构成的, 仅就 D 触发器而言,以后有很多的实现方式, 在这里我们就不深入到它的内部实现细节,而重点关注它对外提供的功能。 这个 D 触发器主要有这三个接孔,一个数据输入, 一个数据输出和一个时钟输入。 它的功能表现是这样的,在时钟 clock 的 在时钟 clock 的上升沿,也就是 clock 从低电平变为高电平, 也可以说是从 0 变到 1 的时候,这是一个很短的时间, 在这时 D 触发器会采样输入端口 D 的值, 经过一段很短的时间会将这个值传送到输出端口 Q, 在其它的时候也就是不在时钟信号的上升沿的时候, 无论输入端口 D 如何变化,其输出端口 Q 的值都是保持不变的。

​

‍

‍

当然这样说起来还是很抽象,我们通过一个形象化的描述来做进一步的说明。 就好比我们平常使用的照相机,我们把镜头 比作 d 触发器的输入端 D,拍照的快门比作时钟端 clock, 这台相机内部带有无线传输的模块,可以将其拍摄的照片传送到一个显示器上,这个显示器 就好比 D 触发器的输出端 Q,那这样我们就把 D 触发器比作这个照相机和这个显示器。 当按下照相机的快门后,照相机会拍一张照片, 过一秒钟后显示器上显示出这张照片, 对于 D 触发器来说,这就叫做 clock to Q 的时间, 也就是从时钟的上升沿到来开始直到数据出现在输出端为止, 这个时间是属于 D 触发器自身的特性,那对于这个 D 触发器所在的整个芯片还有一个 重要的特性就是时钟频率,在这里就好比我们约定 每十秒钟会来按一次快门,那这个系统的时钟频率 就是零点一赫兹。 最后我们再给这一套由相机和显示器构成的 D 触发器加上一个输入也就是另一台显示器, 这样就会拍摄左边这台显示器上的画面, 并将它显示在右边这台显示器上。那好,现在我们就假设十秒钟到了, 我们会按动一次快门, 按动快门后照相机会拍摄下左边这台显示器上的画面, 并在一秒钟后将拍摄的照片传送到右边这台显示器上,这个过程就体现了在 时钟的上升沿 D 触发器采用输入端的信号,并在时钟上升沿之后 clock to Q 的时间 将采样的信号从输出端口送出来,那之后输入端 也就是左边这台显示器上的画面可能会发生变化, 但是只要不按动快门,右边显示器上的内容是不会发生变化的。 也就是在下一个时钟上升沿来临之前无论输入怎么变化,输出都不会发生变化。

​

‍

现在假设十秒钟又到了,我们要按动一次快门, 需要注意的是就和现实中的照相一样, 在按动快门的前后很短的时间内通过镜头看到的画面不应该发生变动, 否则就可能造成拍出的照片是模糊的。 对于 D 触发器来说,在时钟上升沿前后很短的时间内,输入端的 信号也不能发生变化,否则就可能造成无法正确的采样。 那么这也是 D 触发器的一个重要的特性,要求输入信号在时钟上升沿之前有一段很短的稳- 定时间, 很短的稳定时间,称为 set up 时间,在时钟上升沿之后也需要有一段很短的稳定时间,称为 hold 时间。

我们假设在这一次按动快门时左边显示器上的画面是稳定的, 现在我们来按动快门,再过一秒钟, 这次采样的信号就被送到了输出端。 这就是一个 D 触发器简单的工作原理。

‍

‍

我们再来看一看两个 D 触发器相连的情况, 左边这个 a 相机就是第一个触发器, 它的输出连到了右边这个 b 相机的输入, 我们还是用同样的约定,每隔十秒钟来按动一次快门, 那当十秒钟到了的时候,这两台相机的快门会被同时按动,一秒钟后, 它们的输出画面都发生了改变

​

‍

但我们要注意的是 a 相机拍摄下来的这个绿叶 是经过了 clock to Q 时间才传送到了它的输出,而在此之前 b 相机 已经拍摄到了 a 相机此前的输出,也就是现在显示在最右边的显示器上的这个红色的叶子。 所以我们要注意的是这两个相连的相机虽然是同时按动了快门,但并不意味着最左边的画面 最左边的画面会一直传递到最右边的显示器上,而是将左边的相机之前存储的画面依次向右传递, 那么在一个复杂的系统中是有有很多的 D 触发器用各种不同的方式相连, 这样就可以在不同的触发器中存放不同的信息, 并且可以在时钟的控制下进行传递,而同样在时钟上升沿没有到来的时候, 无论输入发生什么样的变化都不会影响到后面触发器的输出。

‍

‍

‍

‍

通过这个例子,我们应该对 D 触发器的行为有了更加深入的了解。 我们再来看这些解释的时候应该不会觉得那么的陌生。 我把刚才说的这个过程用一个时序图的方式表达出来。 第一行是时钟信号,它是有规律的进行变化, 两个上升沿之间的间隔时间就称为时钟周期, 输入信号 D 则可能在任何时候发生变化, 比如在这个时候它由 0 变到了 1, 但是因为时钟上升沿没有到来,所以输出端 Q 并没有发生变化,直到时钟上升沿到来的时候, D 触发器会采样输入端的信号, 并经过很短的 clock to Q 的时间在输出端体现出来, 因为这时候输入端是 1,所以输出端也变成了 1,

​

然后时间再继续,在这个时钟周期内,输入 D 又发生了变化,由 1 变成了 0, 但是同样输出端 Q 没有发生变化, 直到下一个时钟上升沿到来,采样到了新的输入端的指令, 再经过 Clock to Q 输出端也变成了 0 这就是一个 D 触发器的基本工作行为。

​

‍

那我们如果把很多个 D 触发器组合起来,比如就是这 32 个 D 触发器, 那就可以构成一个 32 位的寄存器,当然这只是一个很简单的原理性实现。 用这样一个 32 位的寄存器就可以做成 CPU 当中的一个通用寄存器, 用同样的方法可以作出其它的通用寄存器以及 PC,IR 这样的寄存器,再将这些寄存器于其它的由逻辑门构成的电路相连, 就构成了我们这个复杂的 CPU 了。

​

‍

现在我们对寄存器的工作原理有了一个基本的了解, 我们也对寄存电路是如何运行的有一点点非常浅显的认识, 如果你还想了解更多就需要去学习其他的专门课程了。

上次更新: 2024/9/29 12:08:10
302-门电路的基本原理
304-逻辑运算的实现

← 302-门电路的基本原理 304-逻辑运算的实现→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式