OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [rtl/] [soc/] [cpu_if.v] - Blame information for rev 27

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 ultra_embe
 
2
//-----------------------------------------------------------------
3
// Module:
4
//-----------------------------------------------------------------
5
module cpu_if
6
(
7
    // General - Clocking & Reset
8
    clk_i,
9
    rst_i,
10
 
11
    // Instruction Memory 0 (0x10000000 - 0x10FFFFFF)
12
    imem0_addr_o,
13
    imem0_rd_o,
14
    imem0_burst_o,
15
    imem0_data_in_i,
16
    imem0_accept_i,
17
    imem0_ack_i,
18
 
19
    // Data Memory 0 (0x10000000 - 0x10FFFFFF)
20
    dmem0_addr_o,
21
    dmem0_data_o,
22
    dmem0_data_i,
23
    dmem0_wr_o,
24
    dmem0_rd_o,
25
    dmem0_burst_o,
26
    dmem0_accept_i,
27
    dmem0_ack_i,
28
    // Data Memory 1 (0x11000000 - 0x11FFFFFF)
29
    dmem1_addr_o,
30
    dmem1_data_o,
31
    dmem1_data_i,
32
    dmem1_wr_o,
33
    dmem1_rd_o,
34
    dmem1_burst_o,
35
    dmem1_accept_i,
36
    dmem1_ack_i,
37
    // Data Memory 2 (0x12000000 - 0x12FFFFFF)
38
    dmem2_addr_o,
39
    dmem2_data_o,
40
    dmem2_data_i,
41
    dmem2_wr_o,
42
    dmem2_rd_o,
43
    dmem2_burst_o,
44
    dmem2_accept_i,
45
    dmem2_ack_i,
46
 
47
    fault_o,
48
    break_o,
49
    intr_i,
50
    nmi_i
51
);
52
 
53
//-----------------------------------------------------------------
54
// Params
55
//-----------------------------------------------------------------
56
parameter  [31:0]   CLK_KHZ              = 12288;
57
parameter           ENABLE_ICACHE        = "ENABLED";
58
parameter           ENABLE_DCACHE        = "DISABLED";
59
parameter           BOOT_VECTOR          = 0;
60
parameter           ISR_VECTOR           = 0;
61
parameter           REGISTER_FILE_TYPE   = "SIMULATION";
62
 
63
//-----------------------------------------------------------------
64
// I/O
65
//-----------------------------------------------------------------
66
input               clk_i /*verilator public*/;
67
input               rst_i /*verilator public*/;
68
 
69
// Instruction Memory 0 (0x10000000 - 0x10FFFFFF)
70
output [31:0]       imem0_addr_o /*verilator public*/;
71
output              imem0_rd_o /*verilator public*/;
72
output              imem0_burst_o /*verilator public*/;
73
input [31:0]        imem0_data_in_i /*verilator public*/;
74
input               imem0_accept_i /*verilator public*/;
75
input               imem0_ack_i /*verilator public*/;
76
 
77
// Data Memory 0 (0x10000000 - 0x10FFFFFF)
78
output [31:0]       dmem0_addr_o /*verilator public*/;
79
output [31:0]       dmem0_data_o /*verilator public*/;
80
input [31:0]        dmem0_data_i /*verilator public*/;
81
output [3:0]        dmem0_wr_o /*verilator public*/;
82
output              dmem0_rd_o /*verilator public*/;
83
output              dmem0_burst_o /*verilator public*/;
84
input               dmem0_accept_i /*verilator public*/;
85
input               dmem0_ack_i /*verilator public*/;
86
// Data Memory 1 (0x11000000 - 0x11FFFFFF)
87
output [31:0]       dmem1_addr_o /*verilator public*/;
88
output [31:0]       dmem1_data_o /*verilator public*/;
89
input [31:0]        dmem1_data_i /*verilator public*/;
90
output [3:0]        dmem1_wr_o /*verilator public*/;
91
output              dmem1_rd_o /*verilator public*/;
92
output              dmem1_burst_o /*verilator public*/;
93
input               dmem1_accept_i /*verilator public*/;
94
input               dmem1_ack_i /*verilator public*/;
95
// Data Memory 2 (0x12000000 - 0x12FFFFFF)
96
output [31:0]       dmem2_addr_o /*verilator public*/;
97
output [31:0]       dmem2_data_o /*verilator public*/;
98
input [31:0]        dmem2_data_i /*verilator public*/;
99
output [3:0]        dmem2_wr_o /*verilator public*/;
100
output              dmem2_rd_o /*verilator public*/;
101
output              dmem2_burst_o /*verilator public*/;
102
input               dmem2_accept_i /*verilator public*/;
103
input               dmem2_ack_i /*verilator public*/;
104
 
105
output              fault_o /*verilator public*/;
106
output              break_o /*verilator public*/;
107
input               nmi_i /*verilator public*/;
108
input               intr_i /*verilator public*/;
109
 
110
//-----------------------------------------------------------------
111
// Registers
112
//-----------------------------------------------------------------
113
wire [31:0]         cpu_address;
114
wire [3:0]          cpu_wr;
115
wire                cpu_rd;
116
wire                cpu_burst;
117
wire [31:0]         cpu_data_w;
118
wire [31:0]         cpu_data_r;
119
wire                cpu_accept;
120
wire                cpu_ack;
121
 
122
wire [31:0]         imem_address;
123
wire [31:0]         imem_data;
124
wire                imem_rd;
125
wire                imem_burst;
126
wire                imem_ack;
127
wire                imem_accept;
128
 
129
//-----------------------------------------------------------------
130
// CPU core
131
//-----------------------------------------------------------------
132
cpu
133
#(
134
    .BOOT_VECTOR(BOOT_VECTOR),
135
    .ISR_VECTOR(ISR_VECTOR),
136
    .REGISTER_FILE_TYPE(REGISTER_FILE_TYPE),
137
    .ENABLE_ICACHE(ENABLE_ICACHE),
138
    .ENABLE_DCACHE(ENABLE_DCACHE)
139
)
140
u1_cpu
141
(
142
    .clk_i(clk_i),
143
    .rst_i(rst_i),
144
 
145
    .intr_i(intr_i),
146
    .nmi_i(nmi_i),
147
 
148
    // Status
149
    .fault_o(fault_o),
150
    .break_o(break_o),
151
 
152
    // Instruction memory
153
    .imem_addr_o(imem_address),
154
    .imem_rd_o(imem_rd),
155
    .imem_burst_o(imem_burst),
156
    .imem_data_in_i(imem_data),
157
    .imem_accept_i(imem_accept),
158
    .imem_ack_i(imem_ack),
159
 
160
    // Data memory
161
    .dmem_addr_o(cpu_address),
162
    .dmem_data_out_o(cpu_data_w),
163
    .dmem_data_in_i(cpu_data_r),
164
    .dmem_wr_o(cpu_wr),
165
    .dmem_rd_o(cpu_rd),
166
    .dmem_burst_o(cpu_burst),
167
    .dmem_accept_i(cpu_accept),
168
    .dmem_ack_i(cpu_ack)
169
);
170
 
171
//-----------------------------------------------------------------
172
// Instruction Memory MUX
173
//-----------------------------------------------------------------
174
 
175
assign imem0_addr_o     = imem_address;
176
assign imem0_rd_o       = imem_rd;
177
assign imem0_burst_o    = imem_burst;
178
assign imem_data        = imem0_data_in_i;
179
assign imem_accept      = imem0_accept_i;
180
assign imem_ack         = imem0_ack_i;
181
 
182
 
183
//-----------------------------------------------------------------
184
// Data Memory MUX
185
//-----------------------------------------------------------------
186
dmem_mux3
187
#(
188
    .ADDR_MUX_START(24)
189
)
190
u_dmux
191
(
192
    // Outputs
193
    // 0x10000000 - 0x10FFFFFF
194
    .out0_addr_o(dmem0_addr_o),
195
    .out0_data_o(dmem0_data_o),
196
    .out0_data_i(dmem0_data_i),
197
    .out0_wr_o(dmem0_wr_o),
198
    .out0_rd_o(dmem0_rd_o),
199
    .out0_burst_o(dmem0_burst_o),
200
    .out0_ack_i(dmem0_ack_i),
201
    .out0_accept_i(dmem0_accept_i),
202
    // 0x11000000 - 0x11FFFFFF
203
    .out1_addr_o(dmem1_addr_o),
204
    .out1_data_o(dmem1_data_o),
205
    .out1_data_i(dmem1_data_i),
206
    .out1_wr_o(dmem1_wr_o),
207
    .out1_rd_o(dmem1_rd_o),
208
    .out1_burst_o(dmem1_burst_o),
209
    .out1_ack_i(dmem1_ack_i),
210
    .out1_accept_i(dmem1_accept_i),
211
    // 0x12000000 - 0x12FFFFFF
212
    .out2_addr_o(dmem2_addr_o),
213
    .out2_data_o(dmem2_data_o),
214
    .out2_data_i(dmem2_data_i),
215
    .out2_wr_o(dmem2_wr_o),
216
    .out2_rd_o(dmem2_rd_o),
217
    .out2_burst_o(dmem2_burst_o),
218
    .out2_ack_i(dmem2_ack_i),
219
    .out2_accept_i(dmem2_accept_i),
220
 
221
    // Input - CPU core bus
222
    .mem_addr_i(cpu_address),
223
    .mem_data_i(cpu_data_w),
224
    .mem_data_o(cpu_data_r),
225
    .mem_wr_i(cpu_wr),
226
    .mem_rd_i(cpu_rd),
227
    .mem_burst_i(cpu_burst),
228
    .mem_ack_o(cpu_ack),
229
    .mem_accept_o(cpu_accept)
230
);
231
 
232
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.