自己动手写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指令集架构兼容 ...
随机推荐
- 本博客迁移到Github,之后停止更新
本博客之后停止更新或者更新不是很及时,关注博客请移步 http://waylife.github.io 或者 http://blog.13kbook.com 谢谢支持. Update Time ...
- HDU 2056 Rectangles
Rectangles Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- C# DataGridView的列对象属性探讨 (未完待续)
比较难的几个属性的释义[1]:
- java web 学习五(servlet开发1)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- unicode ansi utf-8 unicode_big_endian编码的区别
随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思.&quo ...
- LeetCode题解——4Sum
题目: 给定一个数组,找出其中和为0的所有4个数组合,每个组合内的4个数非递降. 解法: ①先排序,然后利用4个指针,前两个遍历,后两个在第二个指针之后的部分里夹逼,时间O(N3). ②或者利用一个哈 ...
- HDFS体系结构
HDFS的设计目标 检测以及快速恢复硬件问题. 流式的数据访问. 移动计算比移动数据的代价小. 简化一致性模型. 超大规模数据集 异构软硬件平台之间的可移植性. HDFS的结构模型HDFS是一个主从的 ...
- 【Hadoop代码笔记】Hadoop作业提交之Child启动map任务
一.概要描述 在上篇博文描述了TaskTracker启动一个独立的java进程来执行Map或Reduce任务.在本篇和下篇博文中我们会关注启动的那个入口是org.apache.hadoop.mapre ...
- Hadoop学习笔记2---配置详解
配置系统是复杂软件必不可少的一部分,而Hadoop配置信息处理是学习Hadoop源代码的一个很好的起点.现在就从Hadoop的配置文件谈起. 一.Hadoop配置格式 Hadoop配置文件格式如下所示 ...
- 怎样提交FIREDAC数据集的DELTA到中间件然后保存进数据库
你可以在客户端序列FireDAC数据集的DELTA , 将序列后的STREAM发送给中间件, 中间件的TFDQuery或TFDMemTable调用LOADFROMSTREAM()方法加载流, 然后调用 ...