自己动手写CPU——第一篇
1 设计目标
从本章开始将一步一步实现教学版 openMIPS处理器。首先介绍系统的设计目标,其中详细说明了openMIPS处理器计划实现的5级流水线。
1.1 设计目标
openmips 设计的目标如下:
- 五级流水线,分别是:取指、译码、执行、访存、回写
- 哈佛结构。分开的指令和数据接口
- 32个32位整数寄存器
- 大端模式
- 向量化异常处理,支持精确异常处理
- 支持6个外部中断
- 具有32bit数据、地址总线宽度
- 能实现单周期乘法
- 支持延迟转移
10.兼容MIPS32指令集架构,支持MIPS32指令集中的所有整数指令 - 大多数指令可以在一个时钟周期内完成
1.2 五级流水线
- 取指阶段:从指令寄存器读出指令,同时确定下一条指令地址
- 译码阶段:对指令进行译码,从通用寄存器中读出要使用的寄存器的值,如果指令中含有立即数,那么还要将立即数进行符号扩展或者无符号扩展。如果是转移指令,并且满足转移条件,那么给出转移目标,作为新的指令地址。
- 执行阶段:按照译码阶段给出的操作数、运算类型、进行运算,给出运算结果。如果是Load store指令,那么还会计算 load store的目标地址。
- 访存阶段:如果是load store指令,那么在此阶段会访问数据存储器,反之,只是将执行阶段的结果向下传递到回写阶段。同时在此阶段还要判断是否有异常需要处理。如果有,那么会清除流水线,然后转移到异常处理例程入口地址处继续执行。
- 回写阶段:将运算结果保存到目标寄存器。
自己动手写CPU——第一篇相关推荐
- 自己动手写CPU(1)五级流水线及CPU第一条指令ori
自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...
- 自己动手写CPU(2)第一条ori指令
本博客内容基于<自己动手写CPU>这本书 上一篇文章介绍了一下流水线思想.设计流程等,下面我们可以实操一下实现第一条ori指令. 其实实现一条ori指令不难,我目前对这一条指令的理解简单来 ...
- 【自己动手写CPU】第一条指令ori的实现
验证过程 实现ori指令->建立最小SOPC->验证ori指令是否正确 ori指令说明 ori是进行逻辑"或"的运算指令 ori指令的指令码是6'b001101.处理器 ...
- 自己动手写CPU之第七阶段(10)——除法指令实现过程1
将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...
- 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...
- 自己动手写CPU(7)转移指令的实现
自己动手写CPU(7)转移指令的实现 分支延迟槽 在MIPS五级流水线中,一条指令被分成了五个阶段:取指.译指.执行.仿存.回写.当第一条指令的执行阶段结束时,第二条指令的译指阶段也已经结束了. 那么 ...
- 自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现
自己动手写CPU(6)流水线暂停.乘累加减与除法器的实现 流水线暂停 因为OpenMIPS设计乘累加.乘累减.除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕 ...
- 自己动手写CPU(5)简单算术操作指令实现_1
自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...
- 自己动手写CPU(2)流水线数据相关问题
自己动手写CPU(2)流水线数据相关问题 问题定义 流水线中经常有一些被称为"相关"的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些"相关" ...
最新文章
- restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
- cdmp不停增长 oracle_系统内存不足导致oracle进程被误杀terminating the instance due to error 822...
- itchat库微信自动回复祝福语
- 局域网中只有一台电脑无法连接共享打印机,其他电脑均可正常连接解决方案
- TensorFlow模型保存和提取方法
- 细谈eclipse PDT开发WordPress插件
- 戴尔t440服务器性能,戴尔_PowerEdge T440_塔式服务器_网络存储服务器_服务器 | Dell 中国大陆...
- ng-深度学习-课程笔记-13: 目标检测(Week3)
- centos 7的systemctl
- C语言和Python语言有什么区别呢?
- 系统日志查看journalctl命令详解
- 重新定义 \maketitle
- C语言开发工具Win-TC
- 阿里云,AWS和DigitalOcean:云服务比较
- 【Android开发经验】Android相关问题的好文章整理——温故而知新,可以为师矣
- 笹山希 java,C#版数据结构与算法高级教程(深入探讨)--附各种算法实例-升级版
- 浙江大学计算机保研条件_2020年计算机系保研推免记录(浙江大学软件学院)...
- 有了这些网站,让你有看不完的好电影!
- eclipse官网下载安装教程
- 钉钉自动打卡并微信通知打卡成功
热门文章
- 编程实现舞伴问题 c语言,C语言实现舞伴问题(队列)假设在周末舞会上,男士们(m人)和女士们(n人)进入舞厅时,各自排成一队。跳舞开始时,依次从男...
- UE4C++ 创建UI
- GlusterFS 安装报错汇总
- 解析#如何固定ImageView的长宽比#
- 上市公司综合排名及投资组合构建、收益率计算在线实验闯关
- 区分糖果空投—怎么区分糖果真假
- 10行代码搞定打印 Visio 图表文档 VSDX、DWGX、VSTX
- 翻译程序:将高级语言翻译成机器语言
- 使用Postman,生成接口测试文档
- python数据处理——同一行或同一列的错位相减法