带你从零开始设计一个简单CPU
文章目录
- 前言
- 一 CPU的基本组成
- 二 CPU的基石
- 三 ALU(运算器)
- 1.二进制
- (1)二进制在计算机中
- (2)为什么是二进制
- 2.布尔代数 & 逻辑门
- (1)什么是布尔代数
- (2)基本逻辑门
- 四 寄存器
- 1.锁存器
- 2.矩阵
- 五 时钟
- 最后
前言
这篇文章的目的是以最简单的方法讲解CPU的结构,
带你感受关于CPU的智慧和魅力。
大部分图片来自Crash老师的计算机科学速成课。
一 CPU的基本组成
CPU即中央处理器(central processing unit)是计算机系统的运算和控制核心
让我们来看看它的主要组成结构吧。
ALU(算术逻辑单元): 是能够进行算术运算和逻辑运算的组合逻辑电路。
寄存器(随机存取存储器):也叫主存,是与CPU直接交换数据的内部存储器。
控制器:把内存上的指令、数据等读入寄存器。
时钟:负责管理CPU的节奏(频率)。
二 CPU的基石
大家应该都知道晶体管是CPU的基石,但你知道么?其实晶体管还有两位“老前辈”,继电器和热电子管曾经发挥着它的作用。
1.继电器
让我们把继电器简化一下。
控制电路上有一个线圈,当我们给它通电时线圈会产生吸力,将机械继电器关上。从而实现了 关/开 这两种状态。这两种状态就可以和二进制联系起来从而表示数据了。(关于为什么能表示数据后面二进制会讲)
但是继电器不断的动就一定会产生磨损,需要经常更换。
于是科学家们发明了不需要动的热电子管。
2.热电子管:它是一个真空管。
我们把它也简化一下
真空管中含有两个电极,一个电极会发热射出电子,另一个带正电的电极会吸引电子从而形成电流。中间设置了一个控制电路来开关。
热电子管是不需要动了,但是它就像灯泡一样,一直发热肯定会烧坏。
而且非常容易碎,于是晶体管就出场了。
3.晶体管
简化一下它的结构。
半导体指常温下导电性能介于导体与绝缘体之间的材料,通过门电路我们就可以控制它的导电性,而且半导体的能耗低,导电性转换的很快,因此一直使用到现在。
下面我们会讲计算机的算数大脑(ALU),关于为什么 关/开 能代表数据,也会在下面的部分讲解。
三 ALU(运算器)
1.二进制
(1)二进制在计算机中
上面的部分我们已经提到了,晶体管可以有开关两种状态,这时我们就可以将开对应1,关对应0 。正好可以利用我们学过的二进制。
电路合上,有电流,代表‘真’
电路打开,无电流,代表‘假’
(2)为什么是二进制
第一点:只有两种状态,便于区分信号,不容易受外界干扰。
第二点:当时数学上二进制已经能够完成所以的计算。
2.布尔代数 & 逻辑门
(1)什么是布尔代数
常规代数中,变量是数字,利用数字进行‘+’ ‘-’
布尔代数中,变量是true和false,利用这两个进行逻辑操作
(2)基本逻辑门
AND门 | NOT门 | OR门 | XOR |
---|---|---|---|
两个true才是true | 输出相反 | 一个true即为true | 一真一假才能输出true |
以NOT门为例,我们看一下大致的情况是怎样的
当输入为ON ,接地,输出为OFF
当输入为OFF,不接地,输出为ON
ALU也可以进行逻辑运算,如两个数相减,通过逻辑门的组成可以判断结果的正负从而判断两个数的大小,这里就不再叙述。
四 寄存器
1.锁存器
数据是可以就行计算了,但是计算之后的数怎样进行存储呢?
让我们看一个简化的电路。
通过分析我们可以看出来,当下面的数变成1之后,不管输入什么值,都输出1
这是能存储1的单元
这种方式就好像是把1锁在里面一样,因此叫做“锁存器”
但是通过这种方法,只能存储1位数,那么将八个锁存器并排连起来,不就可以存储8位数了么。这就是8位寄存器。
2.矩阵
但是8位也还是太少了,怎样排列可以更省线,更方便呢?
科学家们开始利用矩阵构成网络。
16 * 16的寄存器就变成了256位寄存器
五 时钟
时钟以准确的间隔,触发电信号,CPU用这个信号,推进CPU的内部操作。
CPU取指令->解码->执行的速度叫“时钟速度”
很多现代处理器可以按需求 加快或减慢时钟速度
这叫“动态调整频率”
超频可以提高CPU的速度.
降频可以减少能耗.
最后
✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下
带你从零开始设计一个简单CPU相关推荐
- 如何搭建python框架_从零开始:写一个简单的Python框架
原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...
- 从零开始设计一个IT系统
从零开始设计一个IT系统是件让人头痛的事,让我们来看一个实际的例子:由Cunard Line耗资8亿美元造的Queen Mary 2号油轮上各种豪华设施一应俱全,最多能同时容纳2600位乘客.假设 & ...
- mfc 窗体不可点击的原因_如何设计一个简单的Access登录窗体(2)
书接上回~ 上回书中提到了如何从零开始设计一个Access的窗体.经过简单的操作,我们已经造出了一个登录窗体,但是这个窗体是空白的,需要向其中增加一些元素,以增加登录窗体的功能性. 因此,接下来我们要 ...
- 子窗体 记录选择_如何设计一个简单的Access登录窗体(1)
Access是一个对数据库新手相当友好的软件. Access的窗体功能确实是一种独一无二的前端设计平台,很多常见的人机交互用法,可以用Access的窗体来轻松实现,同时Access的查询和计算功能,也 ...
- java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序
利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...
- linux logo程序设计,教你在线设计一个简单美观的LOGO
当你配置好Linux服务器并上传网站程序到服务器上,直到架设网站成功,你可能需要一个美观的LOGO,如果你对LOGO的要求不高,可以在线自己设计一个,因为网站发展初期,你没有什么资金,请不了专业的美化 ...
- access 知乎 窗体_如何设计一个简单的Access登录窗体(1)
Access是一个对数据库新手相当友好的软件. Access的窗体功能确实是一种独一无二的前端设计平台,很多常见的人机交互用法,可以用Access的窗体来轻松实现,同时Access的查询和计算功能,也 ...
- JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...
用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
最新文章
- linux进程间通信:POSIX 共享内存
- C# 2进制、8进制、10进制、16进制...各种进制间的轻松转换
- 让织梦内容页arclist标签的当前文章标题加亮显示
- win10双屏让任务栏显示不相同的方法
- 全渠道java b2b b2c o2o平台
- python求超级素数代码_C语言求超级素数
- 2018.5.28 PSOC第一枪:基于cypress的蓝牙开发
- oracle链接池满了怎么办,Oracle连接数满了
- linux fish颜色配置,如何在 Linux 中安装、配置和使用 Fish Shell?
- 数据结构之二叉树--转载
- 3分钟看懂 Linux 磁盘划分
- 十字链表法和邻接多重表法
- ubuntu系统鼠标右键没有新建文档的解决方案
- FH Admin fhadmn 源码项目下载获取 Java后台 springmvc mybatis SSM
- 【数据结构与算法】之深入解析RSA加密算法的实现原理
- 嵌入式操作系统风云录:历史演进与物联网未来第2章 Chapter2
- 什么是时间序列数据?
- maven安装到私服和从私服下载
- [20150901]提示USE_CONCAT.txt
- 黑帽SEO主要作弊方法
热门文章