自己写CPU第九阶段(5)——实现负载存储指令2(改变运行阶段)
我们会继续上传新书《自己动手写CPU》。今天是第42篇。我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事。不好意思哈。
q=%E4%BA%9A%E9%A9%AC%E9%80%8A&ie=utf-8&src=se_lighten_f" target="_blank" style="position:static; display:inline; color:rgb(51,102,153); text-decoration:none">亚马逊、京东、当当三大图书站点上。发表《
q=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99CPU&ie=utf-8&src=se_lighten_quotes_f" target="_blank" style="position:static; display:inline; color:rgb(0,0,240); text-decoration:none">自己动手写CPU》书评的前十名读者,均可获赠《步步惊芯——软核处理器内部设计分析》一书,大家踊跃參与吧。活动时间:2014-9-11至2014-10-30
9.3.2 改动运行阶段
1、改动EX模块
在运行阶段的EX模块会计算载入存储的目的地址。參考图9-19可知,EX模块会添加部分接口,如表9-3所看到的。
改动运行阶段的EX模块例如以下。
完整代码位于本书附带光盘Code\Chapter9_1文件夹下的ex.v文件。
- module ex(
- ......
- //新增输入接口inst_i,其值就是当前处于运行阶段的指令
- input wire[`RegBus] inst_i,
- ......
- //以下新增的几个输出接口是为载入、存储指令准备的
- output wire[`AluOpBus] aluop_o,
- output wire[`RegBus] mem_addr_o,
- output wire[`RegBus] reg2_o,
- ......
- );
- ......
- //aluop_o会传递到訪存阶段,届时将利用其确定载入、存储类型
- assign aluop_o = aluop_i;
- //mem_addr_o会传递到訪存阶段,是载入、存储指令相应的存储器地址,此处的reg1_i
- //就是载入、存储指令中地址为base的通用寄存器的值。inst_i[15:0]就是指令中的
- //offset。通过mem_addr_o的计算。读者也能够明确为何要在译码阶段ID模块新增输
- //出接口inst_o
- assign mem_addr_o = reg1_i + {{16{inst_i[15]}},inst_i[15:0]};
- //reg2_i是存储指令要存储的数据,或者lwl、lwr指令要载入到的目的寄存器的原始值,
- //将该值通过reg2_o接口传递到訪存阶段
- assign reg2_o = reg2_i;
- ......
2、改动EX/MEM模块
參考图9-19可知,EX/MEM模块会添加部分接口,用于将EX模块新增的输出传递到訪存阶段,添加的接口描写叙述如表9-4所看到的。
改动运行阶段的EX/MEM模块例如以下。仅仅是一个简单的传递操作。当流水线的运行阶段没有被暂停时。将来自运行阶段EX模块的输出传递到訪存阶段。完整代码请參考本书附带光盘Code\Chapter9_1文件夹下的ex_mem.v文件。
- module ex_mem(
- ......
- //为实现载入、存储指令而加入的输入接口
- input wire[`AluOpBus] ex_aluop,
- input wire[`RegBus] ex_mem_addr,
- input wire[`RegBus] ex_reg2,
- ......
- //为实现载入、存储指令而加入的输出接口
- output reg[`AluOpBus] mem_aluop,
- output reg[`RegBus] mem_mem_addr,
- output reg[`RegBus] mem_reg2,
- ......
- );
- always @ (posedge clk) begin
- if(rst == `RstEnable) begin
- ......
- mem_aluop <= `EXE_NOP_OP;
- mem_mem_addr <= `ZeroWord;
- mem_reg2 <= `ZeroWord;
- end else if(stall[3] == `Stop && stall[4] == `NoStop) begin
- ......
- mem_aluop <= `EXE_NOP_OP;
- mem_mem_addr <= `ZeroWord;
- mem_reg2 <= `ZeroWord;
- end else if(stall[3] == `NoStop) begin
- ......
- mem_aluop <= ex_aluop;
- mem_mem_addr <= ex_mem_addr;
- mem_reg2 <= ex_reg2;
- end else begin
- ......
- end
- end
- endmodule
下一阶段将改变内存访问。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
自己写CPU第九阶段(5)——实现负载存储指令2(改变运行阶段)的更多相关文章
- 自己写CPU第九阶段(3)——加载存储指令说明2(swl、swr)
我们会继续上传新书<q=%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99CPU&ie=utf-8&src=se_lighten_quot ...
- 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第47篇. 9.7 ll.sc指令实现思路 9.7.1 实现思路 这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll ...
- 自己动手写CPU之第九阶段(4)——载入存储指令实现思路
将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
- 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
- 自己动手写CPU之第九阶段(7)——MIPS32中的LL、SC指令说明
将陆续上传新书<自己动手写CPU>,今天是第46篇. 在MIPS32指令集中有两条特殊的存储载入指令:链接载入指令LL.条件存储指令SC,本次将介绍这两条指令.在兴许将实现这两条指令. 9 ...
- 自己动手写CPU之第七阶段(7)——乘累加指令的实现
将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...
- 自己动手写CPU之第五阶段(1)——流水线数据相关问题
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...
- 自己动手写CPU之第六阶段(2)——移动操作指令实现思路
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...
- 自己写CPU第四阶段(2)——验证该第一指令ori实现效果
我们会继续上传新书<自己写CPU>(未公布),今天是12片,四篇 书名又之前的<自己动手写处理器>改为<自己动手写CPU> 4.3 验证OpenMIPS实现效果 4 ...
随机推荐
- poj1083 思考题
http://poj.org/problem?id=1083 Description The famous ACM (Advanced Computer Maker) Company has rent ...
- 左右GNU Linux企业加密文件系统 eCryptfs简介
/********************************************************************* * Author : Samson * Date ...
- java多线程学习(一)
一.操作系统线程和进程的概念 线程是指进程中的一个运行单元,这个过程中也可调度实体. 线程与进程的差别: (1)地址空间:线程为进程内的一个运行单元.进程至少有一个线程(进程的主线程):进程的全部线程 ...
- GridView网格线都设置
如今,做网上商店的商品陈列,我想用网络格布局,但总认为空好看.所以我想给它一个净加格线.但是,我遇到了一个问题,网络格布局其实很easy,是集GridView布局和背景颜色adapter布局设置背景颜 ...
- 第8章 装饰模式(Decorator Pattern)
原文 第8章 装饰模式(Decorator Pattern) 概述: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. ...
- C语言字符串函数大全
C语言字符串函数大全 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include ...
- elasticsearch的rest搜索--- 总述
目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0 三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 一.针对这次装B 的解释 因为现在又 ...
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(五)
对li标签的相关操作——has与find的差异性 demo代码: <ul> <li><p>1</p></li> <li>2< ...
- SQLServer 使用 @@ERROR
原文:SQLServer 使用 @@ERROR 使用 @@ERROR 如果最后的 Transact-SQL 语句执行成功,则 @@ERROR 系统函数返回 0:如果此语句产生错误,则 @@ERROR ...
- HTML5多图片拖拽上传带进度条
前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ...