MIPS多周期流水线化处理器实现(5级流水的MIPS架构的CPU设计)

MIPS多周期流水线化处理器实现(5级流水的MIPS架构的CPU设计)

一:MIPS架构是什么?

当前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段进行判断,针对不同指令,判断此时所需数据是否到达,如果有继续执行,否则加入停顿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值