微处理器结构与设计-第6次课-2013-04-03_71708531
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• ALU具有4个控制信号,见下表, • 那么由谁来产生这4 bit的信号呢?见下页
4 ALU Operation
ALU 控制信号 0000 0001 0010 0110 0111
0001 (暂不考虑)
功能 AND OR Add (与) (或) (加) ALU Zero
ALU result
Subtract (减) Set_on_less_than
数据存储器和符号扩展单元
要求数据存储器具有读口和写口, 并且需要指定数据单元地址 16位的偏移量需要进行32位扩展 形成数据存储器地址
Sign_extend(offset)+GPR(base)
转移指令地址形成
Beq $t1,$t2,offset
Operation: I: target_offset <--- sign_extend (offset _shifted_2_bit) condition <--- (GPR[rs] = GPR[rt]) I+1: if condition then PC <--- PC + target_offset ( 此时,PC值为指向紧接着branch的下一条指令地址)
– 来自于ALU, R-type指令 如 add r1,r5,r2; – 来自于数据存储器 (D-cache) 例如 Lw 指令
来源多于两个以上, 必须使用多路选择器
11
支持算逻指令和存储器访问指令的数据通路
添加多路选择器后的数据通路 该图可否支持转移指令,为什么?说明原因?
支持转移指令、算逻和存储器访问的数据通路
编码的无关项考虑
• 只有当 ALUop=10时,才考虑用funct field 细分子类 • ALUop编码应该禁止出现11组合,否则会出现混淆的编码 (教材附录C证实C.2 Elaboration) • 事实上,ALUop与funct field 可区分28=256个值 • F5和F4都是10,可作为无关项 (教材P105页编码表可得) • Operation 编码的最高位都是0,也可恒置低,编码时don’t care
5
42
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 写回寄存器堆 PC写入
5
43
指令add $t1,$t2,$t3 的执行过程
44
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 写回寄存器堆 PC写入
逻辑表达式:Operation1=ALUOp1~|F2~ 逻辑表达式:Operation0=(F0|F3)&ALUOp1
ALU的控制模块电路逻辑实现
化简小结
• 逻辑化简是提高性能的有效手段
• 采用观察法,这种方法当输入变量很多时, 该方法比卡诺图要好,值得推荐。 • 上述方法的具体实现
– 当{ALUOp1,ALUOp2}=1X时,用F1表示OPeration2; – 当{ALUOp1,ALUOp2}=10时,用F2表示OPeration1; – 当{ALUOp1,ALUOp2}=1X时, 用F0和F3表示OPeration0
指 令 的 其 它 字 段
MemRead (1 位) 非读 MemWrite (1 位)非写 MemtoReg (1 位)写寄存器的值来自 于ALU的计算
ALUop : 00 for lw,sw,
01 for branch, 10 for R-type instruction
30
有何感想?
由指令的操作码确定的控制信号
Load,store Add, sub beq, bne
8. Questions
• questionS ?
– MemtoReg 对load指令的作用?
Check yourself
• 单周期的微处理器数据通路为什么需要2个 独立指令存储器和数据存储器?
ALU的控制
• ALU的指令子集:
– 存储器访问指令 Lw, Sw – 转移指令beq – 算逻指令 add, sub,or, set_on_less_than
动作: •比较 --用ALU进行 • PC<---PC+4 (表明PC的指向)
PC+4
•ALU应提供比较结果,等与不 等的标志位
延迟槽的概念及示例
Loop: load r3,0(r4); add r1,r1,r3; subicc r2,r2,1; addi r4, r4,4; bne r4, r2,loop; nop ; store r1, 0(r4); .
Operation2-化简
逻辑表达式:Operation2=ALUOp0|ALUOp1&F1
Operation1-化简
逻辑表达式:Operation1=ALUOp1~|F2~ 第二行的ALUOP1的应该的看成0,因为禁止11的 出现,这样,前两行就可用ALUOP1来控制
Operation0-化简
指令add $t1,$t2,$t3 的执行过程
1
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 38
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 39
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 40
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 41
5
指令add $t1,$t2,$t3 的执行过程
1
3
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 输出ALU结果 写回寄存器堆
5
45
lw $t1,offset($t2)的执行过程
① 取指令,pc+4 ② 从寄存器堆中,读寄存器$t2, ③ 低16位的offset符号位扩展32位 ④ ALU计算地址 (加法操作) ⑤ 用ALU的结果做地址,从数据存储器取操 作数 ⑥ 把从数据存储器中的取得的值,写回$t1寄 存器
lw $t1,offset($t2)的执行过程
question ?
• 是否还存在另一种的化简表达?
控制单元的设计
• • • • •
Opcode [31:26] 共6位指令操作码 rs [25:21]和rt[20:16]对R-type,beq和store指令来说,总是充当读寄存器 rs[25:21]对load和store来说,总是基址寄存器 16位的偏移量offset对beq,load,store指令来说,位于[15:0] 要写的寄存器对load指令位于指令的[20:16],而对于R-t字段(ALUop) 与字段funct field 来共同确定 ALU control input 先用ALUop分类后, 再用funct field 来细分子类。 •ALUOP 可分为三类 •00 用于 lw 和sw 指令 •01 用于beq指令 •10 用于 R-type 指令
MIPS 5-stage 流水的数据通路
• 共同点: 都使用ALU进行计算
– 算逻指令使用ALU计算两个寄存器的操作数 – 存储器访问指令使用ALU计算地址
• ALU的数据来源
– 算逻指令两个操作数都来自寄存器堆 – 存储器访问指令操作数一个来自本指令的字段,另一个 来自寄存器堆
• 寄存器堆的数据来源
4
ALU control Line
Zero
ALU
ALU result
ALU的分级译码的控制实现
•多层分级译码控制产生ALU的4位控制信号,如下图
主 控 制 单 元
ALU OP码 (2bit)
ALU control line (4 bit)
•这种控制的优点: 减少主控单元的规模或面积 由大化小可提高控制单元的速度 •控制逻辑是影响性能的关键,因此,这种优化是必要的
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
add $t1,$t2,$t3 1. 取指令,pc+4 2. 从寄存器堆中,读$t2, $t3两个寄存器 3. 控制部件产生ALU的控制码,进行ALU操作 4. 把ALU的操作结果写回寄存器堆$t1
指令add $t1,$t2,$t3 的执行过程
33
指令add $t1,$t2,$t3 的执行过程
> 读指令,PC+4 34
•比较通用寄存器rs等不等rt •PC值为转紧接着branch的下一条指令 地址,也即延迟槽的地址 •Offset左移两位 •符号扩展 •与当前的PC值相加, 形成转移地址
转移指令的操作单元
•比较通用寄存器rs等不等rt •PC值为紧接着branch的下一条指令地 址,也即延迟槽的地址 •Offset左移两位 •符号扩展 •与当前的PC值相加, 形成转移地址
微处理器结构与设计
第6次课
单周期指令
2013年4月3日
用于LW, SW指令的数据存储器和符号扩展单元
lw $t1,offset_value($t2)
sw $t1, offset_value($t2)
要求数据存储器具有 读口和写口, 并且需要指定数据单 元的地址
16位的偏移量需要进行32位扩展 Sign_extend(offset)+GPR(base)形成数 据存储器地址
转移指令
Loop: load r3,0(r4);
subicc r2,r2,1; add r4, r4,4; bne r2,loop; add r1,r1,r3; store r1, 0(r4); .
延迟槽的指令 总是被执行
延迟槽的概念
• MIPS的流水线的转移指令,总要浪费一个时钟周期 • 我们把紧跟着转移指令的下一条指令,称为延迟槽。 • 利用延迟槽可以降低流水线停顿或等待,给一些非相 关指令的执行提供了调度的机会 • 处在延迟槽的指令,不管转移成功与否,都将被执行 • 如果没有合适的指令插入延迟槽,这时,编译器或汇 编器就必须插入一条NOP指令
带有控制信号的数据通路
7 个控制信号附加2-bit的 ALUop
7个信号 和ALUop来自于指令操作码
信号名 RegDst (1 位) RegWrite (1 位) ALUSrc (1 位) 操 作 码 PCSrc (1 位) 不选中 (0) 写寄存器的地址来 自[20:16]--rt 不写 ALU的第二个操作 数来自于寄存器堆 PC<----PC+4 选中(1) 写寄存器的地址来自 [15:11]—rd 如load 写入目标寄存器 ALU的第二个操作数来自于 低16位的符号扩展 PC来自于branch的地址计算 读数据存储器 写数据存储器 写寄存器的值来自于数据存 储器
指令add $t1,$t2,$t3 的执行过程
读指令,PC+4 获取寄存器地址
35
指令add $t1,$t2,$t3 的执行过程
1
读指令,PC+4 获取寄存器地址 取寄存器的值 36
指令add $t1,$t2,$t3 的执行过程
1
读指令,PC+4 获取寄存器地址 取寄存器的值 产生ALU控制 37
逻辑表达式:Operation0=(F0|F3)&ALUOp1 22
ALU 的控制实现
Operation
0 1 0 1 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1
23
Operation2~operation0逻辑表达式
逻辑表达式:Operation2=ALUOp0|ALUOp1&F1
5
lw $t1,offset($t2)的执行过程
5
lw $t1,offset($t2)的执行过程
5
lw $t1,offset($t2)的执行过程
5
lw $t1,offset($t2)的执行过程
lw $t1,offset($t2)的执行过程
5
beq $t1,$t2,offset
① 取指令,pc+4 ② 从寄存器堆中,读寄存器$t1,$t2 ③ ALU执行减法 ④ PC+4 后进行符号位扩充,并左移两位,形 成目标转移地址 ⑤ 用ALU的结果做地址,从数据存储器取操 作数 ⑥ 用ALU的结果,选择mux,使得add的结果 写入PC