自己动手写CPU day1-ORI的实现

本文介绍了一个简单的MIPS五级流水线CPU的设计过程,重点在于实现ORI指令,并在modelsim上进行仿真验证。文章详细描述了取指、译码、执行、访存及回写等各个阶段的功能及接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己动手写CPU day1-ORI的实现

目标

  1. 初步建立最简单的MIPS五级流水线
  2. 实现第一个指令:ORI
  3. 在modelsim上仿真

1.取指阶段的实现

1.1.PC模块

  • 功能:给出指令的地址

  • 接口描述

    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3pc32O要读取的指令地址
    4ce1O指令存储器使能

1.2 IF/ID模块

  • 功能:1. 暂存取指阶段的指令2.暂存指令地址3.在下一个clk传递给译码
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3if_pc32I取指阶段指令地址
    4if_inst32I取指阶段指令
    3id_pc32O译码阶段指令地址
    4id_inst32O译码阶段指令

2. 译码阶段的实现

2.1. Regfile

  • 功能:1.实现32个32位通用整数寄存器2.同时1W2R

  • 接口描述

    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3waddr5I要写入的寄存器地址
    4wdata32I要写入的数据
    5we1I写使能
    6raddr15I第一个读取口要读取的地址
    7re11I第一个读取口使能
    8rdata132O第一个读取口的输出值
    9raddr25I第二个读取口要读取的地址
    10re12I第二个读取口使能
    11rdata232O第二个读取口的输出值

2.2 ID

  • 功能:对指令进行译码
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2pc_i32I译码阶段指令对应地址
    3inst_i32I译码阶段指令
    4reg1_data_i32I从regfile的第一个读寄存器端口输入
    5reg1_data_i32I从regfile的第二个读寄存器端口输入
    6reg1_read_o1Oregfile的第一个端口读使能
    7reg2_read_o1Oregfile的第二个端口读使能
    8reg1_addr_o5Oregfile的第一个端口读地址
    9reg2_addr_o5Oregfile的第二个端口读地址
    10aluop_o8O译码阶段指令要进行的运算的子类型
    11alusel_o3O译码阶段指令要进行的运算的类型
    12reg1_o32O译码阶段指令要进行的运算的源操作数1
    13reg2_o32O译码阶段指令要进行的运算的源操作数2
    14wd_o5O译码阶段指令要写入的目的寄存器地址
    15wreg_o1O译码阶段指令是否有要写入的寄存器

2.3 ID/EX

  • 功能:将译码取得的运算类型、源操作数和目的寄存器传递给执行阶段
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3id_aluop8I译码阶段运算子类型
    4id_alusel3I译码阶段运算的类型
    5id_reg132I译码阶段源操作数1
    6id_reg232I译码阶段源操作数2
    7id_wd5I译码阶段写回地址
    8id_wreg1I译码阶段是否有写回
    9ex_aluop8O执行阶段运算子类型
    10ex_alusel3O执行阶段运算的类型
    11ex_reg132O执行阶段源操作数1
    12ex_reg232O执行阶段源操作数2
    13ex_wd5O执行阶段写回地址
    14ex_wreg1O执行阶段是否有写回

3.执行阶段的实现

3.1. EX

  • 功能:运算
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2aluop_i8I运算子类型
    3alusel_i3I运算类型
    4reg1_i32I源操作数1
    5reg2_i32I源操作数2
    6wd_i5I写回地址
    7wreg_i1I是否有写回
    8wd_o5O写回地址
    9wreg_o1O是否有数据写回
    10wdata_o32O要写回的数据

3.2. EX/MEM

  • 功能:传递
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3ex_wd5I写回地址
    4ex_wreg1I是否有写回
    5ex_wdata32I要写回的数据
    6mem_wd5O写回地址
    7mem_wreg1O是否有写回
    8mem_wdata32O要写回的数据

4. 访存阶段的实现

41. MEM

  • 功能:
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2wd_i5I写回地址
    3wreg_i1I是否有写回
    4wdata_i32I要写回的数据
    5wd_o5O写回地址
    6wreg_o1O是否有数据写回
    7wdata_o32O要写回的数据

4.2. MEM/WB

  • 功能:数据传递
  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3mem_wd5I写回地址
    4mem_wreg1I是否有写回
    5mem_wdata32I要写回的数据
    6wb_wd5O写回地址
    7wb_wreg1O是否有写回
    8wb_wdata32O要写回的数据

5. 回写阶段的实现

在regfile中实现了

6. 顶层模块的实现

  • 接口描述
    序号接口名称宽度I/O作用
    1rst1Ireset
    2clk1Iclock
    3rom_data_i32Irom的数据读入
    4rom_addr_o32Orom的地址给出
    5rom_ce_o1Orom读取使能

7. ROM的实现

  • 接口描述
    序号接口名称宽度I/O作用
    1ce1I使能
    2addr32I地址输入
    3inst32O命令输出

参考

  • 参考书目:《自己动手写CPU》 雷思磊
  • gitee仓库:https://gitee.com/xuyu__dadada/my-mips-cpu.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值