自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
将陆续上传新书《自己动手写CPU》,今天是第47篇。
9.7 ll、sc指令实现思路
9.7.1 实现思路
这2条指令都涉及到訪问链接状态位LLbit,能够将LLbit当做寄存器处理,ll指令须要写该寄存器,sc指令须要读该寄存器。同一时候,与对通用寄存器的訪问一样,对LLbit寄存器的写操作也放在回写阶段进行。
ll指令在訪存阶段要读取数据存储器中指定地址的数据。还要设置对LLbit寄存器的写操作,写入的值为1,这个写操作会通过MEM/WB模块传递到回写阶段,终于实现对LLbit寄存器的写。
sc指令在訪存阶段要先获得LLbit寄存器的值,假设该值为1。那么会完毕存储操作,同一时候设置对LLbit寄存器的写操作。写入的值为0,还要设置对通用寄存器rt的写操作,写入的值为1,这些写操作都会通过MEM/WB模块传递到回写阶段,终于实现对寄存器LLbit、通用寄存器rt的写;反之,假设LLbit寄存器的值为0。那么不进行存储操作,同一时候设置对通用寄存器rt的写操作。写入的值为0,这个写操作会通过MEM/WB模块传递到回写阶段,终于实现对通用寄存器rt的改动。
导致寄存器LLbit为0的情况有:(1)sc指令之前没有运行ll指令;(2)ll指令运行后、sc指令运行前。发生了异常。
9.7.2 数据流图的改动
为了实现ll、sc指令。须要对数据流图作如图9-29所看到的的改动,主要是在回写阶段新增了一个LLbit寄存器,当中存储的就是链接状态位。仅仅有在回写阶段才会写LLbit寄存器。同一时候。要将LLbit寄存器的值传递到訪存阶段,以供指令sc进行推断。
9.7.3 系统结构的改动
为实现ll、sc指令,须要对系统结构做如图9-30所看到的的改动。新增了一个LLbit模块。用来实现LLbit寄存器。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在訪存阶段的MEM模块中会进行分析。假设是ll、sc指令,那么设置对LLbit寄存器的訪问信息,通过LLbit_we_o、LLbit_value_o接口输出。前者表示是否是写操作,后者表示要写入的值,这些信息通过MEM/WB模块传递到回写阶段。终于改动LLbit寄存器。
LLbit寄存器的值通过LLbit_o接口输出到MEM模块的接口LLbit_i,当sc指令进入訪存阶段时会使用到该值。
须要注意的是。由于对LLbit寄存器的改动是在回写阶段最后的时钟上升沿进行的。假设直接採用LLbit模块给出的LLbit寄存器的值,可能不是正确的值,由于此时处于回写阶段的指令可能会改动LLbit寄存器,这一问题在第6章加入HI、LO寄存器时也遇到过,解决方法还是数据前推,将回写阶段指令对LLbit寄存器的操作信息前推到訪存阶段。訪存阶段根据这些情况,确定正确的LLbit寄存器的值。所以在图9-30中,MEM/WB模块的输出信号wb_LLbit_we、wb_LLbit_value也要送到MEM模块。就是用来解决数据相关问题的。
下一次将通过改动代码实现LL、SC指令。
自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明的更多相关文章
- 自己动手写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第四阶段(2)——验证该第一指令ori实现效果
我们会继续上传新书<自己写CPU>(未公布),今天是12片,四篇 书名又之前的<自己动手写处理器>改为<自己动手写CPU> 4.3 验证OpenMIPS实现效果 4 ...
- 自己动手写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第九阶段(5)——实现负载存储指令2(改变运行阶段)
我们会继续上传新书<自己动手写CPU>.今天是第42篇.我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事.不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9% ...
- 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立
将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...
随机推荐
- oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序
15511477451 原文 oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序? 环境:win7 64位系统.oracle11g数据库 问题描述:在win7 64位系统 ...
- ylbtech-SubwayNav(地铁线路导航)-数据库设计
ylbtech-DatabaseDesgin:ylbtech-SubwayNav(地铁线路导航)-数据库设计 DatabaseName:SubwayNav(地铁线路导航) Type:线路导航 1.A, ...
- 在eclipse.ini中指定jdk的方式
在eclisep的安装目录,打开eclipse.ini文件,加上这么一行,如下红色所示,注意加在-Vmargs前面,这两种方式的区别是:第二种方式除了会有eclipse进程外还会启动个java进程. ...
- qt 设置背景图片
博客出处:http://www.cppblog.com/qianqian/archive/2010/07/25/121238.htm 工作似乎走上正轨了,上周五的工作是做一个界面,用到QFrame和Q ...
- Python面向对象1
一.类和对向 面向过程和面向对象的编程 面向过程的编程:函数式编程,C程序等 面向对象的编程:C++,JAVA,Python等 类和对象:是面向对象中的2个重要概念 类:是事物的抽象,比如汽车: 对象 ...
- c++ 概念及学习/c++ concept&learning(三)
这一篇继续说说程序设计中的基本语句:控制块 一 if类控制语句 if if else if , else if ,else if(条件语句){如果条件为真,要做的一些事情} if(条件语句) {如 ...
- [HIve - LanguageManual] LateralView
Lateral View Syntax Description Example Multiple Lateral Views Outer Lateral Views Lateral View Synt ...
- java工程师的标准
1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring\hibernate等的源码. 2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求调研.尾是指上线交付之后,包括 ...
- google_protobuf数据类型
要通信,必须有协议,否则双方无法理解对方的码流.在protobuf中,协议是由一系列的消息组成的.因此最重要的就是定义通信时使用到的消息格式. Protobuf消息定义 消息由至少一个字段组合而成,类 ...
- canvas绘制清晰的方法
很早就开始使用canvas,包括自己绘制各种图形,以及作为画布提供给诸如echarts,当canvas绘制细线条,特别是关于文字绘制会出现很模糊或者锯齿的感觉. <canvas ref=&quo ...