将陆续上传新书《自己动手写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指令说明的更多相关文章

  1. 自己动手写CPU之第九阶段(4)——载入存储指令实现思路

    将陆续上传新书<自己动手写CPU>,今天是第40篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

  2. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...

  3. 自己动手写CPU之第九阶段(7)——MIPS32中的LL、SC指令说明

    将陆续上传新书<自己动手写CPU>,今天是第46篇. 在MIPS32指令集中有两条特殊的存储载入指令:链接载入指令LL.条件存储指令SC,本次将介绍这两条指令.在兴许将实现这两条指令. 9 ...

  4. 自己写CPU第四阶段(2)——验证该第一指令ori实现效果

    我们会继续上传新书<自己写CPU>(未公布),今天是12片,四篇 书名又之前的<自己动手写处理器>改为<自己动手写CPU> 4.3 验证OpenMIPS实现效果 4 ...

  5. 自己动手写CPU之第七阶段(7)——乘累加指令的实现

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

  6. 自己动手写CPU之第五阶段(1)——流水线数据相关问题

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...

  7. 自己动手写CPU之第六阶段(2)——移动操作指令实现思路

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...

  8. 自己写CPU第九阶段(5)——实现负载存储指令2(改变运行阶段)

    我们会继续上传新书<自己动手写CPU>.今天是第42篇.我尽量每周四篇,可是近期已经非常久没有实现这个目标了,一直都有事.不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9% ...

  9. 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...

随机推荐

  1. 有关SQLite的substr函数的笔记

    官方参考文档:SQLite Query Language: Core Functions http://www.sqlite.org/lang_corefunc.html 测试SQL语句: ,) AS ...

  2. c#基类 常用数据验证的封装,数字,字符,邮箱的验证

    #region 常用数据验证的封装,数字字符的验证       /// <summary>       /// 常用数据验证的封装,数字字符的验证       /// </summa ...

  3. JavaScript数值转换总结

    在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1  param是Boolean值,true和false分别转换为1和0: ...

  4. mybatis系列-04-mybatis开发dao的方法

    4.1     SqlSession使用范围 4.1.1     SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSession ...

  5. Hierarchical cluster算法介绍

    突然想记录几个聚类算法,由于实力有限就先介绍一下层次聚类算法(Hierarchical cluster algorithm),这个聚类算法思想简单,但实现起来感觉复杂度挺大:以前看过<集体智慧编 ...

  6. leetcode—3sum

    1.题目描述 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find ...

  7. Linux中MySQL5.5解压版普通用户安装

    #查看本机mysql 安装路径 [hadoop@SY-0134 toolkit]$ rpm -qa|grep -i mysql [hadoop@SY-0134 toolkit]$ whereis my ...

  8. Spark中的编程模型

    1. Spark中的基本概念 Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor. Driver Program:运行Applicat ...

  9. Things App Engine Doesn't Do...Yet

    当人们第一次使用App Engine的时候,他们会问一些App Engine不会做的事情.其中的一些事情Google在不久的将来会实现的,还有一些违背了App Engine设计的本质,将不可能增加(到 ...

  10. homework09-虐心的现程设终于要告一段落了

    V3.0版本今天凌晨出炉 添加了随机生成 添加了文件打开 完全按照老师的要求搞定了 V2.0版本更新 添加了中间数组变量显示 这次作业写了整整一天,把以前能用的代码都改了一个遍 最后变成了网页版的小程 ...