-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHIP.v
127 lines (116 loc) · 3.23 KB
/
CHIP.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
117
118
119
120
121
122
123
124
125
126
127
// Top module of your design, you cannot modify this module!!
`include "./RISCV_hasHazard.v"
`include "./FORWARDING_UNIT.v"
`include "./HAZARD_DETECTION_UNIT.v"
`include "./cache_dm.v"
`include "./cache_ro.v"
module CHIP ( clk,
rst_n,
//----------for slow_memD------------
mem_read_D,
mem_write_D,
mem_addr_D,
mem_wdata_D,
mem_rdata_D,
mem_ready_D,
//----------for slow_memI------------
mem_read_I,
mem_write_I,
mem_addr_I,
mem_wdata_I,
mem_rdata_I,
mem_ready_I,
//----------for TestBed--------------
DCACHE_addr,
DCACHE_wdata,
DCACHE_wen
);
input clk, rst_n;
//--------------------------
output mem_read_D;
output mem_write_D;
output [31:4] mem_addr_D;
output [127:0] mem_wdata_D;
input [127:0] mem_rdata_D;
input mem_ready_D;
//--------------------------
output mem_read_I;
output mem_write_I;
output [31:4] mem_addr_I;
output [127:0] mem_wdata_I;
input [127:0] mem_rdata_I;
input mem_ready_I;
//----------for TestBed--------------
output [29:0] DCACHE_addr;
output [31:0] DCACHE_wdata;
output DCACHE_wen;
//--------------------------
// wire declaration
wire ICACHE_ren;
wire ICACHE_wen;
wire [29:0] ICACHE_addr; //RVC
wire [31:0] ICACHE_wdata;
wire ICACHE_stall;
wire [31:0] ICACHE_rdata;
//wire ICACHE_pcadd; //RVC
wire DCACHE_ren;
wire DCACHE_wen;
wire [29:0] DCACHE_addr;
wire [31:0] DCACHE_wdata;
wire DCACHE_stall;
wire [31:0] DCACHE_rdata;
//=========================================
// Note that the overall design of your RISCV includes:
// 1. pipelined RISCV processor
// 2. data cache
// 3. instruction cache
RISCV_Pipeline i_RISCV(
// control interface
.clk (clk) ,
.rst_n (rst_n) ,
//----------I cache interface-------
.ICACHE_ren (ICACHE_ren) ,
.ICACHE_addr (ICACHE_addr) ,
.ICACHE_stall (ICACHE_stall) ,
.ICACHE_rdata (ICACHE_rdata) ,
//.ICACHE_pcadd (ICACHE_pcadd) , //RVC
//----------D cache interface-------
.DCACHE_ren (DCACHE_ren) ,
.DCACHE_wen (DCACHE_wen) ,
.DCACHE_addr (DCACHE_addr) ,
.DCACHE_wdata (DCACHE_wdata) ,
.DCACHE_stall (DCACHE_stall) ,
.DCACHE_rdata (DCACHE_rdata)
);
cache D_cache(
.clk (clk) ,
.proc_reset (~rst_n) ,
.proc_read (DCACHE_ren) ,
.proc_write (DCACHE_wen) ,
.proc_addr (DCACHE_addr) ,
.proc_rdata (DCACHE_rdata),
.proc_wdata (DCACHE_wdata),
.proc_stall (DCACHE_stall),
.mem_read (mem_read_D) ,
.mem_write (mem_write_D) ,
.mem_addr (mem_addr_D) ,
.mem_wdata (mem_wdata_D) ,
.mem_rdata (mem_rdata_D) ,
.mem_ready (mem_ready_D)
);
cache_read_only I_cache(
.clk (clk) ,
.proc_reset (~rst_n) ,
.proc_read (ICACHE_ren) ,
.proc_addr (ICACHE_addr) ,
.proc_rdata (ICACHE_rdata),
.proc_stall (ICACHE_stall),
.mem_read (mem_read_I) ,
.mem_write (mem_write_I) ,
.mem_addr (mem_addr_I) ,
.mem_wdata (mem_wdata_I) ,
.mem_rdata (mem_rdata_I) ,
.mem_ready (mem_ready_I)
//.proc_pcadd (ICACHE_pcadd) //RVC
);
endmodule