做一个最简单的CPU -- 计算机组成原理(六)

news2024/11/13 0:59:51

在上一个章节中,我们已经了解了一个存储是如何制作出来的,利用这个存储我们就可以做一个最简单的CPU

指令

我们知道CPU负责执行计算机的程序,而程序其实是一个个的操作指令

比如可能是计算指令,cpu会指示ALU进行加减运算

也可能是存储指令,cpu进行内存数据的读写

我们这里给出一个指令表,给cpu支持的所有指令进行一个编号,假设指令都是8bit的数据

前4位为操作码,后4位为地址或者特定寄存器

我们就根据一个程序的执行来组合一个CPU

cpu组合

首先我们需要一个内存,直接使用用上一个章节的RAM

然后我们需要四个寄存器,用来临时存储运算过程中的数据

我们还需要两个寄存器来完成CPU

1.  一个寄存器来追踪程序运行到哪里了,我们叫它“指令地址寄存器(Instruction Address Register)”,  用来存储当前的指令地址

2. 另一个寄存器来存储当前的指令,就叫“指令寄存器(Instrctuion Register)”

当程序开始的时候所有存储的数据都是0000, 这里接给出了所有需要的存储的内容

我们使用上面假设的指令表,在RAM里面放了一个程序,我们跟着这个程序画出CPU的其他部分

CPU运行

取指令阶段(Fetch Phase)

cpu运行的第一个阶段叫取指令阶段,  首先指令地址寄存器链接到RAM, 由于指令地址寄存器数据是0, 就从RAM中读取地址为0的数据进入指令寄存器

解码阶段(Decode Phase)

现在指令拿到了,需要知道是什么指令,才能运行它,这就是阶段阶段

可以看到第一个指令是 0010 1110

前四位 0010 就是LOAD_A 指令

意思就是把 后四位的地址的值放置到寄存器A内, 后四位 1110转成10进制是14,也就是RAM地址14的数据, 我们可以看到RAM地址14的数据是 0000 0011, 也就是把0000 0011 放入寄存器A,这个数据十进制是3,也就是寄存器A此时保存的数据为3

这里就需要一个“控制单元” 来识别这个LOAD_A的指令, 将它转化成对应的操作

我们用一个简单的逻辑门来判断指令是不是 0010(LOAD_A), 如果这个输出为1的话代表执行LOAD_A的操作, 将这个“控制单元”放入整体的cpu中进行特定的链接就是执行的操作

执行阶段(Execute Phase)

经过控制电路后,我们需要读取RAM地址14的数据到寄存器A,所以需要打开RAM的允许读取线以及寄存器A的允许写入线, 并且将寄存器A和RAM的数据线进行连接

这样就完成了一个CPU的指令循环,完成指令后,就关闭所有的线路,将所有的允许写入和读取都关闭,即完成了存储

最后将指令地址寄存器+1,执行阶段就此结束

LOAD_A 只是其中一种指令,控制单元需要识别各种执行,将其转化成各种指令操作,我们可以再进行一层的抽象,将控制单元抽象成一个块,这样就简洁一些

循环

由于指令地址+1, 我们进入了下一个循环, 重新进行读取阶段

将RAM地址1的数据读到指令寄存器中

可以看到 0001 1111, 前4位对应操作为LOAD_B,后四位代表的地址为15

即将RAM地址15的数据 0000 1110 读到寄存器B, 也就是寄存器B此时保存的数据是十进制的14

此时指令地址寄存器再次+1, 完成第二个循环

第三个循环后,将RAM地址2读入地址寄存器,可以看到具体指令为 1000 0100

代表加法指令,后面跟的就是不RAM地址,而是两个寄存器地址,01代表寄存器B,00代表寄存器A, 意思是将寄存器B的数据加到寄存器A, 保存在寄存器A的意思。

为了执行加法操作,需要使用到上一章的ALU进行加法操作

 

控制单元需要将加法操作给到ALU,并将寄存器A/B的数据输入到ALU,此时计算结果不能直接存储到寄存器A,否则就会不断进行加法操作, 控制单元需要用自己的寄存器保存计算结果,关闭ALU之后,再将数据写到寄存器A

这里进行加法操作3+14 =17, 也就是寄存器A此时保存数据为17,也即是 0001 0001, 最后指令地址寄存器+1, 循环完成

此时开始最后一个循环,RAM地址为3的数据读入0100 1101,根据前4位得到指令

意思是把寄存器A的数据保存到,后四位的RAM地址 1101(十进制15)中

指令地址寄存器再+1,读入RAM地址4的数据为 0000 0000, 程序停止

可以看到我们用4个执行,计算了一个3+14=17,并将结果存储到RAM地址15

可以看到CPU就是在不断循环进行  读取,解码,执行的操作, 那是什么来管理cpu的节奏呢?

答案是时钟

时钟以一个精确的间隔触发电信号,而控制单元根据电信号触发不同的操作,来让cpu不断运行

cpu完成一次 取指令->解码->执行的循环叫做时钟速度

这样一个最简单的CPU就完成了

上一章:

寄存器和内存 - 计算机组成原理(五)

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

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

相关文章

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、👨‍🎓网站题目 旅游,当地特色,历史文化,特色小吃等网站的设计与制作。 二、✍️网站描述 👨‍🎓静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计👩‍🎓…

Leetcode面试经典-115.不同的子序列

解法都在代码里&#xff0c;不懂就留言或者私信 理论上提交这个就是最优解 class Solution {public int numDistinct(String s, String t) {if(s.length() < t.length()) {return 0;}if(s.length() t.length()) {return s.equals(t)? 1 : 0;}char[] sArr s.toCharArray…

【大模型基础】P2 Bag-of-Words 词袋模型

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…

(计算机论文)基于C#、Unity的先行者技能熟练度游戏系统的设计与实现

毕业设计&#xff08;论文&#xff09; ​​​​​ ​博主可接毕设论文&#xff01;&#xff01;&#xff01; 论文题目&#xff1a;基于C#、Unity的先行者技能熟练度游戏系统的设计与实现 摘 要 随着数字娱乐产业的蓬勃发展&#xff0c;独立游戏因其创新性和独特…

5.【Java开发手册】| 异常日志

这里我就列出一些我认为应当遵守的&#xff0c;并且添加一些我自己在工作中的一些感受&#xff0c;如果照着文档抄&#xff0c;那完全变成练习打字了&#xff0c;浪费读者时间&#xff0c;如果你也认同我的看法&#xff0c;或者和我有类似感受&#xff0c;可以点个关注&#xf…

【Java 优选算法】双指针(上)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 移动零 分析 代码 复写零 分析 代码 快乐数 分析 代码 盛最多水的容器 分析 代码 移动零 题目链接 分析 双指针算法,利用两个指针cur和dest将数组划分为三个区间…

Java题集综合实践——简易计算器制作

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1&#xff0c;请看&#xff01; 本篇文章将带大家编写一个简易算术计算器。 功能&#xff1a;将几个算术功…

VBA经典应用69例应用6:格式化代码中的双引号(””)和井号(#)

《VBA经典应用69例》&#xff08;版权10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开&#xff0c;这套教程案例众多&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以便…

使用java做一个微信机器人

如何使用Java开发微信机器人 在当今社交网络盛行的时代&#xff0c;微信已成为人们生活中不可或缺的工具。为了更好地服务用户&#xff0c;许多企业和个人开始利用微信机器人来自动化回复消息、发布信息等操作。本文将介绍如何使用Java开发一个简单的微信机器人&#xff0c;并…

html基础语法 看这一篇就够了!

HTML 一 概念 html:html 文件根标签 head:编写页面相关的属性 title:页面标题 body:页面内容展示信息 二 DOM 树&#xff1a; 所有的标签都是 html 的子标签 head 和 body 是兄弟标签&#xff0c;同一级别 head 和 title 为父子标签 1.第一个程序 <html><head>…

音视频入门基础:WAV专题(9)——FFmpeg源码中计算WAV音频文件每个packet的duration和duration_time的实现

一、引言 从文章《音视频入门基础&#xff1a;WAV专题&#xff08;6&#xff09;——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道&#xff0c;通过FFprobe命令可以显示WAV音频文件每个packet&#xff08;也称为数据包或多媒体包&#xff09;的信息&#xff0…

苹果电脑可以玩《原神》吗?原神可以在Mac上玩吗?苹果电脑玩原神怎么样

《原神》是一款由米哈游开发的开放世界冒险游戏&#xff0c;自从2020年正式上线以来&#xff0c;就受到了全球玩家的热烈欢迎。《原神》的画面精美&#xff0c;音乐动听&#xff0c;剧情丰富&#xff0c;角色多样&#xff0c;玩法多变&#xff0c;让人沉浸在一个充满奇幻和魅力…

【Python 学习】Pandas基础与应用(1)

题目 1 Pandas 简介1.1 主要特征1.2 Pandas 安装 2 Pandas中的数据结构2.1 Series 数据结构和操作2.1.1 Series的数据结构2.1.2 Seres的操作 2.2 DataFrame 数据结构和操作2.2.1 DataFrame 数据结构2.2.2 Dataframe 操作2.2.3 DateFrame 的特殊操作 2.3 Series 和 DataFrame 的…

LRU go cache的实现

目录 LRU算法LRU原理LRU实现Redis LRU算法实现1. 内存淘汰策略2. LRU算法的实现3. LRU vs LFURedis中的LRU使用场景 基于LRU的缓存库go-cache安装使用代码解析 hashicorp/golang-lru安装使用代码解析 groupcache安装使用代码解析缓存淘汰算法并发缓存组一致性哈希防止缓存击穿—…

从电商行业的变化引出未来技术趋势

时间&#xff1a;2024年09月08日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;喜马拉雅 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋推荐一下&#xff0c;小蒋希望遇到一个认真…

无人机人工增雨技术详解

无人机&#xff0c;全称为无人驾驶飞行器&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;&#xff0c;是一种不需要人员直接操控&#xff0c;而是利用先进的遥控技术、自主飞行控制系统和传感器技术来实现空中飞行和完成特定任务的飞行器。 一、技术原理 无人机人工增雨…

轻NAS系统CasaOS设备安装Memos笔记结合内网穿透公网访问与同步教程

文章目录 前言1. 使用Docker部署memos2. 注册账号与简单操作演示3. 安装cpolar内网穿透4. 创建公网地址5. 创建固定公网地址 前言 本文主要介绍如何在安装了轻NAS系统CasaOS设备中使用Docker本地部署开源云笔记服务memos&#xff0c;并结合cpolar内网穿透工具配置公网地址&…

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目&#xff0c;目的就一个&#xff0c;方法千千万&#xff0c;通向终点的方式有很多种&#xff0c;没有谁与谁&#xff0c;我们都是为了成为更好的自己。…

VMware Fusion 虚拟机Mac版 安装CentOS系统教程

Mac分享吧 文章目录 CentOS安装完成&#xff0c;软件打开效果一、Mac中使用虚拟机安装CentOS系统1️⃣&#xff1a;下载镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;设置虚拟机4️⃣&#xff1a;安装虚拟机5️⃣&#xff1a;设置成从磁盘启动 安装完成&#xff01;&…

哈希表如何避免冲突

系列文章&#xff1a; 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 3. 哈希表如何避免冲突 目录 1.概念 2. 冲突-概念 3. 冲突-避免 3.1 冲突-避免-哈希函数设计 3.2 冲突-避免-负载因子调节 4. 冲突-解决 4.1 冲突-解决-闭散列 4.1.1 线性探…