Or1200中IMMU使用举例

本文详细介绍了OR1200软核处理器中IMMU(Instruction Memory Management Unit)的使用情景,包括地址翻译、ITLB命中、未命中及页保护策略。通过一个示例程序,阐述了IMMU初始化、地址翻译、ITLB异常处理等过程,帮助读者深入理解IMMU的工作原理。
摘要由CSDN通过智能技术生成


以下内容摘自《步步惊芯——软核处理器内部设计分析》一书

5 IMMU使用情景

      前几章通过对OR1200处理器中各类指令执行过程的分析,实现了对CPU模块的剖析,本章将采用情景分析法,通过对使用IMMU的各种情景的分析以实现对IMMU模块剖析。使用IMMU的情景有如下几种:

      (1)使用IMMU进行地址翻译,同时ITLB命中,且没有违反页保护策略

      (2)使用IMMU进行地址翻译,但是ITLB未命中

      (3)使用IMMU进行地址翻译,虽然ITLB命中,但是违反了页保护策略

      (4)l.mtspr指令写特殊寄存器ITLBW0MRx、ITLBW0TRx

      (5)l.mfspr指令读取特殊寄存器ITLBW0MRx、ITLBW0TRx

      上述五种情景中,情景(1)、(2)、(3)在流水线的取指阶段使用到了IMMU,情景(4)、(5)在流水线的执行阶段使用到了IMMU。本章在后续部分将给出一个示例程序,其中涉及了IMMU的大部分使用情景,结合该示例程序分析在上述几种情景下IMMU的工作过程,从而理解IMMU的代码与原理。


6 分析用例

      1、修改最小系统

      为了使读者朋友对IMMU的作用有一个直观的认识,本节将给出一个示例程序,该示例程序展示了IMMU初始化、IMMU地址翻译、ITLB失靶异常、违反页保护策略而引发指令页失效异常等多种情况。在使用该示例程序之前,需要修改or1200_defines.v文件中的如下定义以启用IMMU:

or1200_defines.v
//`define OR1200_NO_IMMU               注释掉此处的宏定义,表示需要IMMU

      这样我们的最小系统就修改成如图10.11所示,在CPU与QMEM模块之间添加了IMMU模块。CPU模块的指令Wishbone总线接口分为两部分:一部分在CPU与IMMU之间,一部分在CPU与QMEM之间,参考图3.7可以更加清晰的了解这一点。


      此外,使用IMMU进行地址翻译时,由于地址翻译是以页为单位的(查询页表),页的大小是8KB,而QMEM中RAM的默认大小就是8KB,也就是只有1页,无法进行仿真,为此需要改变QMEM中RAM的大小。修改步骤如下:

      (1)修改or1200_spram_2048x32.v中的地址宽度参数aw,修改为13,使得QMEM中RAM的大小变为32KB,共4页。

or1200_spram_2048x32.v
parameter aw = 13;                      //地址线的宽度,原值为11,新值为13
parameter dw = 32;

      (2)修改QMEM中or1200_spram_2048x32的例化代码,如下:

or1200_qmem_top.v
or1200_spram_2048x32 or1200_qmem_ram(
	    .clk(clk),	.rst(rst),

`ifdef OR1200_BIST
	    .mbist_si_i(mbist_si_i),  	.mbist_so_o(mbist_so_o),	
	    .mbist_ctrl_i(mbist_ctrl_i),
`endif

`ifdef OR1200_QMEM_BSEL
	.sel(qmem_sel),
`endif

`ifdef OR1200_QMEM_ACK                     
  .ack(qmem_ack),                              
`endif

  //将.addr(qmem_addr[12:2])改为.addr(qmem_addr[14:2])
  .addr(qmem_addr[14:2]),  .ce(qmem_en),  
  .we(qmem_we),	           .oe(1'b1),  
  .di(qmem_di),	           .doq(qmem_do)
);                         

      修改结束后,需要在ModelSim中重新编译才可进行仿真。

      2、示例程序

      本节将给出一个示例程序,该程序涉及了IMMU的大部分使用情景,包括:ITLB命中且无页错误、ITLB失靶、ITLB命中但是有页错误、指令l.mtspr写IMMU中特殊寄存器等,读者借助于该程序可以更加具体的认识IMMU。

      示例程序如下,共分为8步,读者朋友可以按照第1步、第2步、第3步……第8步这样的顺序阅读,便于理解:

       .section .text,"ax"  
       .global _start
#######################           第7步            ########################
      
        .org 0x000C               
      l.movhi r1,0x12             
      l.movhi r1,0x13      #第6步修改ITLB后,有效地址0x6010被翻译为0x0010   
      l.movhi r1,0x14             
      l.movhi r1,0x15                           
      l.ori r2,r0,0x8040   #r2=0x8040  
      l.movhi r1,0x9
      l.mtspr r0,r2,0x0011 #将0x8040写入SR,从而使得处理器进入用户模式
      
      l.movhi r1,0x16      #在设置处理器进入用户模式之前已经读取到本指令进入
                           #流水线,所以不受影响
                           
      l.movhi r1,0x17      #在设置处理器进入用户模式之前已经读取到本指令进入
                           #流水线,所以不受影响
                           
      l.movhi 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值