36 |
*/ |
*/ |
37 |
class cache : public circuit { |
class cache : public circuit { |
38 |
private: |
private: |
39 |
|
const unsigned int mem_size; |
40 |
vector<bit_word> mem; |
vector<bit_word> mem; |
41 |
|
|
42 |
public: |
public: |
43 |
enum mode { wr, rd }; |
enum mode { wr, rd }; |
44 |
|
enum size { byte, ubyte, half, uhalf, word }; |
45 |
|
|
46 |
cache() // 64*4*1024 = 256K |
cache() // 64*4*1024 = 256K |
47 |
: circuit(2, 1), mem(64*1024) {}; |
: circuit(2, 1), mem_size(64 * 1024), |
48 |
|
mem(mem_size) {}; |
49 |
|
|
50 |
void process( mode m = rd ){ |
void process( mode m = rd, size s = word ); |
|
// mode: 0 - rd, 1 - write |
|
|
unsigned long addr = (get_in(1)).b(); |
|
|
|
|
|
if (m == rd) |
|
|
set_out(0 , mem[ addr/4 ] ); |
|
|
else |
|
|
mem[ addr/4 ] = get_in( 1 ); |
|
|
} |
|
51 |
}; |
}; |
52 |
|
|
53 |
#endif |
#endif |