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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_59/] [or1ksim/] [cache/] [dcache_model.c] - Diff between revs 428 and 541

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

Rev 428 Rev 541
Line 69... Line 69...
void dc_simulate_read(unsigned long dataaddr)
void dc_simulate_read(unsigned long dataaddr)
{
{
  int set, way = -1;
  int set, way = -1;
  int i;
  int i;
  unsigned long tagaddr;
  unsigned long tagaddr;
 
  extern int mem_cycles;
 
 
  if ((!testsprbits(SPR_UPR, SPR_UPR_DCP)) || (!testsprbits(SPR_SR, SPR_SR_DCE)))
  if ((!testsprbits(SPR_UPR, SPR_UPR_DCP)) || (!testsprbits(SPR_SR, SPR_SR_DCE)))
    return;
    return;
 
 
  /* Which set to check out? */
  /* Which set to check out? */
Line 90... Line 91...
 
 
    for (i = 0; i < config.dc.nways; i++)
    for (i = 0; i < config.dc.nways; i++)
      if (dc[set].way[i].lru)
      if (dc[set].way[i].lru)
        dc[set].way[i].lru--;
        dc[set].way[i].lru--;
    dc[set].way[way].lru = config.dc.ustates - 1;
    dc[set].way[way].lru = config.dc.ustates - 1;
  }
    mem_cycles += config.dc.load_hitdelay;
  else {  /* No, we didn't. */
  } else {  /* No, we didn't. */
    int minlru = config.dc.ustates - 1;
    int minlru = config.dc.ustates - 1;
    int minway = 0;
    int minway = 0;
 
 
                dc_stats.readmiss++;
                dc_stats.readmiss++;
 
 
Line 107... Line 108...
    dc[set].way[minway].tagaddr = tagaddr;
    dc[set].way[minway].tagaddr = tagaddr;
    for (i = 0; i < config.dc.nways; i++)
    for (i = 0; i < config.dc.nways; i++)
      if (dc[set].way[i].lru)
      if (dc[set].way[i].lru)
        dc[set].way[i].lru--;
        dc[set].way[i].lru--;
    dc[set].way[minway].lru = config.dc.ustates - 1;
    dc[set].way[minway].lru = config.dc.ustates - 1;
 
    mem_cycles += config.dc.load_missdelay;
  }
  }
}
}
 
 
/* 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:
    - increment DC write hit stats,
    - increment DC write hit stats,
Line 126... Line 128...
void dc_simulate_write(unsigned long dataaddr)
void dc_simulate_write(unsigned long dataaddr)
{
{
  int set, way = -1;
  int set, way = -1;
  int i;
  int i;
  unsigned long tagaddr;
  unsigned long tagaddr;
 
  extern int mem_cycles;
 
 
  if ((!testsprbits(SPR_UPR, SPR_UPR_DCP)) || (!testsprbits(SPR_SR, SPR_SR_DCE)))
  if ((!testsprbits(SPR_UPR, SPR_UPR_DCP)) || (!testsprbits(SPR_SR, SPR_SR_DCE)))
    return;
    return;
 
 
  /* Which set to check out? */
  /* Which set to check out? */
Line 147... Line 150...
 
 
    for (i = 0; i < config.dc.nways; i++)
    for (i = 0; i < config.dc.nways; i++)
      if (dc[set].way[i].lru)
      if (dc[set].way[i].lru)
        dc[set].way[i].lru--;
        dc[set].way[i].lru--;
    dc[set].way[way].lru = config.dc.ustates - 1;
    dc[set].way[way].lru = config.dc.ustates - 1;
 
    mem_cycles += config.dc.store_hitdelay;
  }
  }
  else {  /* No, we didn't. */
  else {  /* No, we didn't. */
    int minlru = config.dc.ustates - 1;
    int minlru = config.dc.ustates - 1;
    int minway = 0;
    int minway = 0;
 
 
Line 164... Line 168...
    dc[set].way[minway].tagaddr = tagaddr;
    dc[set].way[minway].tagaddr = tagaddr;
    for (i = 0; i < config.dc.nways; i++)
    for (i = 0; i < config.dc.nways; i++)
      if (dc[set].way[i].lru)
      if (dc[set].way[i].lru)
        dc[set].way[i].lru--;
        dc[set].way[i].lru--;
    dc[set].way[minway].lru = config.dc.ustates - 1;
    dc[set].way[minway].lru = config.dc.ustates - 1;
 
    mem_cycles += config.dc.store_missdelay;
  }
  }
}
}
 
 
/* 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:
    - invalidate block if way isn't locked
    - invalidate block if way isn't locked

powered by: WebSVN 2.1.0

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