首页 > 其他 > 详细

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

时间:2015-12-19 12:29:08      阅读:405      评论:0      收藏:0      [点我收藏+]

将陆续上传新书《自己动手写CPU》,今天是第47篇。


9.7 llsc指令实现思路

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的改动。

      导致寄存器LLbit0的情况有:(1sc指令之前没有运行ll指令;(2ll指令运行后、sc指令运行前。发生了异常。

9.7.2 数据流图的改动

      为了实现llsc指令。须要对数据流图作如图9-29所看到的的改动,主要是在回写阶段新增了一个LLbit寄存器,当中存储的就是链接状态位。仅仅有在回写阶段才会写LLbit寄存器。同一时候。要将LLbit寄存器的值传递到訪存阶段,以供指令sc进行推断。

技术分享


9.7.3 系统结构的改动

      为实现llsc指令,须要对系统结构做如图9-30所看到的的改动。新增了一个LLbit模块。用来实现LLbit寄存器。

技术分享

      在訪存阶段的MEM模块中会进行分析。假设是llsc指令,那么设置对LLbit寄存器的訪问信息,通过LLbit_we_oLLbit_value_o接口输出。前者表示是否是写操作,后者表示要写入的值,这些信息通过MEM/WB模块传递到回写阶段。终于改动LLbit寄存器。

      LLbit寄存器的值通过LLbit_o接口输出到MEM模块的接口LLbit_i,当sc指令进入訪存阶段时会使用到该值。

      须要注意的是。由于对LLbit寄存器的改动是在回写阶段最后的时钟上升沿进行的。假设直接採用LLbit模块给出的LLbit寄存器的值,可能不是正确的值,由于此时处于回写阶段的指令可能会改动LLbit寄存器,这一问题在第6章加入HILO寄存器时也遇到过,解决方法还是数据前推,将回写阶段指令对LLbit寄存器的操作信息前推到訪存阶段。訪存阶段根据这些情况,确定正确的LLbit寄存器的值。所以在图9-30中,MEM/WB模块的输出信号wb_LLbit_wewb_LLbit_value也要送到MEM模块。就是用来解决数据相关问题的。


下一次将通过改动代码实现LL、SC指令。

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

原文:http://www.cnblogs.com/hrhguanli/p/5058875.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!