自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
2015-12-19 12:02
295 查看
将陆续上传新书《自己动手写CPU》,今天是第47篇。
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指令运行前。发生了异常。
在訪存阶段的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指令。
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寄存器。在訪存阶段的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指令。
相关文章推荐
- shell 入门
- C#中使用DotNetZip选择指定文件并解压
- START WITH CONNECT BY PRIOR子句实现递归查询
- Received CISSP Lapel PIN
- Auto Layout(Storyboard)
- 带有EXISTS谓词的子查询
- MySQL的timeout超时你遇到过几种情况
- 开源日志系统比较:scribe,chukwa,kafka,flume
- 使用 Node.js、Express、AngularJS 和 MongoDB 构建一个Web程序
- Python 基础【第八篇】变量
- 在PHP中使用协程实现多任务调度
- CP学习笔记(9) - 迭代
- UFLDL教程答案(4):Exercise:Softmax Regression
- hdu 4472 Count (递推)
- datatables.js 简单使用--多选框和服务器端分页
- BING算法——思路整理(目标检测算法)
- 摩托罗拉(Motorola) MC2180条码采集器 .NET开发 接入条码组件
- UVa 12108 Extraordinarily Tired Students(特别困的学生)
- Unity中的Serializable
- AIX5.3中将Oracle SGA PIN在内存中的步骤