-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathc_memory.svh
More file actions
71 lines (55 loc) · 2.15 KB
/
c_memory.svh
File metadata and controls
71 lines (55 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class memory extends uvm_object;
bit [pkg_memory::t_mem_data] mem [pkg_memory::t_mem_addr];
pkg_memory::t_byte_addr b_addr;
pkg_memory::t_word word;
`uvm_object_utils(memory)
`uvm_object_new
function void initialize(string path);
$readmemh(path , mem);
endfunction
function void dump(string path);
int file, size;
pkg_memory::t_mem_addr index;
file = $fopen(path, "w");
size = mem.size();
mem.first(index);
$fdisplay(file, "address, data");
for (int i = 0; i < size; i++) begin
$fdisplay(file, $sformatf("%h, %h", index, mem[index]));
if(mem.next(index)) begin
`uvm_error("Next entry in memory cannot be found")
break;
end
end
$fclose(file);
endfunction
function bit [7:0] read_byte(pkg_memory::t_mem_addr addr);
bit [7 :0] data;
if (mem.exists(addr)) begin
word = mem[addr];
b_addr = addr[pkg_memory::BYTE_ADDR-1 : 0];
data = word[b_addr];
`uvm_info($sformatf("Read Byte : Addr[0x%0h], Data[0x%0h]", addr, data), UVM_HIGH)
end else begin
`uvm_error($sformatf("read to uninitialzed addr 0x%0h", addr))
end
return data;
endfunction
function void write_byte(pkg_memory::t_mem_addr addr, pkg_memory::t_word data);
word = mem[addr];
b_addr = addr[pkg_memory::BYTE_ADDR-1 : 0];
word[b_addr] = data[b_addr];
mem[addr] = word;
`uvm_info($sformatf("Write Byte : Addr[0x%0h], Data[0x%0h]", addr, data), UVM_HIGH)
endfunction
function void write(input mem_addr_t addr, mem_data_t data);
mem[addr] = data;
`uvm_info($sformatf("Write word : Addr[0x%0h], Data[0x%0h]", addr, data), UVM_HIGH)
endfunction
function pkg_memory::t_mem_data read(pkg_memory::t_mem_addr addr);
pkg_memory::t_mem_data data;
data = mem[data];
`uvm_info($sformatf("Read word : Addr[0x%0h], Data[0x%0h]", addr, data), UVM_HIGH)
return data;
endfunction
endclass : memory