快捷搜索:   nginx

SkyEye硬件模拟平台,硬件仿真实现之三

1. MMU和Memory系统结构

  图 0-1 ARM系统中MMU和Memory的系统结构

  

  
  ARM系统中MMU和Memory的系统结构如图 0 1所示。不过具体的CPU在实现MMU时差别较大,可能对其做简化和扩展, SkyEye的MMU模拟实现基于此,在提供一个标准的接口基础上,分成与具体CPU类型无关的MMU模拟子模块和与具体CPU类型相关的MMU模拟子模块两个主要部分。

  2. ARM 数据访问的基本流程图

  ARM CPU进行数据访问的基本流程如图 0 2所示。

  图 0-2 ARM CPU进行数据访问的基本流程

  

  
  3. MMU的统一接口

  数据结构

  typedef struct mmu_state_t {

  ARMword control; //CP15 control register

  ARMword translation_table_base; //CP15 translation table base register

  ARMword domain_access_control; //CP15 domain access control

  register

  ARMword fault_status; //CP15 fault status register

  ARMword fault_address; //CP15 fault address register

  ARMword last_domain;

   //last access domain

  ARMword process_id;

   //CP15 process id register

  mmu_ops_t ops;

  union{

  sa_mmu_t sa_mmu;

  arm7100_mmu_t

  arm7100_mmu;

  }u;

  } mmu_state_t;

  typedef struct mmu_ops_s{

  int (*init)(ARMul_State *state);/*initilization*/

  void (*exit)(ARMul_State *state);/*free on exit*/

  fault_t (*read_byte)(ARMul_State *state, ARMword va, ARMword *data);

  fault_t (*write_byte)(ARMul_State *state, ARMword va, ARMword data);

  fault_t (*read_halfword)(ARMul_State *state, ARMword va, ARMword *data);

  fault_t (*write_halfword)(ARMul_State *state, ARMword va,ARMword data);

  fault_t (*read_word)(ARMul_State *state, ARMword va,ARMword *data);

  fault_t (*write_word)(ARMul_State *state, ARMword va,ARMword data);

  fault_t (*load_instr)(ARMul_State *state, ARMword va, ARMword *instr);

  void (*mcr)(ARMul_State *state, ARMword instr, ARMword val);

  ARMword (*mrc)(ARMul_State *state, ARMword instr);

  }mmu_ops_t;

  数据结构ARMul_State中类型为mmu_state_t的mmu代表模拟中MMU的状态。mmu_state_t中的ops提供具体mmu的接口函数,同时包括一个联合结构u用于具体mmu实现的数据结构。

  4. 与具体CPU类型无关的MMU模拟子模块

  与具体CPU类型无关的MMU模拟子模块是实现MMU模拟的基础,它实现了TLB,TTW, 访问控制,CACHE, Write Buffer,Read Buffer等MMU要素的模拟,并且提供了较统一的接口,可以较灵活地组合实现具体MMU模拟。

  TLB的实现(mmu/tlb.[ch])

  TLB是一个表,它的表项包含地址映射信息和访问控制信息,地址转换信息只有在该表中查询不到时,才通过TTW在内存中查找。
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论