It has been 377 days since the last update, the content of the article may be outdated.

什么是计算机

计算机是一种能够执行计算的设备,1946年2月14日世界上第一台数字计算机ENIAC在美国宾夕法尼亚大学被制造出来,这标志着人类社会进入了信息化时代。

CPU中央处理器是指挥计算机工作的核心部件,在计算机中相当于大脑的地位,承载了计算机中最基本的原理。近70年来,从早期ENIAC计算机的CPU,到现在的手机中超大规模集成电路CPU,CPU变化的只是制作工艺,其根本的工作原理基本没有变。

做计算机 = 做CPU + 做操作系统

一层层的套娃:通过最简单的组件,经过一层层的抽象,做出来复杂的操作。

元器件的变化

继电器一真空管一晶体管继电器、真空管和晶体管是用于实现电信号的开关控制的电子元件。其他元器件原理都是一样,只是体积做的越来越小,现在晶体管开关的最小尺寸可以做到3nm左右

从1945年到现在计算机的电路原理和结构没有发生变化,变化的只是制作工艺

数字电路与二进制

简单来说,数是一个抽象的概念,而数字是用来表示数的符号。数(number)是一种数学抽象概念。数字(digit) 是表示数量的符号,如 0,1,2,3,4,5,6,7,8,9。抽象的概念是看不见的,符号是看得见的。
二进制没那么神秘,只不过是人们又发明出来一种新的组合符号来表示数字

位值计数法

基于位置和数值的一种计数方法
位值记数法是一种数字表示方式,它是基于位置来确定数字的大小的。在位值记数法中,每一个位置上的数字都有一个对应的权值,这个权值是基于它所在的位置而定的。

例如在十进制中,最右边的数字权值为1,次右边的数字权值为10,次次右边的数字权值为100,以此类推。如果是二进制,权值分别为1,2,4,8,16,32…

所以位值记数法是一种数字表示方式,是现代数学和计算机科学中常用的表示数字的方式。

  • 计算机的元器件晶体管只有2种状态,通电 (1) & 断电 (0) ,用二进制可直接根据元器件的状态来设计计算机。
  • 而且,数学中的“布尔代数”分支,可以用True和False(可用1代表True,0代表False) 进行逻辑运算,代替实数进行计算。
  • 信号容易被干扰,计算机使用接近5V的电压为1,接近0V的电压是0,这样可以有效避免干扰,轻微的电压波动不会对数据的结果造成影响。

二进制与8421码

bit位计算机中的一位二进制表示;
单个数字 1 或 0,1 位二进制数字命名为位(bit),也称1比特
byte字节1byte=8bit,即1byte代表8位数字。最早期的电脑为八位的,即以八位为单位处理数据。为了方便,将八位数字命名为1字节 (1byte)

二进制和十进制对比

十进制看每个数据的值和位置
从最右边开始,个位,十位,百位,千位

二进制的加法运算非常简单
跟十进制一样,按位相加,不过不是逢十进一了,而是逢二进一

计算机中常见的单位

8个bit是一个byte
迅雷下载或者很多下载软件下载速度10M/s 准确的讲是10Mbit/s
8个bit才是一个byte
所以真是的下载速度是 1.25MB/s电信办的宽带是100M的,理论下载速度也只有12.5MB/s

32位和64位寻址空间

32位的最大数为43亿左右
64位的最大数为9.2*10^18

计算机如何存储二进制

计算机通过在内存中使用电子电路来存储和操作二进制数据。这些电路可以根据二进制值的状态(0或1)来存储和传输数据。

计算机的码表

  1. ASCII(American Standard Code for Information Interchange):ASCII是最早的字符编码表,用于将英语字符和控制字符映射到7位二进制数值(0-127)。它包含基本的拉丁字母、数字、标点符号和一些控制字符。

  2. Unicode:Unicode是一种更为全面的字符编码标准,用于支持全球范围内的字符。它使用16位或32位二进制数值来表示字符,能够涵盖几乎所有的语言和符号。最常见的Unicode编码是UTF-8、UTF-16和UTF-32。

  3. UTF-8(Unicode Transformation Format - 8-bit):UTF-8是一种变长编码,使用8位二进制数值来表示Unicode字符。它可以表示ASCII字符,同时也支持其他Unicode字符,根据需要使用1到4个字节。

  4. UTF-16(Unicode Transformation Format - 16-bit):UTF-16使用16位二进制数值来表示Unicode字符。它可以表示ASCII字符和大部分常用字符,但对于较少使用的字符需要使用2个字节或4个字节。

Unicode编码

Unicode是一种全球字符编码标准,它为世界上几乎所有的字符和符号分配了唯一的标识码。Unicode旨在解决不同语言、文字和符号的字符表示问题。

Unicode编码使用16位或32位二进制数值来表示字符。最常见的Unicode编码是UTF-8、UTF-16和UTF-32。

  • UTF-8(Unicode Transformation Format - 8-bit)是一种变长编码,使用8位二进制数值来表示Unicode字符。它可以表示ASCII字符,同时也支持其他Unicode字符,根据需要使用1到4个字节。UTF-8是互联网上最常用的Unicode编码之一。

  • UTF-16(Unicode Transformation Format - 16-bit)使用16位二进制数值来表示Unicode字符。它可以表示ASCII字符和大部分常用字符,但对于较少使用的字符需要使用2个字节或4个字节。

  • UTF-32(Unicode Transformation Format - 32-bit)使用32位二进制数值来表示Unicode字符。它可以表示任何Unicode字符,并且每个字符都使用固定的4个字节。

二进制表示图片

每个像素在图片中都有一个对应的颜色值,这些颜色值可以用二进制数表示。比如,对于RGB(红绿蓝)颜色模型,每个像素的颜色由三个分量(红、绿、蓝)组成,每个分量占8位(1字节),总共24位(3字节)。通过将这些颜色值编码为二进制数据,可以表示整个图片。

0-255三原色

用0~255255255表示颜色数据
每一个像素点由RGB三种颜色组成。

声音信号的存储

声音采样每一时刻的震动幅度
采样:将声音信号按照一定的时间间隔进行采样,把每个时间点上声音信号的振幅转换成数字数据。采样率越高,转换出的数字数据越精确,但也需要更多的存储空间。
量化:将采样得到的连续的模拟信号,转化为一系列的离散的数字化信号。将振幅值转换为数字,常见的方法是将其按照一定的精度进行取样,通常使用16位或24位精度。

视频的二进制表示

视频 = 图片+ 声音
把图片+声音按照时间线存储起来,就是视频。
在数字视频中,视频帧被分解为数字像素,并将每个像素表示为二进制数。每个像素通常由三个分量表示: 红色、绿色和蓝色分量,即RGB值。每个分量通常使用8位二进制数 (即一个字节) 表示,因此每个像素由24位二进制数 (即三个字节) 表示。
视频的每一帧都由一系列像素组成。如果视频的分辨率为1920 x1080 (高清1080p),则每一帧将包含1920 x 1080 = 2073,600个像素。对于每个像素,计算机将RGB值编码为二进制数字,并将所有像素编码成一长串二进制数字序列。这个序列被存储在计算机的硬盘驱动器中,以便以后可以被读取和播放。

逻辑门电路

布尔运算是基于布尔代数的一种数学运算,它使用真和假值进行运算。
布尔运算包括逻辑与逻辑或逻辑非。逻辑运算是电路设计中的运算,它和布尔运算类似,但是用于在电路中进行运算。逻辑运算包括
布尔运算的基本运算符包括与(AND)或(OR)非 (NOT)异或(XOR) 。布尔运算的结果只有真或假两种可能,通常用于程序中的判断语句和逻辑控制。

逻辑门是一种电路元器件,它能够执行一种或多种逻辑运算。
常见的逻辑门有: 与门 (AND gate)或门 (ORgate)非门 (NOT gate)异或门 (XOR gate) 等这些逻辑门通过接受一些输入信号,并根据逻辑运算规则产生一个输出信号。这些逻辑运算可以用来构建复杂的逻辑电路,实现各种各样的功能。

与门的搭建

AND
与门是计算机里面一种很特殊的门,它有两个输入,叫做A和B。如果A和B两个输入都是1,那么与门的输出就是1,否则输出就是0。与门的作用就像是一个开关,它能够根据两个输入的情况来决定是否让电流通过。

这里上拉电阻和下拉电阻问题后面会有说明

或门的搭建

OR
或门是计算机里面一种很特殊的门,它有两个输入,叫做A和B。如果A和B两个输入有一个是1,那么与门的输出就是1,否则输出就是0。或门的作用就像是一个开关,它能够根据两个输入的情况来决定是否让电流通过。

非门电路的搭建

NOT

异或门的电路搭建

XOR

4个基础门电路的原理图

与或非是计算机逻辑门的最基础的部件,其他任意的部件都可以通过与或非三种门来表示

基础门电路pcb的制作

ALU概念入门

ALU(Arithmetic Logic Unit)是计算机CPU中的算术逻辑单元,它负责处理计算机中的数学运算和逻辑运算。它可以执行基本的算术运算(加减乘除) 和逻辑运算(与或非),并且根据运算结果产生相应的输出。 ALU是CPU中最重要的部分之一,负责实现计算机的基本运算功能

半加器的电路搭建

全加器电路的搭建

8位加法器的实现

上拉电阻和下拉电阻

下拉电阻和上拉电阻是两种常见的电路连接方式,用于控制信号的电平。

下拉电阻(Pull-down Resistor):将信号引脚连接到地(GND)或低电平的电阻。当信号未被外部输入时,下拉电阻会将信号引脚拉低至地或低电平。这样可以确保信号引脚在未连接时保持稳定的低电平状态。

上拉电阻(Pull-up Resistor):将信号引脚连接到电源电压(Vcc)或高电平的电阻。当信号未被外部输入时,上拉电阻会将信号引脚拉高至电源电压或高电平。这样可以确保信号引脚在未连接时保持稳定的高电平状态。

下拉电阻和上拉电阻通常与开关、按钮、传感器等设备一起使用,以确保信号的稳定性。当设备处于未操作状态时,下拉电阻或上拉电阻会将信号引脚维持在特定的电平,避免信号漂浮或产生干扰。

计算机的溢出

溢出是指某物超过了容器的容量而溢出。
计算机溢出的概念:
内容: 在有限的空间内,无法存储位数过大的数,则称为溢出。
说明: 第8位的进位如果为1,则无法存储,此时容易引发错误,数据会归零,所以应该谨慎对待溢出。

计算机的补码表示

把一个正数的二进制按位取反,然后再加一就是负数的补码表示方法。
使用补码表示法的优点在于,补码还可以避免在数值0上的两种表示方式(+0和-0),因此更加方便和精确。

减法电路通过补码加法来实现

乘除法电路的实现

加法和减法都是用加法电路来完成。

乘法就是多次的加法
3x5就是3+3+3+3+3

除法就是多次的减法
10%3就是10-3-3-3
一直减到发现结果是小于等于0为止。

所以加减乘除都是同一套电路逻辑。

  • 了解Verilog和fpga(大规模逻辑阵列)

逻辑运算电路

NOT,AND,OR等类型的电路逻辑运算电路就比较简单了.通过与门或门,非门电路来实现。
另外一个重要的电路是零检测电路,检测一个数据是不是0
零检测电路,只需要把所有的数据进行或运算即可.

计算器和计算机的区别

我们可以把CPU的ALU抽象成一种符号
作用: ALU的抽象让工程师不再考虑细节层面的组成,简化工作。
图示内容包括:

  1. 输入A,B和opcode
  2. 输出 out
  3. 标志flag: 溢出标记、零标记

计算机可以编程,计算器不能编程

用电去存储电信号

计算机要运行复杂程序,必须要能记忆数据

锁存器

与门可以存储下来0, 或门可以存储下来1,我们把与门和或门进行一个组合,就能做出来第一个有用的电路结构。

Din data in 数据输入
WE write enable
当WE为高电平的时候,Din的数据可以被存储起来
当WE为低电平的时候,out的值不发生变化。

带边缘触发的锁存器

寄存器 = 8位锁存器/16/32位
一次可以存储8位数据。
Din data in数据输入
WE write enable
当WE为高电平的时候,Din的数据可以被存储起来
当WE为低电平的时候,out的值不发生变化

输出使能开关

CPU需要clock来同步内部操作,如执行指令、进行数据传输等。Clock 提供了精确的时间控制,确保每个内部操作在正确的顺序与速度内执行,从而确保 CPU 的正常工作。另外,Clock 还与 CPU 的频率相关,通过控制 Clock频率,可以控制 CPU 的速度。

时钟信号是什么:

  • 时钟信号就是周期性的高低电平变化的信号
    我们可以用两个普通的寄存器加上一个非门,组成一个带有边缘触发的奇存器。
    在按钮按下的一瞬间,电压从低电平到高电平的一瞬间,Din的数据被存储起来

并行转串行的原理

内存地址:从并行到串行
先设计一个内存单元格,内存单元格要知道自己在哪一行和哪一列,需要有row和column

内存单元要有ld (load) 读的控制
内存单元要有str (store) 存的控制
内存单元要有数据的输入

实际内存的结构

行和列的位置就是内存地址
我们采用二进制去描述行和列的位置
从而定位到特定的内存单元格
就可以完成内存的读写操作

计算机系统的核心组件

ALU (算术逻辑单元): ALU是CPU的核心组件,负责执行所有算术和逻辑操作,如加、减、乘、除、与、或、非、异或等。

寄存器: 寄存器是CPU中的存储器件,用于存储数据和指令。CPU需要许多寄存器来存储不同类型的数据和指令。

内存: 内存是CPU中的另一个重要组件,它用于存储程序和数据。CPU需要一个内存管理单元来管理内存的读写操作。

时钟: 时钟是CPU中的一个电子组件,它提供CPU的时序信号,确保所有操作都按照正确的时序执行。

控制单元: 控制单元是 CPU中 的重要组件,它控制数据和指令在 CPU内部 的流动,并确保它们按照正确的顺序被执行。

CPU内部原理图ALU部分

汇编语言和指令集

汇编语言是对机器指令的文字版抽象,方便我们更容易的理解机器指令,汇编语言由操作码操作数组成

0000 LOAD_A
0001 LOAD_B
0010 ADD
0011 STORE

cpu指令集 汇编语言 LOADA,LOADB,ADD,STORE详细作用描述

内存模块的使用

EPROM和Flash都是可编程只读存储器(Programmable Read-Only Memory,PROM)的类型,它们都可以用于存储程序代码和其他类型的数据。

可编程可擦除只读存储器 (Erasable ProgrammableRead Only Memory,EPROM) 是一种可写可读的存储器。用户可根据需要来写入,并能把已写入的内容擦去后再改写的ROM。这种存储器擦除原内容的方法很有特点,可以使用点的方法,也可以采用紫外线照射的方法进行擦除数据。

Flash可以通过电子方式进行擦除,这种擦除方式称为电子擦除 (Electrical Erase),通常使用高电压或者脉冲电压来擦除数据
这两种存储掉电都会保存,现代单片机的存储代码很多是用flash来实现。

CPU与内存的连接

CPU执行程序的流程:包含取指和执行两个周期

取指周期:

  1. 把PC(程序位置计数器) 的值放入MAR(内存地址寄存
  2. PC的值加1,指向下一条程序指令
  3. 把MAR地址指向的内存中的数据取出来 (操作码+操作数)放入MBR(内存缓存寄存器)
  4. 把MBR中的数据放入IR (指令寄存器)

执行周期:

  1. decode操作码
  2. 根据操作码确定是LOAD_A还是LOAD_B还是add还是
    store指令
  3. 不同的指令对应不同的操作

手动执行第一条机器指令load_A,完成3加5的流程

微操作汇总
取指阶段-全部相同

  1. 把PC (程序位置计数器) 的值放入MAR(内存地址寄存器)
  2. PC的值加1,指向下一条程序指令
  3. 把MAR地址指向的内存中的数据取出来 (操作码+操作数) 放入MBR (内存缓存寄存器)
  4. 把MBR中的数据放入IR (指令寄存器)

第0步: 清除全部状态,打开PC的OE,打开MAR的WE
第1步: 清除全部状态,打开PC的EN
第2步: 清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE
第3步: 清除全部状态,打开MBR的OE,打开IR的WE

译码和执行阶段 OPCODE为0000
OPCODE为0000,意味着是MOVE_A,把内存地址的值放入A寄存器

第0步: 清除全部状态,打开IR的OE ,打开MAR的WE
第1步: 清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE
第2步: 清除全部状态,打开MBR的OE,打开RegA的WE

译码和执行阶段 OPCODE为0001
OPCODE为0001,意味着是MOVE_B,把内存地址的值放入B寄存器

第0步: 清除全部状态,打开IR的OE ,打开MAR的WE
第1步: 清除全部状态,打开MAR的OE,打开内存的OE,打开MBR的WE
第2步: 清除全部状态,打开MBR的OE,打开RegB的WE

译码和执行阶段 OPCODE为0010
OPCODE为0010,意味着是ADD,寄存器A和B的数值相加

第0步: 清除全部状态,打开RegA的OE ,打开RegB的OE,打开ALU的OE,打开Output Reg的WE

译码和执行阶段 OPCODE为0011
OPCODE为0011,意味着是STORE,把Output Reg的内容存入内存

第0步:
清除全部状态,打开IR的OE打开MAR的WE打开Out.reg的OE 打开MBR的WE
第1步:
清除全部状态,打开MAR和MBR的OE,打开内存的WE

https://blog.csdn.net/m0_63398413/article/details/128819277

后门和漏洞

后门是在设计CPU或者芯片的时候,故意定义一些非公开的指令集或者接口用来收集用户的数据和信息。后门是人品问题
漏洞是在设计CPU的过程中由于设计者的疏忽,导致攻击者利用非常规手段获取非正常的访问权限,漏洞是水平问题
要想消除CPU的隐患,只能是不受制于人,自己拥有核心技术,使用risc-V这种开源的架构和指令集,自己设计CPU的ip核、用自己的CPU才能消除这种隐患。

光刻工艺

改进 (提升CPU的性能)
减少电路状态的切换时间提升CPU的速度,例如把继电器升级到电子管 再升级成晶体管,减少集成电路的大小和体积。
电路长度减少一倍,运算速度就可以提升一倍。
给CPU设计专门的电路做复杂运算,比如说除法电路,乘法电路,游戏中的渲染电路,追光电路,视频解码电路(MMX,3DNOW,SSE处理器)

流水线技术

缓存(提高数据传输速率)
在CPU的内部设计一小块内存,称为缓存,让RAM中的数据,一次性传递一批到CPU中,提升数据传输的效率。提升缓存命中算法效率

高级CPU技术

其他技术:
堆叠套娃,多核CPU,一个CPU芯片,多个独立的处理单元,共享资源,同时运行多条指令流。
一台计算机中,使用几百万个CPU,可以做非常复杂的运算,模拟宇宙的形成,中国的:神威-太湖之光

软硬件生态系统

指令集就是机器语言支持哪些指令
指令集是指一组计算机程序可以执行的指令的集合。这些指令包括了进行基本运算和数据传输的指令,以及控制计算机程序流程和执行条件语句的指令。指令集是计算机系统的基础,每种计算机都有自己的指令集。指令集架构是指CPU所支持的指令集的类型和体系结构。
每一颗芯片都是从指令集开始设计的,苹果公司的M1芯片和intel芯片所采用的指令集是不同的,指令集不相同会导致两个平台下的软件不能兼容运行,所以苹果系统上的软件是不能在基于intel的Windows上运行的。

CPU家族庞大,种类众多,根据不同的方式可以分类按照功能分类:

  1. 专用CPU
  2. 通用CPU

按照使用场景分类

  1. 科学计算CPU (TPU)
  2. 信息化设备CPU (Intel,AMD)
  3. 移动计算CPU (高通,华为麒麟)
  4. 嵌入式CPU (stm32,gd32)
  5. 微控制器CPU(单片机)