内容要点:控制器,数据通路
处理器的实际步骤
- 分析指令系统,得出对数据通路的需求
- 为数据通路选择合适的组件
- 连接组件建立数据通路
- 分析每条指令的实现,以确定控制信号
- 集成控制信号,形成完整的控制逻辑
MIPS指令系统的简化版本
-
无符号加法和减法(R指令)
-
addu rd, rs, rt
MEM[PC]:从指令存储器中取回指令
R[rd] = R[rs] + R[rt]:指令指定的操作
PC = PC + 4:计算下一条指令的地址
subu rd, rs, rt
-
-
立即数的逻辑或(I指令)
-
ori rt, rs, imm16
MEM[PC]:从指令存储器中取回指令
R[rt] = R[rs] | ZeroExt [imm16]:指令指定的操作
PC = PC + 4:计算下一条指令的地址
-
-
装载和存储一个字(32位/4Byte)(I指令)
-
lw rt, imm16(rs)
- MEM[PC]:从指令存储器中取回指令
- R[rt] = DataMemory{R[rs] + SignExt[imm16]}:指令指定的操作
- PC = PC + 4:计算下一条指令的地址
-
sw rt, imm16(rs)
- MEM[PC]:从指令存储器中取回指令
- DataMemory{R[rs] + SignExt[imm16]} = R[rt] :指令指定的操作
- PC = PC + 4:计算下一条指令的地址
-
-
条件分支
-
beq rs, rt, imm16
MEM[PC]
-
if (R[rs] - R[rt] == o) //从指令存储器中取回指令,判断转移条件是否成立
then zero = 1; else zero = 0 //zeroSignal传入IFU)
-
then:PC = PC + 4 + SignExt[imm16] * 4; // label (imm16)的实际数值是转移目标地址和下一条指令地址之间的差值,此差值以4Byte(32bits)为一个单位
else:PC = PC + 4;//计算下一条指令地址
-
指令系统的需求
-
算术逻辑单元(ALU)
- 运算类型:加、减、或、比较相等
- 操作数:2个32位的数,来自寄存器或扩展后的立即数
-
立即数扩展部件
- 讲一个16立即数扩展为32位数
- 扩展方式:零扩展、符号扩展
-
程序计数器(PC)
- 一个32位的寄存器
- 支持两种加法:加4或者加一个立即数
-
寄存器堆(两读一写)
- 每个寄存器为32位宽,共32个
- 支持读操作:rs和rt
- 支持写操作:rt或rd
-
存储器(对应了CPU中的指令和数据高速缓存(Cache))
- 一个只读的指令存储器,地址和数据均为32位
- 一个可读写的数据存储器,地址和数据均为32位
-
建立数据通路
- 基本原则:根据指令需求,连接组件,建立数据通路
- 指令的需求
- 所有指令的共同需求
- 取指令:
- 程序计数器(PC)的内容是指令的地址
- 用PC的内容作为地址,访问指令存储器获得指令编码
- 更新程序计数器(PC)
- 顺序执行:PC <- PC + 4
- 发生分支时:PC <- 分支目标地址
- 取指令:
- 不同指令的不同需求
- 所有指令的共同需求