OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [stable_0_2_0_rc1/] [or1ksim/] [cache/] [icache_model.c] - Diff between revs 638 and 884

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 638 Rev 884
Line 72... Line 72...
unsigned long ic_simulate_fetch(unsigned long fetchaddr)
unsigned long ic_simulate_fetch(unsigned long fetchaddr)
{
{
  int set, way = -1;
  int set, way = -1;
  int i;
  int i;
  unsigned long tagaddr;
  unsigned long tagaddr;
  extern int mem_cycles;
 
 
 
  /* ICache simulation enabled/disabled. */
  /* ICache simulation enabled/disabled. */
  if ((!testsprbits(SPR_UPR, SPR_UPR_ICP)) || (!testsprbits(SPR_SR, SPR_SR_ICE)) || insn_ci)
  if ((!testsprbits(SPR_UPR, SPR_UPR_ICP)) || (!testsprbits(SPR_SR, SPR_SR_ICE)) || insn_ci)
    return evalsim_mem32(fetchaddr);
    return evalsim_mem32(fetchaddr);
 
 
Line 95... Line 94...
 
 
    for (i = 0; i < config.ic.nways; i++)
    for (i = 0; i < config.ic.nways; i++)
      if (ic[set].way[i].lru > ic[set].way[way].lru)
      if (ic[set].way[i].lru > ic[set].way[way].lru)
        ic[set].way[i].lru--;
        ic[set].way[i].lru--;
    ic[set].way[way].lru = config.ic.ustates - 1;
    ic[set].way[way].lru = config.ic.ustates - 1;
    mem_cycles += config.ic.hitdelay;
    runtime.sim.mem_cycles += config.ic.hitdelay;
    return (ic[set].way[way].line[(fetchaddr & (config.ic.blocksize - 1)) >> 2]);
    return (ic[set].way[way].line[(fetchaddr & (config.ic.blocksize - 1)) >> 2]);
  }
  }
  else {  /* No, we didn't. */
  else {  /* No, we didn't. */
    int minlru = config.ic.ustates - 1;
    int minlru = config.ic.ustates - 1;
    int minway = 0;
    int minway = 0;
Line 123... Line 122...
    ic[set].way[minway].tagaddr = tagaddr;
    ic[set].way[minway].tagaddr = tagaddr;
    for (i = 0; i < config.ic.nways; i++)
    for (i = 0; i < config.ic.nways; i++)
      if (ic[set].way[i].lru)
      if (ic[set].way[i].lru)
        ic[set].way[i].lru--;
        ic[set].way[i].lru--;
    ic[set].way[minway].lru = config.ic.ustates - 1;
    ic[set].way[minway].lru = config.ic.ustates - 1;
    mem_cycles += config.ic.missdelay;
    runtime.sim.mem_cycles += config.ic.missdelay;
    return (ic[set].way[minway].line[(fetchaddr & (config.ic.blocksize - 1)) >> 2]);
    return (ic[set].way[minway].line[(fetchaddr & (config.ic.blocksize - 1)) >> 2]);
  }
  }
}
}
 
 
/* First check if data is already in the cache and if it is:
/* First check if data is already in the cache and if it is:

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.