CPU原理
冯 • 诺依曼结构
运算器
功能:执行算术逻辑运算 组成:
- ALU: 用于执行各种算术和逻辑运算,包括加、减、乘、除、与、或、非、移位等。
- 数据寄存器: 用于存储运算器中的操作数和运算结果。
- 状态寄存器:用于存储运算器的运算状态,例如运算结果是否为零、是否溢出等。
控制器
功能:从内存中加载程序指令并提供给运算器所需的操作数和操作码,驱动程序指令的执行。 组成:
- 指令寄存器(IR): 存储从存储器加载的当前正在执行的指令
- 程序计数器(PC): 保存下一条要执行的指令的存储器地址
- 指令译码器: 用于将指令解码成控制信号,以便控制器可以控制其他组件执行指令
- 时序逻辑:用于根据指令译码器解码出的指令信息,生成控制信号,控制其他组件执行指令
- 中断控制器:用于处理计算机中的中断请求,以便及时响应外部设备的请求并完成相应的处理任务
存储器
功能:用于存储程序和数据,程序和数据都以二进制形式存储,并且存储器中的地址是连续的。程序和数据都可以通过地址来访问和操作。 组成:
- 主存储器(Main Memory)
通常是指随机存储器(Random Access Memory,RAM),它具有随机访问的特性,可以在短时间内存取或写入任意存储单元中的数据。
- 辅助存储器(Secondary Storage)
通常是指硬盘、光盘、U盘等外部存储设备,它们通常具有较大的存储容量和较慢的读写速度,但可以永久保存数据和程序。
输入设备
功能:允许用户或程序从外部输入数据,常见的输入设备有键盘、鼠标、摄像头、麦克风等
输出设备
功能:允许将程序的输出结果展示到外部设备中,常见的输出设备有显示器、扬声器等
其中,运算器和控制器合称为CPU。
工作流程
- 取指令
控制器的PC寄存器存放了下一条指令的地址,将该地址放到地址总线上,控制总线上发出read
信号,内存将该地址的数据放到数据总线上,结果保存到IR寄存器中,PC寄存器自动增加以指向下一条指令
- 分析指令
根据指令集的定义区分操作码和操作数,并去指定位置(立即数、寄存器、内存)取操作数,输入到运算器中
- 执行指令
运算器执行相应的运算
- 存储结果
将运算结果保存到指定位置,如这里是保存到内存中
电路实现
思路:先设计简单的1个bit的电路,可以列真值表设计出逻辑电路结构,(可以的话将其优化一下),然后将其当作黑箱封装,作为基本块一步步设计更复杂的电路
运算电路
以加法器为例:
真值表:
SUM: (NOT(A) AND B) OR (A AND NOT(B)) # 1 when exactly one of A or B is 1
CARRY OUT: A AND B # 1 when both A and B are 1
一位加法器:
四位加法器:
控制电路
- 复用器:从多个输入中选择一个作为输出
1bit的2路复用器:
1bit的4路复用器:
- 分用器:从多个输出中选择一个来接收输入
- 解码器:输入N-bit的值,将结果传输到个输出之一
存储电路
- 锁存器
RS锁存器:
门控D锁存器:
寄存器可由多个门控D锁存器实现。
设计
Register File:
CPU:
时钟信号:
时钟边缘触发电路状态变化,驱动指令执行。
- 上升沿:输入稳定,可以进行下一步操作
- 下降沿:输出稳定,可以读取结果
时钟周期的长度要保证电路传播耗时最长的阶段能够完成,一般是执行指令阶段。
优化
流水线
- 没有流水线:
每条指令需要的时钟周期数CPI = 4
- 使用流水线:
每条指令需要的时钟周期数CPI = 1
流水线的不足:
数据方面:
- 指令需要的时钟周期数不一致
- 结果不一致
控制方面
分支跳转