您的位置:首页 > 其它

深入浅出MIPS 三 MIPS的协处理器CP0 (Section 1)

2015-11-09 15:42 197 查看
     原文地址:http://www.kernelchina.org/node/262

     在MIPS体系结构中,最多支持4个协处理器(Co-Processor)。其中,协处理器CP0是体系结构中必须实现的。它起到控制CPU的作用。MMU、异常处理、乘除法等功能,都依赖于协处理器CP0来实现。它是MIPS的精髓之一,也是打开MIPS特权级模式的大门。

  MIPS的CP0包含32个寄存器。关于它们的资料可以参照MIPS官方的资料MIPS32(R) Architecture For Programmers Volume III: The MIPS32(R) Privileged Resource Architecture的Chap7和Chap8。本文中,仅讨论常见的一些寄存器。

  Register 0: Index,作为MMU的索引用。将来讨论MMU和TLB时会详解之。

  Register 2, EntryLo0,访问TLB Entry偶数页中的地址低32Bit用。同上,在MMU和TLB的相关章节中详解。

  Register 3, EntryLo1,访问TLB Entry奇数页中的地址低32Bit用。

  Register 4, Context,用以加速TLB Miss异常的处理。

  Register 5, PageMask,用以在MMU中分配可变大小的内存页。

  Register 8, BadVAddr,在系统捕获到TLB Miss或Address Error这两种Exception时,发生错误的虚拟地址会储存在该寄存器中。对于引发Exception的Bug的定位来说,这个寄存器非常重要。

  Register 9, Count,这个寄存器是R4000以后的MIPS系统引入的。它是一个计数器,计数频率是系统主频的1/2。BCM1125/1250,RMI XLR系列以及Octeon的Cavium处理器均支持该寄存器。对于操作系统来说,可以通过读取该寄存器的值来获取tick的时基。在系统性能测试中,利用该寄存器也可以实现打点计数。

  Register 10,EntryHi,这个寄存器同EntryLo0/1一样,用于MMU中。以后会详述。

  Register 11,Compare,配合Count使用。当Compare和Count的值相等的时候,会触发一个硬件中断(Hardware Interrupt),并且总是使用Cause寄存器的IP7位。

  Register 12,Status,用于处理器状态的控制。

  Register 13,Cause,这个寄存器体现了处理器异常发生的原因。

  Register 14,EPC,这个寄存器存放异常发生时,系统正在执行的指令的地址。

  Register 15,PRID,这个寄存器是只读的,标识处理器的版本信息。向其中写入无意义。

  Register 18/19,WatchLo/WatchHi,这对寄存器用于设置硬件数据断点(Hardware Data Breakpoint)。该断点一旦设定,当CPU存取这个地址时,系统就会发生一个异常。这个功能广泛应用于调试定位内存写坏的错误。

  Register 28/29,TagLo和TagHi,用于高速缓存(Cache)管理。

  下面,我们来详解CP0中常用的几个寄存器,它们是:BadVAddr,Count/Compare,Status/Cause,EPC,WatchLo/WatchHi。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息