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

Subversion Repositories or1k

[/] [or1k/] [tags/] [rel_15/] [or1200/] [rtl/] [verilog/] [or1200_top.v] - Blame information for rev 1765

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 1200 markom
// Revision 1.10  2002/12/08 08:57:56  lampret
48
// Added optional support for WB B3 specification (xwb_cti_o, xwb_bte_o). Made xwb_cab_o optional.
49
//
50 1104 lampret
// Revision 1.9  2002/10/17 20:04:41  lampret
51
// Added BIST scan. Special VS RAMs need to be used to implement BIST.
52
//
53 1063 lampret
// Revision 1.8  2002/08/18 19:54:22  lampret
54
// Added store buffer.
55
//
56 977 lampret
// Revision 1.7  2002/07/14 22:17:17  lampret
57
// Added simple trace buffer [only for Xilinx Virtex target]. Fixed instruction fetch abort when new exception is recognized.
58
//
59 895 lampret
// Revision 1.6  2002/03/29 15:16:56  lampret
60
// Some of the warnings fixed.
61
//
62 788 lampret
// Revision 1.5  2002/02/11 04:33:17  lampret
63
// Speed optimizations (removed duplicate _cyc_ and _stb_). Fixed D/IMMU cache-inhibit attr.
64
//
65 660 lampret
// Revision 1.4  2002/02/01 19:56:55  lampret
66
// Fixed combinational loops.
67
//
68 636 lampret
// Revision 1.3  2002/01/28 01:16:00  lampret
69
// Changed 'void' nop-ops instead of insn[0] to use insn[16]. Debug unit stalls the tick timer. Prepared new flag generation for add and and insns. Blocked DC/IC while they are turned off. Fixed I/D MMU SPRs layout except WAYs. TODO: smart IC invalidate, l.j 2 and TLB ways.
70
//
71 617 lampret
// Revision 1.2  2002/01/18 07:56:00  lampret
72
// No more low/high priority interrupts (PICPR removed). Added tick timer exception. Added exception prefix (SR[EPH]). Fixed single-step bug whenreading NPC.
73
//
74 589 lampret
// Revision 1.1  2002/01/03 08:16:15  lampret
75
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
76
//
77 504 lampret
// Revision 1.13  2001/11/23 08:38:51  lampret
78
// Changed DSR/DRR behavior and exception detection.
79
//
80
// Revision 1.12  2001/11/20 00:57:22  lampret
81
// Fixed width of du_except.
82
//
83
// Revision 1.11  2001/11/18 08:36:28  lampret
84
// For GDB changed single stepping and disabled trap exception.
85
//
86
// Revision 1.10  2001/10/21 17:57:16  lampret
87
// 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.
88
//
89
// Revision 1.9  2001/10/14 13:12:10  lampret
90
// MP3 version.
91
//
92
// Revision 1.1.1.1  2001/10/06 10:18:35  igorm
93
// no message
94
//
95
// Revision 1.4  2001/08/13 03:36:20  lampret
96
// Added cfg regs. Moved all defines into one defines.v file. More cleanup.
97
//
98
// Revision 1.3  2001/08/09 13:39:33  lampret
99
// Major clean-up.
100
//
101
// Revision 1.2  2001/07/22 03:31:54  lampret
102
// Fixed RAM's oen bug. Cache bypass under development.
103
//
104
// Revision 1.1  2001/07/20 00:46:21  lampret
105
// Development version of RTL. Libraries are missing.
106
//
107
//
108
 
109
// synopsys translate_off
110
`include "timescale.v"
111
// synopsys translate_on
112
`include "or1200_defines.v"
113
 
114
module or1200_top(
115
        // System
116
        clk_i, rst_i, pic_ints_i, clmode_i,
117
 
118
        // Instruction WISHBONE INTERFACE
119
        iwb_clk_i, iwb_rst_i, iwb_ack_i, iwb_err_i, iwb_rty_i, iwb_dat_i,
120 1104 lampret
        iwb_cyc_o, iwb_adr_o, iwb_stb_o, iwb_we_o, iwb_sel_o, iwb_dat_o,
121
`ifdef OR1200_WB_CAB
122
        iwb_cab_o,
123
`endif
124
`ifdef OR1200_WB_B3
125
        iwb_cti_o, iwb_bte_o,
126
`endif
127 504 lampret
        // Data WISHBONE INTERFACE
128
        dwb_clk_i, dwb_rst_i, dwb_ack_i, dwb_err_i, dwb_rty_i, dwb_dat_i,
129 1104 lampret
        dwb_cyc_o, dwb_adr_o, dwb_stb_o, dwb_we_o, dwb_sel_o, dwb_dat_o,
130
`ifdef OR1200_WB_CAB
131
        dwb_cab_o,
132
`endif
133
`ifdef OR1200_WB_B3
134
        dwb_cti_o, dwb_bte_o,
135
`endif
136 504 lampret
 
137
        // External Debug Interface
138
        dbg_stall_i, dbg_dat_i, dbg_adr_i, dbg_op_i, dbg_ewt_i,
139
        dbg_lss_o, dbg_is_o, dbg_wp_o, dbg_bp_o, dbg_dat_o,
140
 
141 1063 lampret
`ifdef OR1200_BIST
142
        // RAM BIST
143 1200 markom
        mbist_si_i, mbist_so_o, mbist_ctrl_i,
144 1063 lampret
`endif
145 504 lampret
        // Power Management
146
        pm_cpustall_i,
147
        pm_clksd_o, pm_dc_gate_o, pm_ic_gate_o, pm_dmmu_gate_o,
148
        pm_immu_gate_o, pm_tt_gate_o, pm_cpu_gate_o, pm_wakeup_o, pm_lvolt_o
149
 
150
);
151
 
152
parameter dw = `OR1200_OPERAND_WIDTH;
153
parameter aw = `OR1200_OPERAND_WIDTH;
154
parameter ppic_ints = `OR1200_PIC_INTS;
155
 
156
//
157
// I/O
158
//
159
 
160
//
161
// System
162
//
163
input                   clk_i;
164
input                   rst_i;
165
input   [1:0]            clmode_i;       // 00 WB=RISC, 01 WB=RISC/2, 10 N/A, 11 WB=RISC/4
166
input   [ppic_ints-1:0]  pic_ints_i;
167
 
168
//
169
// Instruction WISHBONE interface
170
//
171
input                   iwb_clk_i;      // clock input
172
input                   iwb_rst_i;      // reset input
173
input                   iwb_ack_i;      // normal termination
174
input                   iwb_err_i;      // termination w/ error
175
input                   iwb_rty_i;      // termination w/ retry
176
input   [dw-1:0] iwb_dat_i;      // input data bus
177
output                  iwb_cyc_o;      // cycle valid output
178
output  [aw-1:0] iwb_adr_o;      // address bus outputs
179
output                  iwb_stb_o;      // strobe output
180
output                  iwb_we_o;       // indicates write transfer
181
output  [3:0]            iwb_sel_o;      // byte select outputs
182 1104 lampret
output  [dw-1:0] iwb_dat_o;      // output data bus
183
`ifdef OR1200_WB_CAB
184 504 lampret
output                  iwb_cab_o;      // indicates consecutive address burst
185 1104 lampret
`endif
186
`ifdef OR1200_WB_B3
187
output  [2:0]            iwb_cti_o;      // cycle type identifier
188
output  [1:0]            iwb_bte_o;      // burst type extension
189
`endif
190 504 lampret
 
191
//
192
// Data WISHBONE interface
193
//
194
input                   dwb_clk_i;      // clock input
195
input                   dwb_rst_i;      // reset input
196
input                   dwb_ack_i;      // normal termination
197
input                   dwb_err_i;      // termination w/ error
198
input                   dwb_rty_i;      // termination w/ retry
199
input   [dw-1:0] dwb_dat_i;      // input data bus
200
output                  dwb_cyc_o;      // cycle valid output
201
output  [aw-1:0] dwb_adr_o;      // address bus outputs
202
output                  dwb_stb_o;      // strobe output
203
output                  dwb_we_o;       // indicates write transfer
204
output  [3:0]            dwb_sel_o;      // byte select outputs
205 1104 lampret
output  [dw-1:0] dwb_dat_o;      // output data bus
206
`ifdef OR1200_WB_CAB
207 504 lampret
output                  dwb_cab_o;      // indicates consecutive address burst
208 1104 lampret
`endif
209
`ifdef OR1200_WB_B3
210
output  [2:0]            dwb_cti_o;      // cycle type identifier
211
output  [1:0]            dwb_bte_o;      // burst type extension
212
`endif
213 504 lampret
 
214
//
215
// External Debug Interface
216
//
217
input                   dbg_stall_i;    // External Stall Input
218
input   [dw-1:0] dbg_dat_i;      // External Data Input
219
input   [aw-1:0] dbg_adr_i;      // External Address Input
220
input   [2:0]            dbg_op_i;       // External Operation Select Input
221
input                   dbg_ewt_i;      // External Watchpoint Trigger Input
222
output  [3:0]            dbg_lss_o;      // External Load/Store Unit Status
223
output  [1:0]            dbg_is_o;       // External Insn Fetch Status
224
output  [10:0]           dbg_wp_o;       // Watchpoints Outputs
225
output                  dbg_bp_o;       // Breakpoint Output
226
output  [dw-1:0] dbg_dat_o;      // External Data Output
227
 
228 1063 lampret
`ifdef OR1200_BIST
229 504 lampret
//
230 1063 lampret
// RAM BIST
231
//
232 1200 markom
input                   mbist_si_i;
233
input [`OR1200_MBIST_CTRL_WIDTH - 1:0] mbist_ctrl_i;       // bist chain shift control
234
output                  mbist_so_o;
235 1063 lampret
`endif
236
 
237
//
238 504 lampret
// Power Management
239
//
240
input                   pm_cpustall_i;
241
output  [3:0]            pm_clksd_o;
242
output                  pm_dc_gate_o;
243
output                  pm_ic_gate_o;
244
output                  pm_dmmu_gate_o;
245
output                  pm_immu_gate_o;
246
output                  pm_tt_gate_o;
247
output                  pm_cpu_gate_o;
248
output                  pm_wakeup_o;
249
output                  pm_lvolt_o;
250
 
251
 
252
//
253
// Internal wires and regs
254
//
255
 
256
//
257 977 lampret
// DC to SB
258 504 lampret
//
259 977 lampret
wire    [dw-1:0] dcsb_dat_dc;
260
wire    [aw-1:0] dcsb_adr_dc;
261
wire                    dcsb_cyc_dc;
262
wire                    dcsb_stb_dc;
263
wire                    dcsb_we_dc;
264
wire    [3:0]            dcsb_sel_dc;
265
wire                    dcsb_cab_dc;
266
wire    [dw-1:0] dcsb_dat_sb;
267
wire                    dcsb_ack_sb;
268
wire                    dcsb_err_sb;
269 504 lampret
 
270
//
271 977 lampret
// SB to BIU
272
//
273
wire    [dw-1:0] sbbiu_dat_sb;
274
wire    [aw-1:0] sbbiu_adr_sb;
275
wire                    sbbiu_cyc_sb;
276
wire                    sbbiu_stb_sb;
277
wire                    sbbiu_we_sb;
278
wire    [3:0]            sbbiu_sel_sb;
279
wire                    sbbiu_cab_sb;
280
wire    [dw-1:0] sbbiu_dat_biu;
281
wire                    sbbiu_ack_biu;
282
wire                    sbbiu_err_biu;
283
 
284
//
285 504 lampret
// IC to BIU
286
//
287
wire    [dw-1:0] icbiu_dat_ic;
288
wire    [aw-1:0] icbiu_adr_ic;
289
wire                    icbiu_cyc_ic;
290
wire                    icbiu_stb_ic;
291
wire                    icbiu_we_ic;
292
wire    [3:0]            icbiu_sel_ic;
293
wire    [3:0]            icbiu_tag_ic;
294
wire    [dw-1:0] icbiu_dat_biu;
295
wire                    icbiu_ack_biu;
296
wire                    icbiu_err_biu;
297
wire    [3:0]            icbiu_tag_biu;
298
 
299
//
300
// CPU's SPR access to various RISC units (shared wires)
301
//
302
wire                    supv;
303
wire    [aw-1:0] spr_addr;
304
wire    [dw-1:0] spr_dat_cpu;
305
wire    [31:0]           spr_cs;
306
wire                    spr_we;
307
 
308
//
309
// DMMU and CPU
310
//
311
wire                    dmmu_en;
312
wire    [31:0]           spr_dat_dmmu;
313
 
314
//
315
// DMMU and DC
316
//
317
wire                    dcdmmu_err_dc;
318
wire    [3:0]            dcdmmu_tag_dc;
319
wire    [aw-1:0] dcdmmu_adr_dmmu;
320 660 lampret
wire                    dcdmmu_cycstb_dmmu;
321 504 lampret
wire                    dcdmmu_ci_dmmu;
322
 
323
//
324
// CPU and data memory subsystem
325
//
326
wire                    dc_en;
327
wire    [31:0]           dcpu_adr_cpu;
328
wire                    dcpu_we_cpu;
329
wire    [3:0]            dcpu_sel_cpu;
330
wire    [3:0]            dcpu_tag_cpu;
331
wire    [31:0]           dcpu_dat_cpu;
332
wire    [31:0]           dcpu_dat_dc;
333
wire                    dcpu_ack_dc;
334
wire                    dcpu_rty_dc;
335
wire                    dcpu_err_dmmu;
336
wire    [3:0]            dcpu_tag_dmmu;
337
 
338
//
339
// IMMU and CPU
340
//
341
wire                    immu_en;
342
wire    [31:0]           spr_dat_immu;
343
 
344
//
345
// CPU and insn memory subsystem
346
//
347
wire                    ic_en;
348
wire    [31:0]           icpu_adr_cpu;
349 660 lampret
wire                    icpu_cycstb_cpu;
350 504 lampret
wire    [3:0]            icpu_sel_cpu;
351
wire    [3:0]            icpu_tag_cpu;
352
wire    [31:0]           icpu_dat_ic;
353
wire                    icpu_ack_ic;
354
wire    [31:0]           icpu_adr_immu;
355
wire                    icpu_err_immu;
356
wire    [3:0]            icpu_tag_immu;
357
 
358
//
359
// IMMU and IC
360
//
361
wire    [aw-1:0] icimmu_adr_immu;
362 617 lampret
wire                    icimmu_rty_ic;
363 504 lampret
wire                    icimmu_err_ic;
364
wire    [3:0]            icimmu_tag_ic;
365 660 lampret
wire                    icimmu_cycstb_immu;
366 504 lampret
wire                    icimmu_ci_immu;
367
 
368
//
369
// Connection between CPU and PIC
370
//
371
wire    [dw-1:0] spr_dat_pic;
372
wire                    pic_wakeup;
373 589 lampret
wire                    sig_int;
374 504 lampret
 
375
//
376
// Connection between CPU and PM
377
//
378
wire    [dw-1:0] spr_dat_pm;
379
 
380
//
381
// CPU and TT
382
//
383
wire    [dw-1:0] spr_dat_tt;
384 589 lampret
wire                    sig_tick;
385 504 lampret
 
386
//
387
// Debug port and caches/MMUs
388
//
389
wire    [dw-1:0] spr_dat_du;
390
wire                    du_stall;
391
wire    [dw-1:0] du_addr;
392
wire    [dw-1:0] du_dat_du;
393
wire                    du_read;
394
wire                    du_write;
395
wire    [12:0]           du_except;
396
wire    [`OR1200_DU_DSR_WIDTH-1:0]     du_dsr;
397 636 lampret
wire    [dw-1:0] du_dat_cpu;
398 504 lampret
 
399
wire                    ex_freeze;
400
wire    [31:0]           ex_insn;
401
wire    [`OR1200_BRANCHOP_WIDTH-1:0]     branch_op;
402 895 lampret
wire    [31:0]           spr_dat_npc;
403
wire    [31:0]           rf_dataw;
404 504 lampret
 
405 1063 lampret
`ifdef OR1200_BIST
406
//
407
// RAM BIST
408
//
409 1200 markom
wire                    mbist_immu_so;
410
wire                    mbist_ic_so;
411
wire                    mbist_dmmu_so;
412
wire                    mbist_dc_so;
413
wire                    mbist_immu_si = mbist_si_i;
414
wire                    mbist_ic_si = mbist_immu_so;
415
wire                    mbist_dmmu_si = mbist_ic_so;
416
wire                    mbist_dc_si = mbist_dmmu_so;
417
assign                  mbist_so_o = mbist_dc_so;
418 1063 lampret
`endif
419 895 lampret
 
420 1063 lampret
 
421 504 lampret
//
422
// Instantiation of Instruction WISHBONE BIU
423
//
424
or1200_wb_biu iwb_biu(
425
        // RISC clk, rst and clock control
426
        .clk(clk_i),
427
        .rst(rst_i),
428
        .clmode(clmode_i),
429
 
430
        // WISHBONE interface
431
        .wb_clk_i(iwb_clk_i),
432
        .wb_rst_i(iwb_rst_i),
433
        .wb_ack_i(iwb_ack_i),
434
        .wb_err_i(iwb_err_i),
435
        .wb_rty_i(iwb_rty_i),
436
        .wb_dat_i(iwb_dat_i),
437
        .wb_cyc_o(iwb_cyc_o),
438
        .wb_adr_o(iwb_adr_o),
439
        .wb_stb_o(iwb_stb_o),
440
        .wb_we_o(iwb_we_o),
441
        .wb_sel_o(iwb_sel_o),
442 1104 lampret
        .wb_dat_o(iwb_dat_o),
443
`ifdef OR1200_WB_CAB
444 504 lampret
        .wb_cab_o(iwb_cab_o),
445 1104 lampret
`endif
446
`ifdef OR1200_WB_B3
447
        .wb_cti_o(iwb_cti_o),
448
        .wb_bte_o(iwb_bte_o),
449
`endif
450 504 lampret
 
451
        // Internal RISC bus
452
        .biu_dat_i(icbiu_dat_ic),
453
        .biu_adr_i(icbiu_adr_ic),
454
        .biu_cyc_i(icbiu_cyc_ic),
455
        .biu_stb_i(icbiu_stb_ic),
456
        .biu_we_i(icbiu_we_ic),
457
        .biu_sel_i(icbiu_sel_ic),
458
        .biu_cab_i(icbiu_cab_ic),
459
        .biu_dat_o(icbiu_dat_biu),
460
        .biu_ack_o(icbiu_ack_biu),
461
        .biu_err_o(icbiu_err_biu)
462
);
463
 
464
//
465
// Instantiation of Data WISHBONE BIU
466
//
467
or1200_wb_biu dwb_biu(
468
        // RISC clk, rst and clock control
469
        .clk(clk_i),
470
        .rst(rst_i),
471
        .clmode(clmode_i),
472
 
473
        // WISHBONE interface
474
        .wb_clk_i(dwb_clk_i),
475
        .wb_rst_i(dwb_rst_i),
476
        .wb_ack_i(dwb_ack_i),
477
        .wb_err_i(dwb_err_i),
478
        .wb_rty_i(dwb_rty_i),
479
        .wb_dat_i(dwb_dat_i),
480
        .wb_cyc_o(dwb_cyc_o),
481
        .wb_adr_o(dwb_adr_o),
482
        .wb_stb_o(dwb_stb_o),
483
        .wb_we_o(dwb_we_o),
484
        .wb_sel_o(dwb_sel_o),
485 1104 lampret
        .wb_dat_o(dwb_dat_o),
486
`ifdef OR1200_WB_CAB
487 504 lampret
        .wb_cab_o(dwb_cab_o),
488 1104 lampret
`endif
489
`ifdef OR1200_WB_B3
490
        .wb_cti_o(dwb_cti_o),
491
        .wb_bte_o(dwb_bte_o),
492
`endif
493 504 lampret
 
494
        // Internal RISC bus
495 977 lampret
        .biu_dat_i(sbbiu_dat_sb),
496
        .biu_adr_i(sbbiu_adr_sb),
497
        .biu_cyc_i(sbbiu_cyc_sb),
498
        .biu_stb_i(sbbiu_stb_sb),
499
        .biu_we_i(sbbiu_we_sb),
500
        .biu_sel_i(sbbiu_sel_sb),
501
        .biu_cab_i(sbbiu_cab_sb),
502
        .biu_dat_o(sbbiu_dat_biu),
503
        .biu_ack_o(sbbiu_ack_biu),
504
        .biu_err_o(sbbiu_err_biu)
505 504 lampret
);
506
 
507
//
508
// Instantiation of IMMU
509
//
510
or1200_immu_top or1200_immu_top(
511
        // Rst and clk
512
        .clk(clk_i),
513
        .rst(rst_i),
514
 
515 1063 lampret
`ifdef OR1200_BIST
516
        // RAM BIST
517 1200 markom
        .mbist_si_i(mbist_immu_si),
518
        .mbist_so_o(mbist_immu_so),
519
        .mbist_ctrl_i(mbist_ctrl_i),
520 1063 lampret
`endif
521
 
522 504 lampret
        // CPU i/f
523
        .ic_en(ic_en),
524
        .immu_en(immu_en),
525
        .supv(supv),
526
        .icpu_adr_i(icpu_adr_cpu),
527 660 lampret
        .icpu_cycstb_i(icpu_cycstb_cpu),
528 504 lampret
        .icpu_adr_o(icpu_adr_immu),
529
        .icpu_tag_o(icpu_tag_immu),
530 617 lampret
        .icpu_rty_o(icpu_rty_immu),
531 504 lampret
        .icpu_err_o(icpu_err_immu),
532
 
533
        // SPR access
534
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IMMU]),
535
        .spr_write(spr_we),
536
        .spr_addr(spr_addr),
537
        .spr_dat_i(spr_dat_cpu),
538
        .spr_dat_o(spr_dat_immu),
539
 
540
        // IC i/f
541 617 lampret
        .icimmu_rty_i(icimmu_rty_ic),
542 504 lampret
        .icimmu_err_i(icimmu_err_ic),
543
        .icimmu_tag_i(icimmu_tag_ic),
544
        .icimmu_adr_o(icimmu_adr_immu),
545 660 lampret
        .icimmu_cycstb_o(icimmu_cycstb_immu),
546 504 lampret
        .icimmu_ci_o(icimmu_ci_immu)
547
);
548
 
549
//
550
// Instantiation of Instruction Cache
551
//
552
or1200_ic_top or1200_ic_top(
553
        .clk(clk_i),
554
        .rst(rst_i),
555
 
556 1063 lampret
`ifdef OR1200_BIST
557
        // RAM BIST
558 1200 markom
        .mbist_si_i(mbist_ic_si),
559
        .mbist_so_o(mbist_ic_so),
560
        .mbist_ctrl_i(mbist_ctrl_i),
561 1063 lampret
`endif
562
 
563 504 lampret
        // IC and CPU/IMMU
564
        .ic_en(ic_en),
565
        .icimmu_adr_i(icimmu_adr_immu),
566 660 lampret
        .icimmu_cycstb_i(icimmu_cycstb_immu),
567 504 lampret
        .icimmu_ci_i(icimmu_ci_immu),
568
        .icpu_sel_i(icpu_sel_cpu),
569
        .icpu_tag_i(icpu_tag_cpu),
570
        .icpu_dat_o(icpu_dat_ic),
571
        .icpu_ack_o(icpu_ack_ic),
572 617 lampret
        .icimmu_rty_o(icimmu_rty_ic),
573 504 lampret
        .icimmu_err_o(icimmu_err_ic),
574
        .icimmu_tag_o(icimmu_tag_ic),
575
 
576
        // SPR access
577
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IC]),
578
        .spr_write(spr_we),
579
        .spr_dat_i(spr_dat_cpu),
580
 
581
        // IC and BIU
582
        .icbiu_dat_o(icbiu_dat_ic),
583
        .icbiu_adr_o(icbiu_adr_ic),
584
        .icbiu_cyc_o(icbiu_cyc_ic),
585
        .icbiu_stb_o(icbiu_stb_ic),
586
        .icbiu_we_o(icbiu_we_ic),
587
        .icbiu_sel_o(icbiu_sel_ic),
588
        .icbiu_cab_o(icbiu_cab_ic),
589
        .icbiu_dat_i(icbiu_dat_biu),
590
        .icbiu_ack_i(icbiu_ack_biu),
591
        .icbiu_err_i(icbiu_err_biu)
592
);
593
 
594
//
595
// Instantiation of Instruction Cache
596
//
597
or1200_cpu or1200_cpu(
598
        .clk(clk_i),
599
        .rst(rst_i),
600
 
601
        // Connection IC and IFETCHER inside CPU
602
        .ic_en(ic_en),
603
        .icpu_adr_o(icpu_adr_cpu),
604 660 lampret
        .icpu_cycstb_o(icpu_cycstb_cpu),
605 504 lampret
        .icpu_sel_o(icpu_sel_cpu),
606
        .icpu_tag_o(icpu_tag_cpu),
607
        .icpu_dat_i(icpu_dat_ic),
608
        .icpu_ack_i(icpu_ack_ic),
609 617 lampret
        .icpu_rty_i(icpu_rty_immu),
610 504 lampret
        .icpu_adr_i(icpu_adr_immu),
611
        .icpu_err_i(icpu_err_immu),
612
        .icpu_tag_i(icpu_tag_immu),
613
 
614
        // Connection CPU to external Debug port
615
        .ex_freeze(ex_freeze),
616
        .ex_insn(ex_insn),
617
        .branch_op(branch_op),
618
        .du_stall(du_stall),
619
        .du_addr(du_addr),
620
        .du_dat_du(du_dat_du),
621
        .du_read(du_read),
622
        .du_write(du_write),
623
        .du_dsr(du_dsr),
624
        .du_except(du_except),
625 636 lampret
        .du_dat_cpu(du_dat_cpu),
626 895 lampret
        .rf_dataw(rf_dataw),
627 504 lampret
 
628 895 lampret
 
629 504 lampret
        // Connection IMMU and CPU internally
630
        .immu_en(immu_en),
631
 
632
        // Connection DC and CPU
633
        .dc_en(dc_en),
634
        .dcpu_adr_o(dcpu_adr_cpu),
635 660 lampret
        .dcpu_cycstb_o(dcpu_cycstb_cpu),
636 504 lampret
        .dcpu_we_o(dcpu_we_cpu),
637
        .dcpu_sel_o(dcpu_sel_cpu),
638
        .dcpu_tag_o(dcpu_tag_cpu),
639
        .dcpu_dat_o(dcpu_dat_cpu),
640
        .dcpu_dat_i(dcpu_dat_dc),
641
        .dcpu_ack_i(dcpu_ack_dc),
642
        .dcpu_rty_i(dcpu_rty_dc),
643
        .dcpu_err_i(dcpu_err_dmmu),
644
        .dcpu_tag_i(dcpu_tag_dmmu),
645
 
646
        // Connection DMMU and CPU internally
647
        .dmmu_en(dmmu_en),
648
 
649
        // Connection PIC and CPU's EXCEPT
650 589 lampret
        .sig_int(sig_int),
651
        .sig_tick(sig_tick),
652 504 lampret
 
653
        // SPRs
654
        .supv(supv),
655
        .spr_addr(spr_addr),
656 636 lampret
        .spr_dat_cpu(spr_dat_cpu),
657 504 lampret
        .spr_dat_pic(spr_dat_pic),
658
        .spr_dat_tt(spr_dat_tt),
659
        .spr_dat_pm(spr_dat_pm),
660
        .spr_dat_dmmu(spr_dat_dmmu),
661
        .spr_dat_immu(spr_dat_immu),
662
        .spr_dat_du(spr_dat_du),
663 895 lampret
        .spr_dat_npc(spr_dat_npc),
664 504 lampret
        .spr_cs(spr_cs),
665
        .spr_we(spr_we)
666
);
667
 
668
//
669
// Instantiation of DMMU
670
//
671
or1200_dmmu_top or1200_dmmu_top(
672
        // Rst and clk
673
        .clk(clk_i),
674
        .rst(rst_i),
675
 
676 1063 lampret
`ifdef OR1200_BIST
677
        // RAM BIST
678 1200 markom
        .mbist_si_i(mbist_dmmu_si),
679
        .mbist_so_o(mbist_dmmu_so),
680
        .mbist_ctrl_i(mbist_ctrl_i),
681 1063 lampret
`endif
682
 
683 504 lampret
        // CPU i/f
684
        .dc_en(dc_en),
685
        .dmmu_en(dmmu_en),
686
        .supv(supv),
687
        .dcpu_adr_i(dcpu_adr_cpu),
688 660 lampret
        .dcpu_cycstb_i(dcpu_cycstb_cpu),
689 504 lampret
        .dcpu_we_i(dcpu_we_cpu),
690
        .dcpu_tag_o(dcpu_tag_dmmu),
691
        .dcpu_err_o(dcpu_err_dmmu),
692
 
693
        // SPR access
694
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DMMU]),
695
        .spr_write(spr_we),
696
        .spr_addr(spr_addr),
697
        .spr_dat_i(spr_dat_cpu),
698
        .spr_dat_o(spr_dat_dmmu),
699
 
700
        // DC i/f
701
        .dcdmmu_err_i(dcdmmu_err_dc),
702
        .dcdmmu_tag_i(dcdmmu_tag_dc),
703
        .dcdmmu_adr_o(dcdmmu_adr_dmmu),
704 660 lampret
        .dcdmmu_cycstb_o(dcdmmu_cycstb_dmmu),
705 504 lampret
        .dcdmmu_ci_o(dcdmmu_ci_dmmu)
706
);
707
 
708
//
709
// Instantiation of Data Cache
710
//
711
or1200_dc_top or1200_dc_top(
712
        .clk(clk_i),
713
        .rst(rst_i),
714
 
715 1063 lampret
`ifdef OR1200_BIST
716
        // RAM BIST
717 1200 markom
        .mbist_si_i(mbist_dc_si),
718
        .mbist_so_o(mbist_dc_so),
719
        .mbist_ctrl_i(mbist_ctrl_i),
720 1063 lampret
`endif
721
 
722 504 lampret
        // DC and CPU/DMMU
723
        .dc_en(dc_en),
724
        .dcdmmu_adr_i(dcdmmu_adr_dmmu),
725 660 lampret
        .dcdmmu_cycstb_i(dcdmmu_cycstb_dmmu),
726 504 lampret
        .dcdmmu_ci_i(dcdmmu_ci_dmmu),
727
        .dcpu_we_i(dcpu_we_cpu),
728
        .dcpu_sel_i(dcpu_sel_cpu),
729
        .dcpu_tag_i(dcpu_tag_cpu),
730
        .dcpu_dat_i(dcpu_dat_cpu),
731
        .dcpu_dat_o(dcpu_dat_dc),
732
        .dcpu_ack_o(dcpu_ack_dc),
733
        .dcpu_rty_o(dcpu_rty_dc),
734
        .dcdmmu_err_o(dcdmmu_err_dc),
735
        .dcdmmu_tag_o(dcdmmu_tag_dc),
736
 
737
        // SPR access
738
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DC]),
739
        .spr_write(spr_we),
740
        .spr_dat_i(spr_dat_cpu),
741
 
742
        // DC and BIU
743 977 lampret
        .dcsb_dat_o(dcsb_dat_dc),
744
        .dcsb_adr_o(dcsb_adr_dc),
745
        .dcsb_cyc_o(dcsb_cyc_dc),
746
        .dcsb_stb_o(dcsb_stb_dc),
747
        .dcsb_we_o(dcsb_we_dc),
748
        .dcsb_sel_o(dcsb_sel_dc),
749
        .dcsb_cab_o(dcsb_cab_dc),
750
        .dcsb_dat_i(dcsb_dat_sb),
751
        .dcsb_ack_i(dcsb_ack_sb),
752
        .dcsb_err_i(dcsb_err_sb)
753 504 lampret
);
754
 
755
//
756 977 lampret
// Instantiation of Store Buffer
757
//
758
or1200_sb or1200_sb(
759
        // RISC clock, reset
760
        .clk(clk_i),
761
        .rst(rst_i),
762
 
763
        // Internal RISC bus (DC<->SB)
764
        .dcsb_dat_i(dcsb_dat_dc),
765
        .dcsb_adr_i(dcsb_adr_dc),
766
        .dcsb_cyc_i(dcsb_cyc_dc),
767
        .dcsb_stb_i(dcsb_stb_dc),
768
        .dcsb_we_i(dcsb_we_dc),
769
        .dcsb_sel_i(dcsb_sel_dc),
770
        .dcsb_cab_i(dcsb_cab_dc),
771
        .dcsb_dat_o(dcsb_dat_sb),
772
        .dcsb_ack_o(dcsb_ack_sb),
773
        .dcsb_err_o(dcsb_err_sb),
774
 
775
        // SB and BIU
776
        .sbbiu_dat_o(sbbiu_dat_sb),
777
        .sbbiu_adr_o(sbbiu_adr_sb),
778
        .sbbiu_cyc_o(sbbiu_cyc_sb),
779
        .sbbiu_stb_o(sbbiu_stb_sb),
780
        .sbbiu_we_o(sbbiu_we_sb),
781
        .sbbiu_sel_o(sbbiu_sel_sb),
782
        .sbbiu_cab_o(sbbiu_cab_sb),
783
        .sbbiu_dat_i(sbbiu_dat_biu),
784
        .sbbiu_ack_i(sbbiu_ack_biu),
785
        .sbbiu_err_i(sbbiu_err_biu)
786
);
787
 
788
//
789 504 lampret
// Instantiation of Debug Unit
790
//
791
or1200_du or1200_du(
792
        // RISC Internal Interface
793
        .clk(clk_i),
794
        .rst(rst_i),
795 660 lampret
        .dcpu_cycstb_i(dcpu_cycstb_cpu),
796 504 lampret
        .dcpu_we_i(dcpu_we_cpu),
797 660 lampret
        .icpu_cycstb_i(icpu_cycstb_cpu),
798 504 lampret
        .ex_freeze(ex_freeze),
799
        .branch_op(branch_op),
800
        .ex_insn(ex_insn),
801
        .du_dsr(du_dsr),
802
 
803 895 lampret
        // For Trace buffer
804
        .spr_dat_npc(spr_dat_npc),
805
        .rf_dataw(rf_dataw),
806
 
807 504 lampret
        // DU's access to SPR unit
808
        .du_stall(du_stall),
809
        .du_addr(du_addr),
810 636 lampret
        .du_dat_i(du_dat_cpu),
811 504 lampret
        .du_dat_o(du_dat_du),
812
        .du_read(du_read),
813
        .du_write(du_write),
814
        .du_except(du_except),
815
 
816
        // Access to DU's SPRs
817
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DU]),
818
        .spr_write(spr_we),
819
        .spr_addr(spr_addr),
820
        .spr_dat_i(spr_dat_cpu),
821
        .spr_dat_o(spr_dat_du),
822
 
823
        // External Debug Interface
824
        .dbg_stall_i(dbg_stall_i),
825
        .dbg_dat_i(dbg_dat_i),
826
        .dbg_adr_i(dbg_adr_i),
827
        .dbg_op_i(dbg_op_i),
828
        .dbg_ewt_i(dbg_ewt_i),
829
        .dbg_lss_o(dbg_lss_o),
830
        .dbg_is_o(dbg_is_o),
831
        .dbg_wp_o(dbg_wp_o),
832
        .dbg_bp_o(dbg_bp_o),
833
        .dbg_dat_o(dbg_dat_o)
834
);
835
 
836
//
837
// Programmable interrupt controller
838
//
839
or1200_pic or1200_pic(
840
        // RISC Internal Interface
841
        .clk(clk_i),
842
        .rst(rst_i),
843
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_PIC]),
844
        .spr_write(spr_we),
845
        .spr_addr(spr_addr),
846
        .spr_dat_i(spr_dat_cpu),
847
        .spr_dat_o(spr_dat_pic),
848
        .pic_wakeup(pic_wakeup),
849 589 lampret
        .int(sig_int),
850 504 lampret
 
851
        // PIC Interface
852
        .pic_int(pic_ints_i)
853
);
854
 
855
//
856
// Instantiation of Tick timer
857
//
858
or1200_tt or1200_tt(
859
        // RISC Internal Interface
860
        .clk(clk_i),
861
        .rst(rst_i),
862 617 lampret
        .du_stall(du_stall),
863 504 lampret
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_TT]),
864
        .spr_write(spr_we),
865
        .spr_addr(spr_addr),
866
        .spr_dat_i(spr_dat_cpu),
867
        .spr_dat_o(spr_dat_tt),
868 589 lampret
        .int(sig_tick)
869 504 lampret
);
870
 
871
//
872
// Instantiation of Power Management
873
//
874
or1200_pm or1200_pm(
875
        // RISC Internal Interface
876
        .clk(clk_i),
877
        .rst(rst_i),
878
        .pic_wakeup(pic_wakeup),
879
        .spr_write(spr_we),
880
        .spr_addr(spr_addr),
881
        .spr_dat_i(spr_dat_cpu),
882
        .spr_dat_o(spr_dat_pm),
883
 
884
        // Power Management Interface
885
        .pm_cpustall(pm_cpustall_i),
886
        .pm_clksd(pm_clksd_o),
887
        .pm_dc_gate(pm_dc_gate_o),
888
        .pm_ic_gate(pm_ic_gate_o),
889
        .pm_dmmu_gate(pm_dmmu_gate_o),
890
        .pm_immu_gate(pm_immu_gate_o),
891
        .pm_tt_gate(pm_tt_gate_o),
892
        .pm_cpu_gate(pm_cpu_gate_o),
893
        .pm_wakeup(pm_wakeup_o),
894
        .pm_lvolt(pm_lvolt_o)
895
);
896
 
897
 
898
endmodule

powered by: WebSVN 2.1.0

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