建立数据通路(三)

news2024/11/14 17:45:59
PC寄存器
背景
  • 有了时钟信号,可以提供定时输入。有了D型触发器,可以在时钟信号控制的时间点写入数据
  • 把这两个功能组合起来,就可以实现一个自动计数器
程序计数器
  • 在这里插入图片描述

  • 加法器的两个输入,一个始终设置成1,另外一个来自于一个D型触发器A

  • 把加法器的输出结果,写到这个D型触发器A里面。于是,D型触发器里面的数据就会固定的时钟信号为1的时候更新一次

  • 这样,就有了一个每过一个时钟周期,就能固定自增1的自动计数器

  • 这个自动计数器,可以拿来当PC寄存器,事实上,PC寄存器的这个PC,英文就是Program Counter,也就是程序计数器的意思

作用
  • 每次自增之后,可以去对应的D型触发器里面取值,也是下一条需要运行指令的地址
  • 同一个程序的指令应该要顺序存放在内存里面。顺序存放指令,就是为让我们通过程序计数器就能定时不断执行新指令
单指令周期处理器(Single Cycle Processor)
  • 加法计数,内存取值,乃至后面的命令执行,最终其实都是由一开始讲的时钟信号,来控制执行时间点和先后顺序,也是需要时序电路最核心的原因
  • 在最简单的情况下,需要让每一条指令,从程序计数、到获取指令、执行指令,都在一个时钟周期内完成
  • 如果PC寄存器自增太快,程序就会出错
    • 因为前一次的运算结果还没有写回对应的寄存器里面的时候,后面一条指令已经开始读取里面的数据来做下一次计算了
    • 这个时候,如果我们的指令使用同样的寄存器,前一条指令的计算就会没有效果,计算结果就错了
  • 在这种设计下,需要在一个时钟周期里,确保执行完一条最复杂的CPU指令,也就是耗时最长的一条CPU指令
    • 这种的CPU设计,称之为单指令周期处理器(Single Cycle Processor)
  • 缺点
    • 很显然,这样的设计有点儿浪费
    • 因为即便只调用一条非常简单的指令,也需要等待整个时钟周期的时间走完,才能执行下一条指令
2 - 1 选择器(译码器)
背景
  • 数据能够存储在D型触发器里,如果把很多D型触发器放在一起,就可以形成一块很大的存储空间,甚至可以当成一块内存来用
  • 那我们怎么才能知道,写入和读取的数据,是在这么大的内存的哪个几个比特?
  • 这个需要一个电路,来完成"寻址"的工
电路构成
  • 在这里插入图片描述

  • 通过一个反向器、两个与门和一个或门,就可以实现2-1选择器

  • 通过控制反相器的输入是0还是1,能够给决定对应的输出信号,是和地址A,还是地址B的输入信号一致

  • 一个反向器只能有0和1这样两个状态,所以只能从两个地址中选择一个

    • 如果输入的信号有三个不同的开关,就能从 2 ^ 3,也就是8个地址中选择一个,这样的电路,叫3 - 8译码器
    • 如果CPU是64位,就意味着寻址空间也是2 ^ 64,那么就需要一个有64个开关的译码器
作用
  • 在这里插入图片描述

  • 其实,译码器的本质,就是从输入的多个位的信号中,根据一定的开关和电路组合,选择出自己想要的信号

  • 除了能够进行“寻址”之外,还可以把对应的需要运行的指令码

  • 同样通过译码器,找出我们期望执行的指令,也就是在之前讲到过的opcode,以及后面对应的操作数或者寄存器地址,只是,这样的“译码器”,比如2-1选择器和3-8译码器,要复杂得多

建立数据通路,构造一个最简单的CPU
图例
  • 在这里插入图片描述
实现
  • 首先,有一个自动计数器
    • 这个自动计数器会随着时钟主频不断自增,来作为我们的PC寄存器
  • 在这个自动计数器的后面,连着一个译码器
    • 译码器,还要同时连着大量的D触发器组成的内存
  • 自动计数器会随着时钟主频不断自增,从译码器中,找到对应的计数器所表示的内存地址,然后读取出里面的CPU指令
  • 读取出来的CPU指令会通过我们的CPU时钟的控制,写入到一个由D型触发器组成的寄存器,也就是指令寄存器当中
  • 在指令寄存器后面,可以再跟一个译码器
    • 这个译码器不再是用来寻址的了,而是把我们拿到的指令,解析成opcode和对应的操作数
  • 当我们拿到对应的opcode和操作数,对应的输出线路就要连接ALU,开始进行各种算术和逻辑运算
    • 对应的计算结果,则会再写回到D触发器组成的寄存器或者内存当中
条件寄存器
  • 讲计算机的指令执行的时候,高级语言中的 if…else,其实是变成了一条 cmp 指令和一条 jmp 指令
  • cmp 指令是在进行对应的比较,比较的结果会更新到条件码寄存器当中
  • jmp 指令则是根据条件码寄存器当中的标志位,来决定是否进行跳转以及跳转到什么地址
  • 为什么if…else 会变成这样两条指令,而不是设计成一个复杂的电路,变成一条指令?
    • 两个指令实现,完全匹配好了我们在电路层面,“译码 - 执行 - 更新寄存器“这样的步骤
    • cmp 指令的执行结果放到了条件码寄存器里面,我们的条件跳转指令也是在 ALU 层面执行的,而不是在控制器里面执行的
    • 这样的实现方式在电路层面非常直观,我们不需要一个非常复杂的电路,就能实现 if…else 的功能
单指令周期处理器的优化
背景
  • 在上面的抽象的逻辑模型中,你很容易发现,我们执行一条指令,其实可以不放在一个时钟周期里面,可以直接拆分到多个时钟周期
  • 因为从内存里面读取指令时间很长,所以如果使用单指令周期处理器,就意味着我们的指令都要去等待一些慢速的操作
  • 这些不同指令执行速度的差异,也正是计算机指令有指令周期、CPU 周期和时钟周期之分的原因
案例
  • 可以在一个时钟周期里面,去自增 PC 寄存器的值,也就是指令对应的内存地址
  • 然后,我们要根据这个地址从 D 触发器里面读取指令,这个还是可以在刚才那个时钟周期内
  • 但是对应的指令写入到指令寄存器,我们可以放在一个新的时钟周期里面
  • 指令译码给到 ALU 之后的计算结果,要写回到寄存器,又可以放到另一个新的时钟周期
  • 所以,执行一条计算机指令,其实可以拆分到很多个时钟周期,而不是必须使用单指令周期处理器的设计
  • 因此,现代我们优化 CPU 的性能时,用的 CPU 都不是单指令周期处理器,而是通过流水线、分支预测等技术,来实现在一个周期里同时执行多个指令
问题
  • CPU在执行无条件跳转的时候,不需要通过运算器以及ALU,可以直接在控制器里面完成,你能说说这是为什么吗?
    • 无条件跳转意味着没有计算的逻辑,应该是可以不经过ALU的,但是要控制器把PC设置成跳转后的指令地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Qt Creator 使用Qt Quick的Design模式设置

关于使用Qt Quick的Design模式设置: 如描述所言: 如果使用Design模式打开qml文件失败显示如下: 首先确认自己是否安装了Qt Design Studio 如果安装了仍然不显示,则需要勾选下面三个地方才能用Design模式打开.ui.qml文件&#…

Hologres+Flink企业级实时数仓核心能力介绍

讲师:骆撷冬 Hologres PD 随着业务发展,业务对于时效性的要求在逐渐提升。各种场景都需要实时,例如春晚实时直播大屏、双11 GMV实时大屏、实时个性化推荐等等多种场景,都对数据的时效性有着非常高的要求。随着实时需求的发展&…

【技术追踪】使用去噪扩散型进行 3D 血管图生成(MICCAI-2024)

graphs 图也可以用 diffusion 耶~ 本文提出了第一个去噪扩散模型在 3D 血管图生成中的工作,其是新颖的两阶段生成方法,依次对节点坐标和边进行去噪,在生成多样化、新颖且解剖学上合理的血管图方面性能表现出色。 论文:3D Vessel G…

pg-存储过程

1.概念和优势 2.代码块结构 do end之间俩个$$ declare用来声明定义变量,begin用来运行赋值 notice输出 3.变量使用

java语法(分支,方法,递归);Debug使用

java语法 x 操作符 ->分支&#xff0c;循环&#xff0c;方法 分支 条件的三种if if if…else… public class IfDemo01 { public static void main(String[] args) { int a 3; final int DAY 3; if(a<DAY){ }else if (a<…

c语言中的字符串函数

strstr函数 函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。 我们来看这个函数的参数名字&#xff1a;haysytack&#xff08;干草堆&#xff09;needle&#xff08;针&#xff09;,这个其实就是外国的一句谚语&#xff1a;在干草堆中找一根针&#xff0c;就…

关于机械键盘的购买,该怎么选择?

一.关于轴体的选择。 1.青轴&#xff1a;青轴是机械键盘最有段落感的轴&#xff0c;声音比较大&#xff0c;以吵死人别人著称。有人将其比喻为Cherry的春天&#xff0c;爽快清脆的段落感如春天般舒畅。适合在宿舍、咖啡厅&#xff0c;图书馆使用。&#xff08;我装的 &#xf…

链表的回文结构(链表的中间节点+反转链表)

链表的回文结构 一.链表的中间节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 二.返回倒数第k个节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 三.反转链表思路1&#xff1a;头插法思路2&#xff1a;反转指针的指向 四.链表的回文结构思路1&#xff1a;利…

阿里云搭建vps服务器的过程

最近突发奇想想要搭建一个阿里云的的vps服务器&#xff0c;下面是搭建的过程&#xff1a; 首先&#xff0c;登录阿里云网站&#xff1a; 搜索&#xff0c;esc控制台&#xff1a; 点击创建实例&#xff1a; 选择地区&#xff1a; 选择实例规格&#xff1a; 选择镜像&#x…

【论文速读】| JADE:用于大语言模型的基于语言学的安全评估平台

本次分享论文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者单位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 关键…

Vue3学习体验(一)

搭建工程 使用vue-cli脚手架创建vue3工程 vue create vue3-app-vue-cliVue-cli官网&#xff1a;https://cli.vuejs.org/zh/guide/installation.html 使用vite搭建vue3工程 npm init表示临时的下载vite应用来创建vue3工程&#xff0c;工程名称为vue3-app-vite npm init vit…

Vue3 markRaw的使用

markRaw 作用:将一个对象标记为不可以被转化为代理对象。返回该对象本身。 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能 3.在动态渲染组件的时候我们就可以使用 markRaw 包裹。markRaw 的…

Redis 7.x 系列【23】哨兵模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 工作原理2.1 监控2.2 标记下线2.3 哨兵领袖2.4 新的主节点2.5 通知更新 3. …

jvm 07 GC算法,内存池

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数&#xff0c;每多一个其他对象引用&#xff0c;计数1&#xff0c; 当引用失效时&#xff0c;计数-1&#xff0c;如果计数0&#xff0c;表示没有其他对象引用&#xff0c;…

【YOLO系列】快速部署YOLOv5(Windows)

引言 在计算机视觉领域&#xff0c;目标检测是至关重要的任务之一&#xff0c;它涉及识别图像或视频中的对象&#xff0c;并将其分类和定位。近年来&#xff0c;**YOLO&#xff08;You Only Look Once&#xff09;**算法因其速度与精度的平衡而变得非常流行。在这篇博文中&…

【触摸屏】【红十字会学习系统】功能模块:视频 + AI拍照合成

项目背景 提升公众急救能力&#xff1a;确保每个人都能在紧急情况下采取正确的急救措施&#xff0c;减少伤害&#xff0c;挽救生命。培养人道主义价值观&#xff1a;通过教育和培训&#xff0c;传播红十字精神&#xff0c;促进社会对弱势群体的关注与支持。建立社区响应网络&a…

怎么减少pdf格式的内存,怎么减少pdf文件大小

在数字化时代&#xff0c;pdf文件因其格式稳定、兼容性强等特点&#xff0c;成为工作与学习中的常用文档格式。然而&#xff0c;较大的pdf文件往往给存储和传输带来不便。本文将为你详细介绍如何巧妙减小pdf文件内存&#xff0c;助你轻松解决文件传输和存储的烦恼。 让我们来看…

Arduino PID整定

Arduino PID整定 Tuning an Arduino PID Introduction to Tuning an Arduino PID 例如&#xff0c;我们可能想把一箱水加热到华氏 100 度。 我们需要能够在不同的条件下实现这一目标&#xff0c;例如房间的环境&#xff08;周围&#xff09;温度。 此外&#xff0c;我们可能会…

CoreIDRAW标注尺寸箭头怎么修改 CoreIDRAW标注尺寸数字怎么修改

*CorelDraw&#xff1a;数字创意的无限可能** 在数字艺术与设计领域&#xff0c;CorelDraw无疑是一款备受推崇的图形设计软件。它不仅为设计师、艺术家和创意工作者提供了强大的工具集&#xff0c;还以其直观易用的界面和卓越的性能赢得了广泛的赞誉。本文将深入探讨CorelDraw…

【Playwright+Python】系列之元素定位

一、常见元素定位 定位器是 Playwright 自动等待和重试能力的核心部分。简而言之&#xff0c;定位器代表了一种随时在页面上查找元素的方法&#xff0c;以下是常用的内置定位器。 1、按角色定位 按显式和隐式可访问性属性进行定位语法&#xff1a;page.get_by_role&#xff0…