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

Subversion Repositories or1k

[/] [or1k/] [branches/] [branch_speed_opt/] [or1200/] [rtl/] [verilog/] [or1200_top.v] - Blame information for rev 589

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

Line No. Rev Author Line
1 504 lampret
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  OR1200 Top Level                                            ////
4
////                                                              ////
5
////  This file is part of the OpenRISC 1200 project              ////
6
////  http://www.opencores.org/cores/or1k/                        ////
7
////                                                              ////
8
////  Description                                                 ////
9
////  OR1200 Top Level                                            ////
10
////                                                              ////
11
////  To Do:                                                      ////
12
////   - make it smaller and faster                               ////
13
////                                                              ////
14
////  Author(s):                                                  ////
15
////      - Damjan Lampret, lampret@opencores.org                 ////
16
////                                                              ////
17
//////////////////////////////////////////////////////////////////////
18
////                                                              ////
19
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
20
////                                                              ////
21
//// This source file may be used and distributed without         ////
22
//// restriction provided that this copyright statement is not    ////
23
//// removed from the file and that any derivative work contains  ////
24
//// the original copyright notice and the associated disclaimer. ////
25
////                                                              ////
26
//// This source file is free software; you can redistribute it   ////
27
//// and/or modify it under the terms of the GNU Lesser General   ////
28
//// Public License as published by the Free Software Foundation; ////
29
//// either version 2.1 of the License, or (at your option) any   ////
30
//// later version.                                               ////
31
////                                                              ////
32
//// This source is distributed in the hope that it will be       ////
33
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
34
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
35
//// PURPOSE.  See the GNU Lesser General Public License for more ////
36
//// details.                                                     ////
37
////                                                              ////
38
//// You should have received a copy of the GNU Lesser General    ////
39
//// Public License along with this source; if not, download it   ////
40
//// from http://www.opencores.org/lgpl.shtml                     ////
41
////                                                              ////
42
//////////////////////////////////////////////////////////////////////
43
//
44
// CVS Revision History
45
//
46
// $Log: not supported by cvs2svn $
47 589 lampret
// Revision 1.1  2002/01/03 08:16:15  lampret
48
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
49
//
50 504 lampret
// Revision 1.13  2001/11/23 08:38:51  lampret
51
// Changed DSR/DRR behavior and exception detection.
52
//
53
// Revision 1.12  2001/11/20 00:57:22  lampret
54
// Fixed width of du_except.
55
//
56
// Revision 1.11  2001/11/18 08:36:28  lampret
57
// For GDB changed single stepping and disabled trap exception.
58
//
59
// Revision 1.10  2001/10/21 17:57:16  lampret
60
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
61
//
62
// Revision 1.9  2001/10/14 13:12:10  lampret
63
// MP3 version.
64
//
65
// Revision 1.1.1.1  2001/10/06 10:18:35  igorm
66
// no message
67
//
68
// Revision 1.4  2001/08/13 03:36:20  lampret
69
// Added cfg regs. Moved all defines into one defines.v file. More cleanup.
70
//
71
// Revision 1.3  2001/08/09 13:39:33  lampret
72
// Major clean-up.
73
//
74
// Revision 1.2  2001/07/22 03:31:54  lampret
75
// Fixed RAM's oen bug. Cache bypass under development.
76
//
77
// Revision 1.1  2001/07/20 00:46:21  lampret
78
// Development version of RTL. Libraries are missing.
79
//
80
//
81
 
82
// synopsys translate_off
83
`include "timescale.v"
84
// synopsys translate_on
85
`include "or1200_defines.v"
86
 
87
module or1200_top(
88
        // System
89
        clk_i, rst_i, pic_ints_i, clmode_i,
90
 
91
        // Instruction WISHBONE INTERFACE
92
        iwb_clk_i, iwb_rst_i, iwb_ack_i, iwb_err_i, iwb_rty_i, iwb_dat_i,
93
        iwb_cyc_o, iwb_adr_o, iwb_stb_o, iwb_we_o, iwb_sel_o, iwb_cab_o, iwb_dat_o,
94
 
95
        // Data WISHBONE INTERFACE
96
        dwb_clk_i, dwb_rst_i, dwb_ack_i, dwb_err_i, dwb_rty_i, dwb_dat_i,
97
        dwb_cyc_o, dwb_adr_o, dwb_stb_o, dwb_we_o, dwb_sel_o, dwb_cab_o, dwb_dat_o,
98
 
99
        // External Debug Interface
100
        dbg_stall_i, dbg_dat_i, dbg_adr_i, dbg_op_i, dbg_ewt_i,
101
        dbg_lss_o, dbg_is_o, dbg_wp_o, dbg_bp_o, dbg_dat_o,
102
 
103
        // Power Management
104
        pm_cpustall_i,
105
        pm_clksd_o, pm_dc_gate_o, pm_ic_gate_o, pm_dmmu_gate_o,
106
        pm_immu_gate_o, pm_tt_gate_o, pm_cpu_gate_o, pm_wakeup_o, pm_lvolt_o
107
 
108
);
109
 
110
parameter dw = `OR1200_OPERAND_WIDTH;
111
parameter aw = `OR1200_OPERAND_WIDTH;
112
parameter ppic_ints = `OR1200_PIC_INTS;
113
 
114
//
115
// I/O
116
//
117
 
118
//
119
// System
120
//
121
input                   clk_i;
122
input                   rst_i;
123
input   [1:0]            clmode_i;       // 00 WB=RISC, 01 WB=RISC/2, 10 N/A, 11 WB=RISC/4
124
input   [ppic_ints-1:0]  pic_ints_i;
125
 
126
//
127
// Instruction WISHBONE interface
128
//
129
input                   iwb_clk_i;      // clock input
130
input                   iwb_rst_i;      // reset input
131
input                   iwb_ack_i;      // normal termination
132
input                   iwb_err_i;      // termination w/ error
133
input                   iwb_rty_i;      // termination w/ retry
134
input   [dw-1:0] iwb_dat_i;      // input data bus
135
output                  iwb_cyc_o;      // cycle valid output
136
output  [aw-1:0] iwb_adr_o;      // address bus outputs
137
output                  iwb_stb_o;      // strobe output
138
output                  iwb_we_o;       // indicates write transfer
139
output  [3:0]            iwb_sel_o;      // byte select outputs
140
output                  iwb_cab_o;      // indicates consecutive address burst
141
output  [dw-1:0] iwb_dat_o;      // output data bus
142
 
143
//
144
// Data WISHBONE interface
145
//
146
input                   dwb_clk_i;      // clock input
147
input                   dwb_rst_i;      // reset input
148
input                   dwb_ack_i;      // normal termination
149
input                   dwb_err_i;      // termination w/ error
150
input                   dwb_rty_i;      // termination w/ retry
151
input   [dw-1:0] dwb_dat_i;      // input data bus
152
output                  dwb_cyc_o;      // cycle valid output
153
output  [aw-1:0] dwb_adr_o;      // address bus outputs
154
output                  dwb_stb_o;      // strobe output
155
output                  dwb_we_o;       // indicates write transfer
156
output  [3:0]            dwb_sel_o;      // byte select outputs
157
output                  dwb_cab_o;      // indicates consecutive address burst
158
output  [dw-1:0] dwb_dat_o;      // output data bus
159
 
160
//
161
// External Debug Interface
162
//
163
input                   dbg_stall_i;    // External Stall Input
164
input   [dw-1:0] dbg_dat_i;      // External Data Input
165
input   [aw-1:0] dbg_adr_i;      // External Address Input
166
input   [2:0]            dbg_op_i;       // External Operation Select Input
167
input                   dbg_ewt_i;      // External Watchpoint Trigger Input
168
output  [3:0]            dbg_lss_o;      // External Load/Store Unit Status
169
output  [1:0]            dbg_is_o;       // External Insn Fetch Status
170
output  [10:0]           dbg_wp_o;       // Watchpoints Outputs
171
output                  dbg_bp_o;       // Breakpoint Output
172
output  [dw-1:0] dbg_dat_o;      // External Data Output
173
 
174
//
175
// Power Management
176
//
177
input                   pm_cpustall_i;
178
output  [3:0]            pm_clksd_o;
179
output                  pm_dc_gate_o;
180
output                  pm_ic_gate_o;
181
output                  pm_dmmu_gate_o;
182
output                  pm_immu_gate_o;
183
output                  pm_tt_gate_o;
184
output                  pm_cpu_gate_o;
185
output                  pm_wakeup_o;
186
output                  pm_lvolt_o;
187
 
188
 
189
//
190
// Internal wires and regs
191
//
192
 
193
//
194
// DC to BIU
195
//
196
wire    [dw-1:0] dcbiu_dat_dc;
197
wire    [aw-1:0] dcbiu_adr_dc;
198
wire                    dcbiu_cyc_dc;
199
wire                    dcbiu_stb_dc;
200
wire                    dcbiu_we_dc;
201
wire    [3:0]            dcbiu_sel_dc;
202
wire    [3:0]            dcbiu_tag_dc;
203
wire    [dw-1:0] dcbiu_dat_biu;
204
wire                    dcbiu_ack_biu;
205
wire                    dcbiu_err_biu;
206
wire    [3:0]            dcbiu_tag_biu;
207
 
208
//
209
// IC to BIU
210
//
211
wire    [dw-1:0] icbiu_dat_ic;
212
wire    [aw-1:0] icbiu_adr_ic;
213
wire                    icbiu_cyc_ic;
214
wire                    icbiu_stb_ic;
215
wire                    icbiu_we_ic;
216
wire    [3:0]            icbiu_sel_ic;
217
wire    [3:0]            icbiu_tag_ic;
218
wire    [dw-1:0] icbiu_dat_biu;
219
wire                    icbiu_ack_biu;
220
wire                    icbiu_err_biu;
221
wire    [3:0]            icbiu_tag_biu;
222
 
223
//
224
// CPU's SPR access to various RISC units (shared wires)
225
//
226
wire                    supv;
227
wire    [aw-1:0] spr_addr;
228
wire    [dw-1:0] spr_dat_cpu;
229
wire    [31:0]           spr_cs;
230
wire                    spr_we;
231
 
232
//
233
// DMMU and CPU
234
//
235
wire                    dmmu_en;
236
wire    [31:0]           spr_dat_dmmu;
237
 
238
//
239
// DMMU and DC
240
//
241
wire                    dcdmmu_err_dc;
242
wire    [3:0]            dcdmmu_tag_dc;
243
wire    [aw-1:0] dcdmmu_adr_dmmu;
244
wire                    dcdmmu_cyc_dmmu;
245
wire                    dcdmmu_stb_dmmu;
246
wire                    dcdmmu_ci_dmmu;
247
 
248
//
249
// CPU and data memory subsystem
250
//
251
wire                    dc_en;
252
wire    [31:0]           dcpu_adr_cpu;
253
wire                    dcpu_we_cpu;
254
wire    [3:0]            dcpu_sel_cpu;
255
wire    [3:0]            dcpu_tag_cpu;
256
wire    [31:0]           dcpu_dat_cpu;
257
wire    [31:0]           dcpu_dat_dc;
258
wire                    dcpu_ack_dc;
259
wire                    dcpu_rty_dc;
260
wire                    dcpu_err_dmmu;
261
wire    [3:0]            dcpu_tag_dmmu;
262
 
263
//
264
// IMMU and CPU
265
//
266
wire                    immu_en;
267
wire    [31:0]           spr_dat_immu;
268
 
269
//
270
// CPU and insn memory subsystem
271
//
272
wire                    ic_en;
273
wire    [31:0]           icpu_adr_cpu;
274
wire                    icpu_cyc_cpu;
275
wire                    icpu_stb_cpu;
276
wire                    icpu_we_cpu;
277
wire    [3:0]            icpu_sel_cpu;
278
wire    [3:0]            icpu_tag_cpu;
279
wire    [31:0]           icpu_dat_ic;
280
wire                    icpu_ack_ic;
281
wire                    icpu_rty_ic;
282
wire    [31:0]           icpu_adr_immu;
283
wire                    icpu_err_immu;
284
wire    [3:0]            icpu_tag_immu;
285
 
286
//
287
// IMMU and IC
288
//
289
wire    [aw-1:0] icimmu_adr_immu;
290
wire                    icimmu_err_ic;
291
wire    [3:0]            icimmu_tag_ic;
292
wire                    icimmu_cyc_immu;
293
wire                    icimmu_stb_immu;
294
wire                    icimmu_ci_immu;
295
 
296
//
297
// Connection between CPU and PIC
298
//
299
wire    [dw-1:0] spr_dat_pic;
300
wire                    pic_wakeup;
301 589 lampret
wire                    sig_int;
302 504 lampret
 
303
//
304
// Connection between CPU and PM
305
//
306
wire    [dw-1:0] spr_dat_pm;
307
 
308
//
309
// CPU and TT
310
//
311
wire    [dw-1:0] spr_dat_tt;
312 589 lampret
wire                    sig_tick;
313 504 lampret
 
314
//
315
// Debug port and caches/MMUs
316
//
317
wire    [dw-1:0] spr_dat_du;
318
wire                    du_stall;
319
wire    [dw-1:0] du_addr;
320
wire    [dw-1:0] du_dat_du;
321
wire                    du_read;
322
wire                    du_write;
323
wire    [12:0]           du_except;
324
wire    [`OR1200_DU_DSR_WIDTH-1:0]     du_dsr;
325
 
326
 
327
wire                    ex_freeze;
328
wire    [31:0]           ex_insn;
329
wire    [`OR1200_BRANCHOP_WIDTH-1:0]     branch_op;
330
 
331
//
332
// Instantiation of Instruction WISHBONE BIU
333
//
334
or1200_wb_biu iwb_biu(
335
        // RISC clk, rst and clock control
336
        .clk(clk_i),
337
        .rst(rst_i),
338
        .clmode(clmode_i),
339
 
340
        // WISHBONE interface
341
        .wb_clk_i(iwb_clk_i),
342
        .wb_rst_i(iwb_rst_i),
343
        .wb_ack_i(iwb_ack_i),
344
        .wb_err_i(iwb_err_i),
345
        .wb_rty_i(iwb_rty_i),
346
        .wb_dat_i(iwb_dat_i),
347
        .wb_cyc_o(iwb_cyc_o),
348
        .wb_adr_o(iwb_adr_o),
349
        .wb_stb_o(iwb_stb_o),
350
        .wb_we_o(iwb_we_o),
351
        .wb_sel_o(iwb_sel_o),
352
        .wb_cab_o(iwb_cab_o),
353
        .wb_dat_o(iwb_dat_o),
354
 
355
        // Internal RISC bus
356
        .biu_dat_i(icbiu_dat_ic),
357
        .biu_adr_i(icbiu_adr_ic),
358
        .biu_cyc_i(icbiu_cyc_ic),
359
        .biu_stb_i(icbiu_stb_ic),
360
        .biu_we_i(icbiu_we_ic),
361
        .biu_sel_i(icbiu_sel_ic),
362
        .biu_cab_i(icbiu_cab_ic),
363
        .biu_dat_o(icbiu_dat_biu),
364
        .biu_ack_o(icbiu_ack_biu),
365
        .biu_err_o(icbiu_err_biu)
366
);
367
 
368
//
369
// Instantiation of Data WISHBONE BIU
370
//
371
or1200_wb_biu dwb_biu(
372
        // RISC clk, rst and clock control
373
        .clk(clk_i),
374
        .rst(rst_i),
375
        .clmode(clmode_i),
376
 
377
        // WISHBONE interface
378
        .wb_clk_i(dwb_clk_i),
379
        .wb_rst_i(dwb_rst_i),
380
        .wb_ack_i(dwb_ack_i),
381
        .wb_err_i(dwb_err_i),
382
        .wb_rty_i(dwb_rty_i),
383
        .wb_dat_i(dwb_dat_i),
384
        .wb_cyc_o(dwb_cyc_o),
385
        .wb_adr_o(dwb_adr_o),
386
        .wb_stb_o(dwb_stb_o),
387
        .wb_we_o(dwb_we_o),
388
        .wb_sel_o(dwb_sel_o),
389
        .wb_cab_o(dwb_cab_o),
390
        .wb_dat_o(dwb_dat_o),
391
 
392
        // Internal RISC bus
393
        .biu_dat_i(dcbiu_dat_dc),
394
        .biu_adr_i(dcbiu_adr_dc),
395
        .biu_cyc_i(dcbiu_cyc_dc),
396
        .biu_stb_i(dcbiu_stb_dc),
397
        .biu_we_i(dcbiu_we_dc),
398
        .biu_sel_i(dcbiu_sel_dc),
399
        .biu_cab_i(dcbiu_cab_dc),
400
        .biu_dat_o(dcbiu_dat_biu),
401
        .biu_ack_o(dcbiu_ack_biu),
402
        .biu_err_o(dcbiu_err_biu)
403
);
404
 
405
//
406
// Instantiation of IMMU
407
//
408
or1200_immu_top or1200_immu_top(
409
        // Rst and clk
410
        .clk(clk_i),
411
        .rst(rst_i),
412
 
413
        // CPU i/f
414
        .ic_en(ic_en),
415
        .immu_en(immu_en),
416
        .supv(supv),
417
        .icpu_adr_i(icpu_adr_cpu),
418
        .icpu_cyc_i(icpu_cyc_cpu),
419
        .icpu_stb_i(icpu_stb_cpu),
420
        .icpu_adr_o(icpu_adr_immu),
421
        .icpu_tag_o(icpu_tag_immu),
422
        .icpu_err_o(icpu_err_immu),
423
 
424
        // SPR access
425
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IMMU]),
426
        .spr_write(spr_we),
427
        .spr_addr(spr_addr),
428
        .spr_dat_i(spr_dat_cpu),
429
        .spr_dat_o(spr_dat_immu),
430
 
431
        // IC i/f
432
        .icimmu_err_i(icimmu_err_ic),
433
        .icimmu_tag_i(icimmu_tag_ic),
434
        .icimmu_adr_o(icimmu_adr_immu),
435
        .icimmu_cyc_o(icimmu_cyc_immu),
436
        .icimmu_stb_o(icimmu_stb_immu),
437
        .icimmu_ci_o(icimmu_ci_immu)
438
);
439
 
440
//
441
// Instantiation of Instruction Cache
442
//
443
or1200_ic_top or1200_ic_top(
444
        .clk(clk_i),
445
        .rst(rst_i),
446
 
447
        // IC and CPU/IMMU
448
        .ic_en(ic_en),
449
        .icimmu_adr_i(icimmu_adr_immu),
450
        .icimmu_cyc_i(icimmu_cyc_immu),
451
        .icimmu_stb_i(icimmu_stb_immu),
452
        .icimmu_ci_i(icimmu_ci_immu),
453
        .icpu_we_i(icpu_we_cpu),
454
        .icpu_sel_i(icpu_sel_cpu),
455
        .icpu_tag_i(icpu_tag_cpu),
456
        .icpu_dat_o(icpu_dat_ic),
457
        .icpu_ack_o(icpu_ack_ic),
458
        .icpu_rty_o(icpu_rty_ic),
459
        .icimmu_err_o(icimmu_err_ic),
460
        .icimmu_tag_o(icimmu_tag_ic),
461
 
462
        // SPR access
463
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IC]),
464
        .spr_write(spr_we),
465
        .spr_dat_i(spr_dat_cpu),
466
 
467
        // IC and BIU
468
        .icbiu_dat_o(icbiu_dat_ic),
469
        .icbiu_adr_o(icbiu_adr_ic),
470
        .icbiu_cyc_o(icbiu_cyc_ic),
471
        .icbiu_stb_o(icbiu_stb_ic),
472
        .icbiu_we_o(icbiu_we_ic),
473
        .icbiu_sel_o(icbiu_sel_ic),
474
        .icbiu_cab_o(icbiu_cab_ic),
475
        .icbiu_dat_i(icbiu_dat_biu),
476
        .icbiu_ack_i(icbiu_ack_biu),
477
        .icbiu_err_i(icbiu_err_biu)
478
);
479
 
480
//
481
// Instantiation of Instruction Cache
482
//
483
or1200_cpu or1200_cpu(
484
        .clk(clk_i),
485
        .rst(rst_i),
486
 
487
        // Connection IC and IFETCHER inside CPU
488
        .ic_en(ic_en),
489
        .icpu_adr_o(icpu_adr_cpu),
490
        .icpu_cyc_o(icpu_cyc_cpu),
491
        .icpu_stb_o(icpu_stb_cpu),
492
        .icpu_we_o(icpu_we_cpu),
493
        .icpu_sel_o(icpu_sel_cpu),
494
        .icpu_tag_o(icpu_tag_cpu),
495
        .icpu_dat_i(icpu_dat_ic),
496
        .icpu_ack_i(icpu_ack_ic),
497
        .icpu_rty_i(icpu_rty_ic),
498
        .icpu_adr_i(icpu_adr_immu),
499
        .icpu_err_i(icpu_err_immu),
500
        .icpu_tag_i(icpu_tag_immu),
501
 
502
        // Connection CPU to external Debug port
503
        .ex_freeze(ex_freeze),
504
        .ex_insn(ex_insn),
505
        .branch_op(branch_op),
506
        .du_stall(du_stall),
507
        .du_addr(du_addr),
508
        .du_dat_du(du_dat_du),
509
        .du_read(du_read),
510
        .du_write(du_write),
511
        .du_dsr(du_dsr),
512
        .du_except(du_except),
513
 
514
        // Connection IMMU and CPU internally
515
        .immu_en(immu_en),
516
 
517
        // Connection DC and CPU
518
        .dc_en(dc_en),
519
        .dcpu_adr_o(dcpu_adr_cpu),
520
        .dcpu_cyc_o(dcpu_cyc_cpu),
521
        .dcpu_stb_o(dcpu_stb_cpu),
522
        .dcpu_we_o(dcpu_we_cpu),
523
        .dcpu_sel_o(dcpu_sel_cpu),
524
        .dcpu_tag_o(dcpu_tag_cpu),
525
        .dcpu_dat_o(dcpu_dat_cpu),
526
        .dcpu_dat_i(dcpu_dat_dc),
527
        .dcpu_ack_i(dcpu_ack_dc),
528
        .dcpu_rty_i(dcpu_rty_dc),
529
        .dcpu_err_i(dcpu_err_dmmu),
530
        .dcpu_tag_i(dcpu_tag_dmmu),
531
 
532
        // Connection DMMU and CPU internally
533
        .dmmu_en(dmmu_en),
534
 
535
        // Connection PIC and CPU's EXCEPT
536 589 lampret
        .sig_int(sig_int),
537
        .sig_tick(sig_tick),
538 504 lampret
 
539
        // SPRs
540
        .supv(supv),
541
        .spr_addr(spr_addr),
542
        .spr_dataout(spr_dat_cpu),
543
        .spr_dat_pic(spr_dat_pic),
544
        .spr_dat_tt(spr_dat_tt),
545
        .spr_dat_pm(spr_dat_pm),
546
        .spr_dat_dmmu(spr_dat_dmmu),
547
        .spr_dat_immu(spr_dat_immu),
548
        .spr_dat_du(spr_dat_du),
549
        .spr_cs(spr_cs),
550
        .spr_we(spr_we)
551
);
552
 
553
//
554
// Instantiation of DMMU
555
//
556
or1200_dmmu_top or1200_dmmu_top(
557
        // Rst and clk
558
        .clk(clk_i),
559
        .rst(rst_i),
560
 
561
        // CPU i/f
562
        .dc_en(dc_en),
563
        .dmmu_en(dmmu_en),
564
        .supv(supv),
565
        .dcpu_adr_i(dcpu_adr_cpu),
566
        .dcpu_cyc_i(dcpu_cyc_cpu),
567
        .dcpu_stb_i(dcpu_stb_cpu),
568
        .dcpu_we_i(dcpu_we_cpu),
569
        .dcpu_tag_o(dcpu_tag_dmmu),
570
        .dcpu_err_o(dcpu_err_dmmu),
571
 
572
        // SPR access
573
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DMMU]),
574
        .spr_write(spr_we),
575
        .spr_addr(spr_addr),
576
        .spr_dat_i(spr_dat_cpu),
577
        .spr_dat_o(spr_dat_dmmu),
578
 
579
        // DC i/f
580
        .dcdmmu_err_i(dcdmmu_err_dc),
581
        .dcdmmu_tag_i(dcdmmu_tag_dc),
582
        .dcdmmu_adr_o(dcdmmu_adr_dmmu),
583
        .dcdmmu_cyc_o(dcdmmu_cyc_dmmu),
584
        .dcdmmu_stb_o(dcdmmu_stb_dmmu),
585
        .dcdmmu_ci_o(dcdmmu_ci_dmmu)
586
);
587
 
588
//
589
// Instantiation of Data Cache
590
//
591
or1200_dc_top or1200_dc_top(
592
        .clk(clk_i),
593
        .rst(rst_i),
594
 
595
        // DC and CPU/DMMU
596
        .dc_en(dc_en),
597
        .dcdmmu_adr_i(dcdmmu_adr_dmmu),
598
        .dcdmmu_cyc_i(dcdmmu_cyc_dmmu),
599
        .dcdmmu_stb_i(dcdmmu_stb_dmmu),
600
        .dcdmmu_ci_i(dcdmmu_ci_dmmu),
601
        .dcpu_we_i(dcpu_we_cpu),
602
        .dcpu_sel_i(dcpu_sel_cpu),
603
        .dcpu_tag_i(dcpu_tag_cpu),
604
        .dcpu_dat_i(dcpu_dat_cpu),
605
        .dcpu_dat_o(dcpu_dat_dc),
606
        .dcpu_ack_o(dcpu_ack_dc),
607
        .dcpu_rty_o(dcpu_rty_dc),
608
        .dcdmmu_err_o(dcdmmu_err_dc),
609
        .dcdmmu_tag_o(dcdmmu_tag_dc),
610
 
611
        // SPR access
612
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DC]),
613
        .spr_write(spr_we),
614
        .spr_dat_i(spr_dat_cpu),
615
 
616
        // DC and BIU
617
        .dcbiu_dat_o(dcbiu_dat_dc),
618
        .dcbiu_adr_o(dcbiu_adr_dc),
619
        .dcbiu_cyc_o(dcbiu_cyc_dc),
620
        .dcbiu_stb_o(dcbiu_stb_dc),
621
        .dcbiu_we_o(dcbiu_we_dc),
622
        .dcbiu_sel_o(dcbiu_sel_dc),
623
        .dcbiu_cab_o(dcbiu_cab_dc),
624
        .dcbiu_dat_i(dcbiu_dat_biu),
625
        .dcbiu_ack_i(dcbiu_ack_biu),
626
        .dcbiu_err_i(dcbiu_err_biu)
627
);
628
 
629
//
630
// Instantiation of Debug Unit
631
//
632
or1200_du or1200_du(
633
        // RISC Internal Interface
634
        .clk(clk_i),
635
        .rst(rst_i),
636
        .dcpu_cyc_i(dcpu_cyc_cpu),
637
        .dcpu_stb_i(dcpu_stb_cpu),
638
        .dcpu_we_i(dcpu_we_cpu),
639
        .icpu_cyc_i(icpu_cyc_cpu),
640
        .icpu_stb_i(icpu_stb_cpu),
641
        .ex_freeze(ex_freeze),
642
        .branch_op(branch_op),
643
        .ex_insn(ex_insn),
644
        .du_dsr(du_dsr),
645
 
646
        // DU's access to SPR unit
647
        .du_stall(du_stall),
648
        .du_addr(du_addr),
649
        .du_dat_i(spr_dat_cpu),
650
        .du_dat_o(du_dat_du),
651
        .du_read(du_read),
652
        .du_write(du_write),
653
        .du_except(du_except),
654
 
655
        // Access to DU's SPRs
656
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DU]),
657
        .spr_write(spr_we),
658
        .spr_addr(spr_addr),
659
        .spr_dat_i(spr_dat_cpu),
660
        .spr_dat_o(spr_dat_du),
661
 
662
        // External Debug Interface
663
        .dbg_stall_i(dbg_stall_i),
664
        .dbg_dat_i(dbg_dat_i),
665
        .dbg_adr_i(dbg_adr_i),
666
        .dbg_op_i(dbg_op_i),
667
        .dbg_ewt_i(dbg_ewt_i),
668
        .dbg_lss_o(dbg_lss_o),
669
        .dbg_is_o(dbg_is_o),
670
        .dbg_wp_o(dbg_wp_o),
671
        .dbg_bp_o(dbg_bp_o),
672
        .dbg_dat_o(dbg_dat_o)
673
);
674
 
675
//
676
// Programmable interrupt controller
677
//
678
or1200_pic or1200_pic(
679
        // RISC Internal Interface
680
        .clk(clk_i),
681
        .rst(rst_i),
682
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_PIC]),
683
        .spr_write(spr_we),
684
        .spr_addr(spr_addr),
685
        .spr_dat_i(spr_dat_cpu),
686
        .spr_dat_o(spr_dat_pic),
687
        .pic_wakeup(pic_wakeup),
688 589 lampret
        .int(sig_int),
689 504 lampret
 
690
        // PIC Interface
691
        .pic_int(pic_ints_i)
692
);
693
 
694
//
695
// Instantiation of Tick timer
696
//
697
or1200_tt or1200_tt(
698
        // RISC Internal Interface
699
        .clk(clk_i),
700
        .rst(rst_i),
701
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_TT]),
702
        .spr_write(spr_we),
703
        .spr_addr(spr_addr),
704
        .spr_dat_i(spr_dat_cpu),
705
        .spr_dat_o(spr_dat_tt),
706 589 lampret
        .int(sig_tick)
707 504 lampret
);
708
 
709
//
710
// Instantiation of Power Management
711
//
712
or1200_pm or1200_pm(
713
        // RISC Internal Interface
714
        .clk(clk_i),
715
        .rst(rst_i),
716
        .pic_wakeup(pic_wakeup),
717
        .spr_write(spr_we),
718
        .spr_addr(spr_addr),
719
        .spr_dat_i(spr_dat_cpu),
720
        .spr_dat_o(spr_dat_pm),
721
 
722
        // Power Management Interface
723
        .pm_cpustall(pm_cpustall_i),
724
        .pm_clksd(pm_clksd_o),
725
        .pm_dc_gate(pm_dc_gate_o),
726
        .pm_ic_gate(pm_ic_gate_o),
727
        .pm_dmmu_gate(pm_dmmu_gate_o),
728
        .pm_immu_gate(pm_immu_gate_o),
729
        .pm_tt_gate(pm_tt_gate_o),
730
        .pm_cpu_gate(pm_cpu_gate_o),
731
        .pm_wakeup(pm_wakeup_o),
732
        .pm_lvolt(pm_lvolt_o)
733
);
734
 
735
 
736
endmodule

powered by: WebSVN 2.1.0

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