冯诺依曼
重要的设计思想
- 存储程序,而不是开关连线
- 二进制,而不是十进制
组成
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
要点
- 数据和程序以二进制代码不加区分的存放在存储器中,存放位置由存储器的地址指定
- 计算机工作时能够自动的从存储器中取出指令执行
执行指令步骤
- 取指
- 译码
- 执行
- 回写
模型
co-model- IR:指令寄存器
- PC:程序计数器,自动增加,或者强制写入
- MAR:存储器地址寄存器
- MDR:存储器数据存储器,对存储器进行读写
- ALU:加/减/乘/除/与/或/非...
- Z:运算结果
- F:结果状态,零/正负/进位/溢出
- Rn:通用寄存器
输入输出
co-inoutmodelco-inout
南北桥演变
co-sn1co-sn2
co-sn3
演进的方向是,随着输入输出设备越来越快,它们对CPU的读写性能也要求更高,对于多个IO共享南北桥的方法,会严重影响读写效率,所以为了适应这些高速IO,会逐渐地使用增加芯片,增加总线,增加存储等方法,对高速IO做特殊化处理,使得计算机可以充分利用这些高速IO
指令系统
寄存器结构
8086
co-8086- IP:16位地址,访问地址时,使用4位段加偏移,可以方位20位的存储地址
80386
co-803868664
co-8664X86指令
co-codeType特点:
- 变长
- 一个指令可以从存储器获取数据,也可以从寄存器获取数据
- 译码复杂
- 高度封装
- 共用F寄存器,难以并发
MIPS指令
设计思想
- 减少指令类型
- 降低指令复杂度
- 一个越简单的CPU会是一个更快的CPU
特点
- 固定长度
- 指令要么只操作存储器,要么只操作寄存器
- 运算只能操作寄存器
- 指令少,功能简单
- 简单的寻址模式
算术运算与逻辑运算
门电路
co-gate- N:当Gate通电,则闭合,否则打开
- P:当Gate不通电,则闭合,否则打开
非门
co-notVDD为高电频
A通电,则P门打开,M门闭合
Y输出低电平
与门
co-andco-and0
或门
co-or异或门
co-nor通过组合与门和或门,得到异或门
寄存器原理
D触发器
co-d- 存储器的一位由一个D触发器组成
- 由若干逻辑门组成,有多种实现方法
- 由一个输入,一个输出和一个时钟输入组成
- 当输入稳定,时钟上升沿(0->1),采样输入,并传送到输出,其余时间输出不变
逻辑ALU
co-alu输入x(32位),y(32位),分别接入与/或/非等门电路,并产生n个输出,通过控制电路,选择其中一个,并输出
加法
半加器
co-helf-add在不考虑进位的情况下,通过分析输入输出的逻辑运算,可以通过异或和与门实现加法
全加器
co-add通过两个半加器,实现带进位的加法器
优化
通过上述的全加器,可以通过串行的方法,实现多位的加法运算
但是如果每个步骤都需要等待前一位的进位才可以进行,效率会非常差
co-addopt根据以上公式,可以通过实现复杂的逻辑电路,通过三级门直接计算出进位c,实现优化的目的
co-addoptgate随着位数的增加,这种方法实现的门电路就会越复杂。所以对于32位的加法,会通过4个8位超前加法器组合实现。
乘法
十进制的乘法,需要查找乘法表,并进行中间结果的累加,计算方法非常复杂
二进制的乘法,不需要查找乘法表,只需要通过移位计算出中间结果,并进行中间结果的累加,计算简单
初始版本
co-multi0- 8位的被乘数
- 移位运算
- 4位的乘数
- 8位的加法器
- 8位的结果
优化
-
运算并行化
对运算进行并行法,例如移位与加法可以在同一个时钟进行运算
-
存储最优化
除法
通过移位和减法实现
co-divide优化
co-diviedopt单周期处理器设计
取指电路
co-fetch- PC为指令地址寄存器
- clk在时钟上升沿,获取PC+4或者转移指令,通过nPC_sel控制
- 并把指令传送到指令寄存器
加法电路
co-design-addrd = rs + rt
- rs和rt为加法输入寄存器,它们的值被送到busA和busB中,如果加法的一个操作数为立即数,那么通过ALUSrc选择并产生ALU的一个输入
- ALU通过ALUCtr控制,产生运算的选择
- RegWr控制是否产生输出,此时为选择产生
- RegDst控制输出是输出到rd还是rt
读存储电路
co-design-loadrt = addressLoad(rs+imm16)
- 寄存器rs和立即数传入ALU
- ALU计算出存储器地址,并输出
- Data Memory接收地址,并进行访存,并产生输出
- MemtoReg通过控制电路选择访存的输出
- 并输送到寄存器rt中
写存储电路
co-design-saveaddress(rt+imm16) = rs
- rt和立即数通过ALU运算得到地址
- Data Memory得到存储器位置
- 用rs的数值写入存储器
流水线处理器
标量流水线
co-water用串行的方法来设计cpu,需要进行取指-》译码-》执行-》访存-》写回
每个步骤都必须等待上一阶段完成,才可以进行
那么在执行每条指令时,会浪费大量的时间在等待
为了提高每个步骤的吞吐量,可以使用流水线的方式来设计CPU
co-watertimeling从上图可以看到,cpu的吞吐量增加了,但是对于单条指令,执行的时间却变长了。
可以看出,流水线的切分,并不是越细越好。在达到一定的粒度时,性能会不升反降
超标量流水线
标量流水线,只有一条工作的路线
超标量,会有多条线路并行的进行流水线工作
多核CPU
一个核的CPU拥有一个超标量流水线
多核CPU则拥有多个超标量流水线
流水线冒险
定义
阻止下一条指令在下一时钟周期执行的情况
-
结构冒险
所需的硬件正在为之前的指令工作
如果冲突,则把指令推迟到下一周期执行
如果在一个时钟周期内可以完成两个以上的操作,例如读写,则在时钟的前半周期先进行操作,后面的指令在时钟的后半部分进行操作
-
数据冒险
需要等待之前的指令完成数据的读写
-
控制冒险
需要根据之前的指令的结果决定下一步的行为
存储层次
对比
co-cacheCPU跟DRAM(内存)的差距越来越大,如果直接相连,会让CPU浪费大量的时间在等待,SRAM虽然价格高,但是速度快,可以作为cache作为中间层,提高CPU的数据读写性能
访问存储
- CPU读cache
- cache命中,则返回
- 不命中,读主存,并返回
cache映射策略
通过主存地址,hash
co-cache-hash冲突替换算法
- 随机
- 轮询
- 最近最少使用
设计
数据和代码存在不同的cache中
中断与异常
由于计算机难免陷入异常状态,例如除0,此时计算机的状态是异常的,无法正确的进行下一指令的操作,那么此时需要引入异常处理,通过触发中断,计算机根据中断号,执行相关的代码,进行状态的修复。
中断的另一个用途是,低速外设,例如键盘输入,通过中断,CPU指定中断程序,把键盘输入写入内存,进行数据交换
如果外设拥有大量的数据需要交换,此时单靠中断和CPU直接操作,会消耗大量的CPU资源,使得CPU无法进行其他程序的执行,此时需要引入其他的芯片,例如显卡,处理数据,并进行数据的传输,等传输完成,再由CPU对数据进行运算
过程
- 关中断
- 保存断点
- 识别中断源
- 保护现场
- 执行中断例程
- 恢复现场并返回
输入输出设备
编址方式
-
统一编址
地址与存储器地址共用
- 优点:操作方便,统一接口
- 缺点:会占用内存地址
-
独立编址
地址与内存地址分开,使用独立端口访问
- 优点:不占用内存地址
- 缺点:操作复杂
IO控制方式
CPU如果控制外设的数据传送
-
程序控制方式
-
无条件传送
CPU直接跟外设发送指令,不管外设是否准备好
-
查询传送
CPU执行程序,判断外设是否就绪,如果就绪则传送数据
-
-
中断控制方式
外设通过中断方式通知CPU可读或者可写
CPU进行数据的交换操作
-
直接存储访问
CPU通知DMA
DMA负责外设与存储器的数据交换
交换完成,DMAC通知CPU
CPU进行数据运算
网友评论