华中科技大学 - 计算机组成原理
华中科技大学 - 计算机硬件系统设计
Microprocessor without Interlocked Pipleline Stages
无内部互锁流水级的微处理器
add
000000RsRtRd00000100000sub
000000RsRtRd00000100010and
000000RsRtRd00000100100or
000000RsRtRd00000100101xor
000000RsRtRd00000100110两寄存器R型指令sll(逻辑左移)
00000000000RtRd偏移量000000srl(逻辑右移)
00000000000RtRd偏移量000010sra(算术右移)
00000000000RtRd偏移量000011单寄存器R型指令jr(寄存器跳转)
000000Rs000000000000000001000R型指令中的无条件分支指令:jr,jalr
I型指令 6 bits5 bits5 bits16 bitsOPRsRt标识操作功能第1个源操作数目的寄存器编号第2个源操作数双目运算、LOAD/STORE:Rs和立即数是源操作数,Rt为目标操作数
条件转移:Rs、Rt均为源操作数
addi
001000RsRtimmandi
001100RsRtimmori
001101RsRtimmxori
001110RsRtimmaddi的立即数扩展为符号扩展
(若为负数高16位补1)
其他三条进行0扩展
(高16位补0)
lw(从存储器读数据)
100011RsRtimmsw(把数据保存到存取器)
101011RsRtimm面向数位设置的I型指令lui(把立即数加载到寄存器的高16位)
00111100000Rtimm面向条件转移的I型指令beq(寄存器相等则转移)
000100RsRtimmbne(寄存器不相等则转移)
000101RsRtimmI型指令中的有条件分支指令:beq, bne, bgtz( > 0 ), bgez( >= 0 ),bltz( < 0 ), blez( <= 0 )
J型指令 6 bits26 bitsOP立即数跳转目标地址的部分地址j(无条件跳转)
000010addressjal(调用与联接)
001100address类似于X86架构的CALL。jal要保存返回地址
J型指令的无条件分支指令:j, jal
MIPS寄存器在R和I型指令格式中,寄存器操作数字段均为5位,可编号32个寄存器
寄存器名寄存器编号说明$s00保存固定的常数0$at1汇编器的临时变量$v0 - $v12 - 3字函数调用返回结果$a0 - $a34 - 7函数调用参数1-3$t0 - $t78 - 15临时变量,函数调用时不需要保存和恢复$s0 - $s716 - 23函数调用时需要保存和恢复的寄存器变量$t8 - $t924 - 25临时变量,函数调用时不需要保存和恢复$k0 - $k126 -27中断、异常处理程序使用$gp28全局指针变量(Global Pointer)$sp29堆栈指针变量(Stack Pointer)$fp30帧指针变量(Frame Pointer)$ra31返回地址(Return Address)另外还有
32个32位单精度浮点寄存器f0 - f312个32位乘、商寄存器Hi和L0:运算乘法时分别存放64位乘积的高、低32位; 除法时分别存放余数和商浮点寄存器和乘商寄存器没有编号,对程序员来说是透明的
MIPS寻址方式MIPS32指令集中不单设寻址方式说明字段
R型指令:由OP和funct字段共同隐含说明(R型指令字段全为0,需要结合funct字段表示)I、J型指令:由OP字段隐含 立即数寻址immediate addressing
寄存器直接寻址register addressing
add $t0,$s1,$s2 ;($t0 = $s1 + $s2) 基址寻址basic addressing
使用通用寄存器作为基址寄存器,以立即数作为偏移量,立即数带符号扩展为32位,和基址寄存器的值一起得到主存地址
使用基址寻址的指令:lw, sw, lh, sh, lb, lbu等
相对寻址
PC的值和偏移量相加得到主存地址,以立即数为偏移量。立即数带符号扩展为32位并左移2位再和PC的内容相加
PC的值会被修改为相加结果
使用相对寻址的指令:beq, bne
页面寻址
26位的地址码左移2位变为28位,作为地址的低28位,PC的值会被修改
高4位是PC改变后的值(取出指令后PC自动增加)
由于需要在一个周期内完成取指译码执行的过程,不设置AR,DR,IR。
取指令和取操作数要同时完成,为了避免访存冲突将程序和数据分开存放(哈佛结构):
ALU和PC累加器分开
R型指令数据通路以add $s0, $s1, $s2为例
寄存器堆要支持两路读和一路写
I型指令数据通路以lw $s0, 32($31)为例(从存储器读数据)
sw $s0, 32($31)(从存储器读数据)
单周期MIPS数据通路
对于有多输入源的引脚,加上多路选择器和信号选择信号
需要增加JUMP控制信号,PC输入增加一个跳转地址
单周期MIPS控制器单周期架构下,无时序逻辑
输入输出OP + funct多路选择器选择信号寄存器写使能信号内存访问控制信号运算器控制信号指令译码信号单周期MIPS关键路径lw的最长路径
时钟周期 = Tclk_to_Q + Tmem + Tregfile_read + Talu + Tmem + Tmux + Tsetup
不区分指令和数据存储器(冯诺依曼结构),功能部件分时使用
时钟周期变小,传输通路变短
功能部件输出端增加寄存器锁存数据
PC += 4
根据PC的内容从主存取指令
给出IRWrite信号,时钟到来时PC值写入IR锁存,同时PC原有的值更新为PC+4 取指令T2 将IR的内容送入控制器产生控制信号计算条件分支转移的地址(图紫色部分)时钟到来,取出的数据锁存在AB
R型指令执行T3-T4 给出AluOP和ALUSrcA、ALUSrcB信号,完成信号时钟到来C更新C的内容输出,在RegDst和RegWrite信号配合下,写回寄存器堆 lw执行T3-T5
4. A和立即数相加计算操作数地址,时钟到来结果锁存在C
5. 将C的内容传输到主存,时钟到来数据锁存在DR
6. DR的内容写入寄存器堆(IR给出目标寄存器编号)