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

自己动手写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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《自己动手CPU(含CD光盘1张)》使用Verilog HDL 设计实现了一款兼容MIPS32指令集架构的处理器——OpenMIPS。OpenMIPS 处理器具有两个版本,分别是教学版和实践版。教学版的主要设计思想是尽量简单,处理器的运行情况比较理想化,与教科书相似,便于使用其进行教学、学术研究和讨论,也有助于学生理解课堂上讲授的知识。实践版的设计目标是能完成特定功能,发挥实际作用。《自己动手CPU(含CD光盘1张)》分为三篇。第一篇是理论篇,介绍了指令集架构、Verilog HDL的相关知识。第二篇是基础篇,采用增量模型,实现了教学版OpenMIPS处理器。首先实现了仅能执行一条指令的处理器,从这个最简单的情况出发,通过依次添加,实现逻辑操作指令、移位操作指令、空指令、移动操作指令、算术操作指令、转移指令、加载存储指令、协处理器访问指令、异常相关指令,最终实现了教学版OpenMIPS处理器。第三篇是进阶篇,通过为教学版OpenMIPS添加Wishbone总线接口,从而实现了实践版OpenMIPS处理器,并与SDRAM控制器、GPIO模块、Flash控制器、UART控制器、Wishbone总线互联矩阵等模块组成一个小型SOPC,然后下载到FPGA芯片以验证实现效果,最后为实践版OpenMIPS处理器移植了嵌入式实时操作系统μC/OS-II。 《自己动手CPU(含CD光盘1张)》适合计算机专业的学生、FPGA开发人员、处理器设计者、嵌入式系统应用开发工程师、MIPS平台开发人员以及对处理器内部的实现感兴趣的读者阅读,也可以作为高等院校计算机原理、计算机体系结构等课程的实践参考书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值