以下内容摘自《步步惊芯——软核处理器内部设计分析》一书
13.7DCache使用情景之一——存储指令执行阶段DCache失靶
存储指令执行阶段DCache失靶这种情景在通写法、回写法策略下有不同的执行过程,在通写法策略下直接写存储器中对应的地址,不操作DCache。在回写法策略下,首先判断目的地址对应的DCache中目录表的line是否被修改,如果是(Dirty为1),则将该line写回到内存,然后将目的地址所在的内存块读入DCache,填充到对应line,然后再修改DCache中对应目的地址的数据;如果目的地址对应的line没有被修改(Dirty为0),那么直接将目的地址所在的内存块读入DCache,填充到对应line,然后再修改DCache中对应目的地址的数据。如图13.7所示。
(具体分析过程参考书中正文)
13.8 DCache使用情景之二——存储指令执行阶段DCache命中
存储指令执行阶段DCache命中这种情景在通写法、回写法策略下也有不同的执行过程,在通写法策略下,既要写DCache中目录表对应的line,还要写内存中对应的地址,在回写法策略下,只是写DCache中目录表对应的line。如图13.11所示。
(具体分析过程参考书中正文)
13.9 DCache使用情景之三——l.mtspr指令写DCache中特殊寄存器
DCache中有三个特殊寄存器:DCBIR、DCBFR、DCBWR,其作用在13.3节已说明。从代码分析中可以发现,在通写法策略下,只能使用DCBIR、DCBFR,在回写法策略下,可以使用全部三个特殊寄存器。这也是很好理解的,在通写法策略下,DCache目录表中line的标志位Dirty始终为0,所以DCBIR、DCBFR的作用是一样,并且没必要存在DCBWR寄存器,所以本章将指令l.mtspr写DCache中特殊寄存器这一情景又分为如下四种情景:
(1)通写法策略下,指令l.mtspr写DCBIR、DCBFR
(2)回写法策略下,指令l.mtspr写DCBIR
(3)回写法策略下,指令l.mtspr写DCBWR
(4)回写法策略下,指令l.mtspr写DCBFR
(具体分析过程参考书中正文)
13.10 DCache分析小结
DCache有多种使用情景,本章只是分析了其中的三种,但这已经足够我们了解DCache的工作过程了,其余情景的处理过程与此是类似的。笔者个人感觉DCache模块是OR1200中最复杂的模块,因为要考虑到加载、存储指令,还要考虑采用的写策略是通写法、回写法,还要考虑DCache中对应目录项的标志位V、Dirty的情况,所以很复杂。为此,在本章最后分别给出在通写法、回写法情况下,DCache的工作流程图,如图13.18、13.19所示,其中也给出了DC_FSM模块中有限状态机各个状态之间的转换情况。
OR1200中数据Cache的使用情景分析