计算机采用“存储程序”的工作方式,即计算机必须能够自动地从主存取出一条条指令执行,而专门用来执行指令的部件就是
中央处理器
(central Processing unit,CPU)
5.1 CPU概述
5.1.1 CPU的基本功能
CPU的基本职能是周而复始地执行指令,但执行过程中可能会遇到一些异常情况和外部中断,故还要能发现和处理异常情况和中断请求。
CPU执行一条指令的过程如下:
取指令
。从PC指出的内存单元中取出指令送到指令寄存器(IR)- 对IR中的指令操作码
译码
并计算下条指令地址。不同指令的功能不同,即指令涉及的操作过程不同,因而需要不同的操作控制信号。 计算源操作数地址并取源操作数
。根据寻址方式确定源操作数地址计算方式,若源操作数是存储器数据,则需要一次或多次访存。例如,对于间接寻址或两个操作数都在存储器的指令,需多次访存;若源操作数是寄存器数据,则直接从寄存器取数,无须访存- 对操作数进行相应的
运算
。在ALU或加法器等运算部件中对取出的操作数进行运算 - 目的操作数
地址计算
并存结果
。根据寻址方式确定目的操作数的地址计算方式,将运算结果存入存储单元中
上述这些基本操作可以用形式化的方式来描述,称为寄存器传送级语言(register transfer level,RTL):
- R[r]表示通用寄存器r的内容
- M[addr]表示存储单元addr的内容
- M[R[r]]表示寄存器r的内容所指存储单元的内容
- PC表示PC的内容
- M[PC]表示PC所指存储单元的内容
- SEXT[imm]表示对imm进行符号扩展
- ZEXT[imm]表示对imm进行零扩展
- 传送方向用 ← \leftarrow ←表示,即传送源在右,传送目的在左
5.1.2 CPU的基本组成
数据通路
(datapath)和控制器(
control unit)是两大基本部件,控制器也称为控制部件。
通常把数据通路中专门进行数据运算的部件称为执行部件(execution unit)。指令执行所用到的元件有两类:组合逻辑元件(也称操作元件
)和存储元件(也称状态元件
)。连接元件的方式:总线方式
和分散连接
方式。
数据通路
就是由操作元件
和状态元件
通过总线或分散方式连接而成的进行数据存储、处理和传送的路径。
1.操作元件
操作元件属于组合逻辑元件,其输出取决于当前的输入。常用的有MUX,Adder和ALU。
2.状态元件
状态元件属于时序逻辑电路,具有存储功能,输入状态在时钟控制下被写到电路中,并保持电路的输出值不变,直到下一个时钟到达。输入端状态由时钟信号决定何时被写入,输出端状态随时可以读出。例如D触发器:
边沿触发
(edge-triggered):
上升沿
:在时钟正跳变时进行读/写下降沿
:在时钟负跳变时进行读/写
时间约束:
建立时间
(Setup Time): 在触发时钟边沿之前必须稳定
保持时间
(Hold Time):在触发时钟边沿之后必须稳定
Clock-to-Q time
:(Latch Prop-锁存延迟):在触发时钟边沿,输出不能立即变化,状态单元的输入信息总是在一个时钟边沿到达厚的Clk-to-Q时才被写入到单元中,此时输出才会变化
5.1.3 数据通路与时序控制
数据通路的基本结构为"…— 状态元件 — 组合逻辑元件 — 状态元件 — …"。假定采用下降沿触发,则所有状态元件在时钟下降沿到来时开始写入信息,经过触发器的锁存延迟
(Clk-to-Q)后输出开始有效,并输出到随后的组合逻辑电路进行处理,经过若干级门延迟
,得到的处理结果被送到下一级状态元件的输入端,然后必须稳定一段时间(setup time
),才能开始下个时钟周期,并在时钟信号达到后还要保持一段时间(hold time
)
假定门延迟(最长延迟)为longest delay
,考虑时钟偏移(clock skew
),则时钟周期(cycle time )应为:
c
y
c
l
e
t
i
m
e
=
C
l
k
−
t
o
−
Q
+
l
o
n
g
e
s
t
d
e
l
a
y
+
s
e
t
u
p
t
i
m
e
+
c
l
o
c
k
s
k
e
w
cycle\ time=Clk-to-Q+longest\ delay+setup\ time+clock\ skew
cycle time=Clk−to−Q+longest delay+setup time+clock skew
假定各级组合电路中最短延迟为shorttest dealy
,为了能正常工作,应满足以下时间约束:
C
l
k
−
t
o
−
Q
+
s
h
o
r
t
e
s
t
d
e
l
a
y
>
h
o
l
d
t
i
m
e
Clk-to-Q +shortest delay > hold time
Clk−to−Q+shortestdelay>holdtime
否则组合电路中的输出结果还没更新,下一个下降沿就来了,导致混乱。