【数字逻辑与计算机组成】8指令多周期MIPS 32CPU

一、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的输入地址,指令存储器里取出一条指令,同时根据指令字节长度自动递增产生下一条指令所需要的指令地址。但遇到“转移地址”指令时,把控制器的“转移地址”送入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
    (使能信号,在时钟上升沿同步到下一级流水,以此控制何时使能)
  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小园园子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值