赞
踩
当前CPU的两大架构是CISC(复杂指令集)和RISC(精简指令集)
RISC:精简指令集处理器,Reduced Instruction Set Computer
( RISC结构简单,选取了使用频率高的简单指令,指令长度固定,多为单周期指令在功耗、体积、价格等方面有很大优势,多用于嵌入式领域)
MIPS架构:是一种采取精简指令集(RISC)的处理器架构
5个流水段分别为
IF(取指),ID(译码),EXE(执行),MEM(访存),WB(回写)。
原理图如下
1:实验中有三种类型的MIPS指令,分别为R型、I型和J型:
● R(register)类型的指令从寄存器堆中读取两个源操作数,计算结果写回寄存器堆;(两个源操作寄存器,一个目的寄存器)
rd=rs+rt
● I(immediate)类型的指令使用一个 16位的立即数作为一个源操作数;
(一个源操作寄存器,一个立即数(需扩展),一个目的寄存器)
rt=rs+immediate
● J(jump)类型的指令使用一个 26位立即数作为跳转的目标地址(target address);
MIPS连续字地址相差4,一个地址为8位一个字节,一个字(指令长度)有4个字节。
2:指令的各个位细致划分
Instruction[31:26]=opcode,操作码,用来区分指令;
Instruction[ 5:0 ]=funct ,功能码用来区分指令;
Instruction[25:21]=regardaddr,地址,从寄存器中读取数据的地址;rs
Instruction[20:16]=regbrdaddr,地址,从寄存器中读取数据的地址;rt
Instruction[20:16] 或 Instruction[15:11],向寄存器中写数据的地址;rt和rd
多周期 CPU :将整个 CPU 的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同。(一条指令的执行最长五个周期,有些不需要)
IF: PC计数器+Instruction_memory
根据计数器PC为Insruction的输入地址,指令存储器里取出一条指令,同时根据**指令字节长度(4)**自动递增产生下一条指令所需要的指令地址。但遇到“转移地址”指令时,把控制器的“转移地址”送入PC,得到的地址做些变换(左移2位)送入PC。
(为什么左移两位,例:偏移量为偏移3个字,但是地址是按照字节编码的,不执行左移会变成偏移3个字节,左移后变成12个字节,一个字为4个字节,即为3个字)
ID:contorl 产生操作控制信号
register 寄存器读出数据
sign_extend 扩展
EXE:ALU:根据操作信号,执行操作,
左移
MEM:Data_memory 访问存储器,进行写入或读出
WB: 2选1选择器 回写 指令执行的结果或访存得到的结果 》写入目的寄存器
1.PC:拥有指向当前指令的地址和下一条指令地址。实现地址跳转。根据地址跳转的类型可将跳转分成三种,分别是a:自增4 b:j指令 c:beq和bne指令
2:Instruction_memory:读取CPU的指令并进行分析 a: 读取指令 b:读取下一条指令 c:分析指令内容(PC值为地址,读出二进制指令)
3:CPU_crtl :主要用途是接受Instruction_memory中传入的数据,同时给个数据通路端口赋值以达到选择数据输入的目的
输入:opcode 和 funct 。
输出:RegDstD:决定写入寄存器的地址rd或rt 。
ALUSrcD:决定输入ALU的输入数SrcB是寄存器读出的regbdata还是立即数signimm(来自于INS[15:0]扩展)R或I指令。
ALUControlD:判断ALU进行何种运算。
BranchD:控制跳转(BranchM和zeroM一起)。
MemWriteD:向Data_memory中读或者写。
MemtoRegD:向Reg中写入的是ALURes或者Data_memory中读出的数据。
RegWriteD:是否向reg中写入数据
4:register :寄存器的读写 a:根据ctrl的数据,选择传入的数据地址(由INS提供) b:初始化 c:读和写(写不一定,但是一定读出,虽然不一定用)
(写使能由CPU_crtl 提供,一直同步到WB再传入reg,控制何时写入。MemtoRegD:向Reg中写入的是ALURes或者Data_memory中读出的数据。)
5:sign_extend:立即数最高位为符号位来扩展立即数
6:ALU:运算 beq和bne使用异或
7:data_memory:用于存储器的读写(读写使能来自ctrl,控制何时写入,只能单读或单写,地址为ALU运算结果。写数据来自reg读出数据)
8:MUX:决定回写的数据,MemtoRegD
(使能信号,在时钟上升沿同步到下一级流水,以此控制何时使能)
六:冲突解决
在ID段进行判断,针对不同指令,判断此时所需数据是否到达,如果有继续执行,否则加入停顿。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。