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

Subversion Repositories sxp

[/] [sxp/] [trunk/] [csim/] [memory/] [memory.cc] - Blame information for rev 59

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 samg
#include <iostream.h>
2
#include <fstream.h>
3
#include <stdio.h>
4
#include <stdlib.h>
5
 
6
class memory
7
{
8
  public:
9
    memory(unsigned number);
10
    void write_mem (unsigned addr, unsigned data, bool data_vld);
11
    unsigned read_mem (unsigned addr);
12
    bool valid_mem (unsigned addr);
13
    bool load_data (char file_name[256]);
14
    void print_mem ();
15
    ~memory();
16
  protected:
17
    bool *valid;
18
    unsigned *mem;
19
    unsigned size;
20
};
21
 
22
memory::memory(unsigned number)
23
{
24
  cout << "Begin Memory Init, size = " << number << "\n";
25
  size = number;
26
  valid = new bool[number];
27
  mem = new unsigned[number];
28
 
29
  for (unsigned i=0;i<number;i += 1)
30
    valid[i] = false;
31
  cout << "End Memory Init\n";
32
  return;
33
}
34
 
35
void memory::write_mem (unsigned addr, unsigned data, bool data_vld)
36
{
37
  if(addr >= size) {
38
    cout << "Invalid write address, addr = " << addr << ", max = " << size-1 << ".\n";
39
    // throw an exception
40
    return;
41
  }
42
  else {
43
    valid[addr] = data_vld;
44
    mem[addr] = data;
45
  }
46
  return;
47
}
48
 
49
unsigned memory::read_mem (unsigned addr)
50
{
51
  if(addr >= size) {
52
    cout << "Invalid read address, addr = " << addr << ", max = " << size-1 << ".\n";
53
    // throw an exception
54
    return (0);
55
  }
56
  else
57
    if (valid[addr] == false) {
58
      return (0);
59
      // generate exception
60
    }
61
    else
62
      return (mem[addr]);
63
}
64
 
65
bool memory::valid_mem (unsigned addr)
66
{
67
  if(addr >= size)
68
    return (false);
69
  else {
70
    return (valid[addr]);
71
  }
72
}
73
 
74
bool memory::load_data (char file_name[256])
75
{
76
  FILE *f;
77
  unsigned faddr;
78
  unsigned data;
79
  char rline[81];
80
  char xline[81];
81
  faddr = 0;
82
  f = fopen(file_name,"r");
83
  while (!feof(f)){
84
    fgets (rline,20,f);
85
    sprintf (xline,"0x%s",rline);
86
    sscanf(xline,"%x",&data);
87
    write_mem(faddr,data,true);
88
    faddr += 1;
89
  }
90
  fclose(f);
91
  return (true);
92
}
93
 
94
void memory::print_mem()
95
{
96
  for (unsigned i=0;i<size;i+=1)
97
    if (valid_mem(i))
98
      printf("memory location %.8x = %.8x\n",i,read_mem(i));
99
}
100
 
101
memory::~memory()
102
{
103
  delete [] mem;
104
  delete [] valid;
105
}
106
 
107
/*
108
 *  $Id: memory.cc,v 1.1 2001-10-27 23:58:29 samg Exp $
109
 *  Program  : memory.cc
110
 *  Author   : Sam Gladstone
111
 *  Function : memory behavioral class for SXP processor
112
 *  $Log: not supported by cvs2svn $
113
 */
114
 

powered by: WebSVN 2.1.0

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