码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-20 00:05:09      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:mips   处理器   开源   自己动手写cpu   软核   

将陆续上传新书《自己动手写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进行判断。

bubuko.com,布布扣


9.7.3 系统结构的修改

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

bubuko.com,布布扣

      在访存阶段的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指令说明

标签:mips   处理器   开源   自己动手写cpu   软核   

原文地址:http://blog.csdn.net/leishangwen/article/details/41293723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!