summaryrefslogtreecommitdiff
path: root/rtl/cache/cache.sv
blob: 6efeb287ea5f1786b92c086be318e11b78c8c0b3 (plain)
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
`include "cache/defs.sv"

module cache
#(parameter TOKEN_AT_RESET=0)
(
	input  logic    clk,
	                rst_n,

	input  word     core_address,
	input  logic    core_read,
	                core_write,
	input  word     core_writedata,
	input  word_be  core_byteenable,
	output logic    core_waitrequest,
	output word     core_readdata,

	//TODO
	//input  /*TODO*/    dbg_address,
	input  logic    dbg_read,
	                dbg_write,
	input  word     dbg_writedata,
	output logic    dbg_waitrequest,
	output word     dbg_readdata,

	input  logic    mem_waitrequest,
	input  line     mem_readdata,
	output word     mem_address,
	output logic    mem_read,
	                mem_write,
	output line     mem_writedata,
	output line_be  mem_byteenable,

	input  logic    in_data_valid,
	input  ring_req in_data,
	output logic    in_data_ready,

	input  logic    out_data_ready,
	output ring_req out_data,
	output logic    out_data_valid,

	input  ring_token in_token,
	input  logic      in_token_valid,

	output ring_token out_token,
	output logic      out_token_valid
);

	//TODO
	assign dbg_waitrequest = 1;

	logic write_data, write_state;
	line data_wr, data_rd;
	addr_tag tag_wr, tag_rd;
	line_state state_wr, state_rd;
	addr_index index_rd, index_wr;

	cache_sram sram
	(
		.*
	);

	word cache_mem_address;
	line cache_mem_writedata;
	logic cache_core_waitrequest, cache_mem_waitrequest, cache_mem_read, cache_mem_write;

	cache_control #(.TOKEN_AT_RESET(TOKEN_AT_RESET)) control
	(
		.core_read(cache_core_read),
		.core_write(cache_core_write),
		.core_waitrequest(cache_core_waitrequest),
		.mem_waitrequest(cache_mem_waitrequest),
		.mem_address(cache_mem_address),
		.mem_writedata(cache_mem_writedata),
		.mem_read(cache_mem_read),
		.mem_write(cache_mem_write),
		.*
	);

	line core_readdata_line;
	logic cache_core_read, cache_core_write;
	addr_tag core_tag;
	addr_index core_index;
	addr_offset core_offset;

	cache_routing routing
	(
		.*
	);

	line core_writedata_line, core_data_wr;
	line_be core_byteenable_line;

	cache_offsets offsets
	(
		.*
	);

endmodule