1 设计目标

从本章开始将一步一步实现教学版 openMIPS处理器。首先介绍系统的设计目标,其中详细说明了openMIPS处理器计划实现的5级流水线。

1.1 设计目标

openmips 设计的目标如下:

  1. 五级流水线,分别是:取指、译码、执行、访存、回写
  2. 哈佛结构。分开的指令和数据接口
  3. 32个32位整数寄存器
  4. 大端模式
  5. 向量化异常处理,支持精确异常处理
  6. 支持6个外部中断
  7. 具有32bit数据、地址总线宽度
  8. 能实现单周期乘法
  9. 支持延迟转移
    10.兼容MIPS32指令集架构,支持MIPS32指令集中的所有整数指令
  10. 大多数指令可以在一个时钟周期内完成

1.2 五级流水线

  1. 取指阶段:从指令寄存器读出指令,同时确定下一条指令地址
  2. 译码阶段:对指令进行译码,从通用寄存器中读出要使用的寄存器的值,如果指令中含有立即数,那么还要将立即数进行符号扩展或者无符号扩展。如果是转移指令,并且满足转移条件,那么给出转移目标,作为新的指令地址。
  3. 执行阶段:按照译码阶段给出的操作数、运算类型、进行运算,给出运算结果。如果是Load store指令,那么还会计算 load store的目标地址。
  4. 访存阶段:如果是load store指令,那么在此阶段会访问数据存储器,反之,只是将执行阶段的结果向下传递到回写阶段。同时在此阶段还要判断是否有异常需要处理。如果有,那么会清除流水线,然后转移到异常处理例程入口地址处继续执行。
  5. 回写阶段:将运算结果保存到目标寄存器。

自己动手写CPU——第一篇相关推荐

  1. 自己动手写CPU(1)五级流水线及CPU第一条指令ori

    自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...

  2. 自己动手写CPU(2)第一条ori指令

    本博客内容基于<自己动手写CPU>这本书 上一篇文章介绍了一下流水线思想.设计流程等,下面我们可以实操一下实现第一条ori指令. 其实实现一条ori指令不难,我目前对这一条指令的理解简单来 ...

  3. 【自己动手写CPU】第一条指令ori的实现

    验证过程 实现ori指令->建立最小SOPC->验证ori指令是否正确 ori指令说明 ori是进行逻辑"或"的运算指令 ori指令的指令码是6'b001101.处理器 ...

  4. 自己动手写CPU之第七阶段(10)——除法指令实现过程1

    将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...

  5. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现

    将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...

  6. 自己动手写CPU(7)转移指令的实现

    自己动手写CPU(7)转移指令的实现 分支延迟槽 在MIPS五级流水线中,一条指令被分成了五个阶段:取指.译指.执行.仿存.回写.当第一条指令的执行阶段结束时,第二条指令的译指阶段也已经结束了. 那么 ...

  7. 自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现

    自己动手写CPU(6)流水线暂停.乘累加减与除法器的实现 流水线暂停 因为OpenMIPS设计乘累加.乘累减.除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕 ...

  8. 自己动手写CPU(5)简单算术操作指令实现_1

    自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...

  9. 自己动手写CPU(2)流水线数据相关问题

    自己动手写CPU(2)流水线数据相关问题 问题定义 流水线中经常有一些被称为"相关"的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些"相关" ...

最新文章

  1. restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
  2. cdmp不停增长 oracle_系统内存不足导致oracle进程被误杀terminating the instance due to error 822...
  3. itchat库微信自动回复祝福语
  4. 局域网中只有一台电脑无法连接共享打印机,其他电脑均可正常连接解决方案
  5. TensorFlow模型保存和提取方法
  6. 细谈eclipse PDT开发WordPress插件
  7. 戴尔t440服务器性能,戴尔_PowerEdge T440_塔式服务器_网络存储服务器_服务器 | Dell 中国大陆...
  8. ng-深度学习-课程笔记-13: 目标检测(Week3)
  9. centos 7的systemctl
  10. C语言和Python语言有什么区别呢?
  11. 系统日志查看journalctl命令详解
  12. 重新定义 \maketitle
  13. C语言开发工具Win-TC
  14. 阿里云,AWS和DigitalOcean:云服务比较
  15. 【Android开发经验】Android相关问题的好文章整理——温故而知新,可以为师矣
  16. 笹山希 java,C#版数据结构与算法高级教程(深入探讨)--附各种算法实例-升级版
  17. 浙江大学计算机保研条件_2020年计算机系保研推免记录(浙江大学软件学院)...
  18. 有了这些网站,让你有看不完的好电影!
  19. eclipse官网下载安装教程
  20. 钉钉自动打卡并微信通知打卡成功

热门文章

  1. 编程实现舞伴问题 c语言,C语言实现舞伴问题(队列)假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队。跳舞开始时,依次从男...
  2. UE4C++ 创建UI
  3. GlusterFS 安装报错汇总
  4. 解析#如何固定ImageView的长宽比#
  5. 上市公司综合排名及投资组合构建、收益率计算在线实验闯关
  6. 区分糖果空投—怎么区分糖果真假
  7. 10行代码搞定打印 Visio 图表文档 VSDX、DWGX、VSTX
  8. 翻译程序:将高级语言翻译成机器语言
  9. 使用Postman,生成接口测试文档
  10. python数据处理——同一行或同一列的错位相减法