forked from ngwilliams/WISC-SP13
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmem_system.v
116 lines (99 loc) · 2.6 KB
/
mem_system.v
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/* $Author: karu $ */
/* $LastChangedDate: 2009-04-24 09:28:13 -0500 (Fri, 24 Apr 2009) $ */
/* $Rev: 77 $ */
module mem_system(/*AUTOARG*/
// Outputs
DataOut, Done, Stall, CacheHit, err,
// Inputs
Addr, DataIn, Rd, Wr, createdump, clk, rst,valid
);
input [15:0] Addr;
input [15:0] DataIn;
input Rd;
input Wr;
input createdump;
input clk;
input rst;
output [15:0] DataOut;
output Done;
output Stall;
output CacheHit;
output err;
output valid;
/* data_mem = 1, inst_mem = 0 *
* needed for cache parameter */
parameter mem_type = 0;
wire cache_ctrl_over;
wire [1:0] cache_offset;
wire [4:0] cache_tag_out;
wire cache_err;
wire cache_wr;
wire hit;
wire valid;
wire dirty;
wire comp;
wire [1:0] mem_offset;
wire mem_addr_sel;
wire [15:0] mem_data_out;
wire mem_stall;
wire [3:0] mem_busy;
wire mem_rd;
wire mem_wr;
wire mem_err;
four_bank_mem m0(
.clk(clk),
.rst(rst),
.createdump(createdump),
.addr(mem_addr_sel ?
{Addr[15:3], mem_offset, 1'b0}
: {cache_tag_out, Addr[10:3], mem_offset, 1'b0} ),
.data_in(DataOut),
.wr(mem_wr),
.rd(mem_rd),
.data_out(mem_data_out),
.stall(mem_stall),
.busy(mem_busy),
.err(mem_err)
);
cache_2way #(0 + mem_type) c0(
.enable(Wr | Rd),
.clk(clk),
.rst(rst),
.createdump(createdump),
.tag_in(Addr[15:11]),
.index(Addr[10:3]),
.offset(cache_ctrl_over ? {cache_offset, 1'b0} : Addr[2:0]),
.data_in(cache_ctrl_over ? mem_data_out : DataIn),
.comp(comp),
.write(cache_ctrl_over ? cache_wr : Wr),
.valid_in(1'b1),
.tag_out(cache_tag_out),
.data_out(DataOut),
.hit(hit),
.dirty(dirty),
.valid(valid),
.err(cache_err)
);
mem_system_ctrl ctrl0(
.clk(clk),
.rst(rst),
.wr(Wr),
.rd(Rd),
.hit(hit & valid),
.dirty(dirty),
.cache_ctrl_over(cache_ctrl_over),
.cache_offset(cache_offset),
.comp(comp),
.cache_wr(cache_wr),
.mem_addr_sel(mem_addr_sel),
.mem_offset(mem_offset),
.stall(Stall),
.mem_wr(mem_wr),
.mem_rd(mem_rd),
.done(Done),
.cache_hit(CacheHit),
.err(ctrl_err)
);
assign err = cache_err | mem_err | ctrl_err | mem_stall;
endmodule // mem_system
// DUMMY LINE FOR REV CONTROL :9: