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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [orpsocv2/] [rtl/] [verilog/] [or1200/] [or1200_top.v] - Blame information for rev 483

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 350 julius
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  OR1200 Top Level                                            ////
4
////                                                              ////
5
////  This file is part of the OpenRISC 1200 project              ////
6
////  http://opencores.org/project,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: or1200_top.v,v $
47
// Revision 2.0  2010/06/30 11:00:00  ORSoC
48
// Major update: 
49
// Structure reordered. 
50
//
51
 
52
// synopsys translate_off
53
`include "timescale.v"
54
// synopsys translate_on
55
`include "or1200_defines.v"
56
 
57
module or1200_top(
58
        // System
59
        clk_i, rst_i, pic_ints_i, clmode_i,
60
 
61
        // Instruction WISHBONE INTERFACE
62
        iwb_clk_i, iwb_rst_i, iwb_ack_i, iwb_err_i, iwb_rty_i, iwb_dat_i,
63
        iwb_cyc_o, iwb_adr_o, iwb_stb_o, iwb_we_o, iwb_sel_o, iwb_dat_o,
64
`ifdef OR1200_WB_CAB
65
        iwb_cab_o,
66
`endif
67
`ifdef OR1200_WB_B3
68
        iwb_cti_o, iwb_bte_o,
69
`endif
70
        // Data WISHBONE INTERFACE
71
        dwb_clk_i, dwb_rst_i, dwb_ack_i, dwb_err_i, dwb_rty_i, dwb_dat_i,
72
        dwb_cyc_o, dwb_adr_o, dwb_stb_o, dwb_we_o, dwb_sel_o, dwb_dat_o,
73
`ifdef OR1200_WB_CAB
74
        dwb_cab_o,
75
`endif
76
`ifdef OR1200_WB_B3
77
        dwb_cti_o, dwb_bte_o,
78
`endif
79
 
80
        // External Debug Interface
81
        dbg_stall_i, dbg_ewt_i, dbg_lss_o, dbg_is_o, dbg_wp_o, dbg_bp_o,
82
        dbg_stb_i, dbg_we_i, dbg_adr_i, dbg_dat_i, dbg_dat_o, dbg_ack_o,
83
 
84
`ifdef OR1200_BIST
85
        // RAM BIST
86
        mbist_si_i, mbist_so_o, mbist_ctrl_i,
87
`endif
88 483 julius
 
89
`ifdef OR1200_RAM_PARITY
90
        mem_parity_err,
91
`endif
92
 
93 350 julius
        // Power Management
94
        pm_cpustall_i,
95
        pm_clksd_o, pm_dc_gate_o, pm_ic_gate_o, pm_dmmu_gate_o,
96
        pm_immu_gate_o, pm_tt_gate_o, pm_cpu_gate_o, pm_wakeup_o, pm_lvolt_o
97
 
98
,sig_tick
99
 
100
);
101
 
102
parameter dw = `OR1200_OPERAND_WIDTH;
103
parameter aw = `OR1200_OPERAND_WIDTH;
104
parameter ppic_ints = `OR1200_PIC_INTS;
105
 
106
//
107
// I/O
108
//
109
 
110
//
111
// System
112
//
113
input                   clk_i;
114
input                   rst_i;
115
input   [1:0]            clmode_i;       // 00 WB=RISC, 01 WB=RISC/2, 10 N/A, 11 WB=RISC/4
116
input   [ppic_ints-1:0]  pic_ints_i;
117
 
118
//
119
// Instruction WISHBONE interface
120
//
121
input                   iwb_clk_i;      // clock input
122
input                   iwb_rst_i;      // reset input
123
input                   iwb_ack_i;      // normal termination
124
input                   iwb_err_i;      // termination w/ error
125
input                   iwb_rty_i;      // termination w/ retry
126
input   [dw-1:0] iwb_dat_i;      // input data bus
127
output                  iwb_cyc_o;      // cycle valid output
128
output  [aw-1:0] iwb_adr_o;      // address bus outputs
129
output                  iwb_stb_o;      // strobe output
130
output                  iwb_we_o;       // indicates write transfer
131
output  [3:0]            iwb_sel_o;      // byte select outputs
132
output  [dw-1:0] iwb_dat_o;      // output data bus
133
`ifdef OR1200_WB_CAB
134
output                  iwb_cab_o;      // indicates consecutive address burst
135
`endif
136
`ifdef OR1200_WB_B3
137
output  [2:0]            iwb_cti_o;      // cycle type identifier
138
output  [1:0]            iwb_bte_o;      // burst type extension
139
`endif
140
 
141
//
142
// Data WISHBONE interface
143
//
144
input                   dwb_clk_i;      // clock input
145
input                   dwb_rst_i;      // reset input
146
input                   dwb_ack_i;      // normal termination
147
input                   dwb_err_i;      // termination w/ error
148
input                   dwb_rty_i;      // termination w/ retry
149
input   [dw-1:0] dwb_dat_i;      // input data bus
150
output                  dwb_cyc_o;      // cycle valid output
151
output  [aw-1:0] dwb_adr_o;      // address bus outputs
152
output                  dwb_stb_o;      // strobe output
153
output                  dwb_we_o;       // indicates write transfer
154
output  [3:0]            dwb_sel_o;      // byte select outputs
155
output  [dw-1:0] dwb_dat_o;      // output data bus
156
`ifdef OR1200_WB_CAB
157
output                  dwb_cab_o;      // indicates consecutive address burst
158
`endif
159
`ifdef OR1200_WB_B3
160
output  [2:0]            dwb_cti_o;      // cycle type identifier
161
output  [1:0]            dwb_bte_o;      // burst type extension
162
`endif
163
 
164
//
165
// External Debug Interface
166
//
167
input                   dbg_stall_i;    // External Stall Input
168
input                   dbg_ewt_i;      // External Watchpoint Trigger Input
169
output  [3:0]            dbg_lss_o;      // External Load/Store Unit Status
170
output  [1:0]            dbg_is_o;       // External Insn Fetch Status
171
output  [10:0]           dbg_wp_o;       // Watchpoints Outputs
172
output                  dbg_bp_o;       // Breakpoint Output
173
input                   dbg_stb_i;      // External Address/Data Strobe
174
input                   dbg_we_i;       // External Write Enable
175
input   [aw-1:0] dbg_adr_i;      // External Address Input
176
input   [dw-1:0] dbg_dat_i;      // External Data Input
177
output  [dw-1:0] dbg_dat_o;      // External Data Output
178
output                  dbg_ack_o;      // External Data Acknowledge (not WB compatible)
179
 
180
`ifdef OR1200_BIST
181
//
182
// RAM BIST
183
//
184
input mbist_si_i;
185
input [`OR1200_MBIST_CTRL_WIDTH - 1:0] mbist_ctrl_i;
186
output mbist_so_o;
187
`endif
188
 
189
//
190
// Power Management
191
//
192
input                   pm_cpustall_i;
193
output  [3:0]            pm_clksd_o;
194
output                  pm_dc_gate_o;
195
output                  pm_ic_gate_o;
196
output                  pm_dmmu_gate_o;
197
output                  pm_immu_gate_o;
198
output                  pm_tt_gate_o;
199
output                  pm_cpu_gate_o;
200
output                  pm_wakeup_o;
201
output                  pm_lvolt_o;
202
 
203 483 julius
`ifdef OR1200_RAM_PARITY
204
output [8:0]             mem_parity_err;
205
`endif
206
 
207 350 julius
 
208
//
209
// Internal wires and regs
210
//
211
 
212
//
213
// DC to SB
214
//
215
wire    [dw-1:0] dcsb_dat_dc;
216
wire    [aw-1:0] dcsb_adr_dc;
217
wire                    dcsb_cyc_dc;
218
wire                    dcsb_stb_dc;
219
wire                    dcsb_we_dc;
220
wire    [3:0]            dcsb_sel_dc;
221
wire                    dcsb_cab_dc;
222
wire    [dw-1:0] dcsb_dat_sb;
223
wire                    dcsb_ack_sb;
224
wire                    dcsb_err_sb;
225
 
226
//
227
// SB to BIU
228
//
229
wire    [dw-1:0] sbbiu_dat_sb;
230
wire    [aw-1:0] sbbiu_adr_sb;
231
wire                    sbbiu_cyc_sb;
232
wire                    sbbiu_stb_sb;
233
wire                    sbbiu_we_sb;
234
wire    [3:0]            sbbiu_sel_sb;
235
wire                    sbbiu_cab_sb;
236
wire    [dw-1:0] sbbiu_dat_biu;
237
wire                    sbbiu_ack_biu;
238
wire                    sbbiu_err_biu;
239
 
240
//
241
// IC to BIU
242
//
243
wire    [dw-1:0] icbiu_dat_ic;
244
wire    [aw-1:0] icbiu_adr_ic;
245
wire    [aw-1:0] icbiu_adr_ic_word;
246
wire                    icbiu_cyc_ic;
247
wire                    icbiu_stb_ic;
248
wire                    icbiu_we_ic;
249
wire    [3:0]            icbiu_sel_ic;
250
wire    [3:0]            icbiu_tag_ic;
251
wire                    icbiu_cab_ic;
252
wire    [dw-1:0] icbiu_dat_biu;
253
wire                    icbiu_ack_biu;
254
wire                    icbiu_err_biu;
255
wire    [3:0]            icbiu_tag_biu;
256
 
257
//
258
// SR Interface (this signal can be connected to the input pin)
259
//
260
wire                    boot_adr_sel = `OR1200_SR_EPH_DEF;
261
 
262
//
263
// CPU's SPR access to various RISC units (shared wires)
264
//
265
wire                    supv;
266
wire    [aw-1:0] spr_addr;
267
wire    [dw-1:0] spr_dat_cpu;
268
wire    [31:0]           spr_cs;
269
wire                    spr_we;
270 363 julius
wire                    mtspr_dc_done;
271
 
272 350 julius
//
273
// SB
274
//
275
wire                    sb_en;
276
 
277
//
278
// DMMU and CPU
279
//
280
wire                    dmmu_en;
281
wire    [31:0]           spr_dat_dmmu;
282
 
283
//
284
// DMMU and QMEM
285
//
286
wire                    qmemdmmu_err_qmem;
287
wire    [3:0]            qmemdmmu_tag_qmem;
288
wire    [aw-1:0] qmemdmmu_adr_dmmu;
289
wire                    qmemdmmu_cycstb_dmmu;
290
wire                    qmemdmmu_ci_dmmu;
291
 
292
//
293
// CPU and data memory subsystem
294
//
295
wire                    dc_en;
296
wire    [31:0]           dcpu_adr_cpu;
297
wire                    dcpu_cycstb_cpu;
298
wire                    dcpu_we_cpu;
299
wire    [3:0]            dcpu_sel_cpu;
300
wire    [3:0]            dcpu_tag_cpu;
301
wire    [31:0]           dcpu_dat_cpu;
302
wire    [31:0]           dcpu_dat_qmem;
303
wire                    dcpu_ack_qmem;
304
wire                    dcpu_rty_qmem;
305
wire                    dcpu_err_dmmu;
306
wire    [3:0]            dcpu_tag_dmmu;
307
wire                    dc_no_writethrough;
308
 
309
//
310
// IMMU and CPU
311
//
312
wire                    immu_en;
313
wire    [31:0]           spr_dat_immu;
314
 
315
//
316
// CPU and insn memory subsystem
317
//
318
wire                    ic_en;
319
wire    [31:0]           icpu_adr_cpu;
320
wire                    icpu_cycstb_cpu;
321
wire    [3:0]            icpu_sel_cpu;
322
wire    [3:0]            icpu_tag_cpu;
323
wire    [31:0]           icpu_dat_qmem;
324
wire                    icpu_ack_qmem;
325
wire    [31:0]           icpu_adr_immu;
326
wire                    icpu_err_immu;
327
wire    [3:0]            icpu_tag_immu;
328
wire                    icpu_rty_immu;
329
 
330
//
331
// IMMU and QMEM
332
//
333
wire    [aw-1:0] qmemimmu_adr_immu;
334
wire                    qmemimmu_rty_qmem;
335
wire                    qmemimmu_err_qmem;
336
wire    [3:0]            qmemimmu_tag_qmem;
337
wire                    qmemimmu_cycstb_immu;
338
wire                    qmemimmu_ci_immu;
339
 
340
//
341
// QMEM and IC
342
//
343
wire    [aw-1:0] icqmem_adr_qmem;
344
wire                    icqmem_rty_ic;
345
wire                    icqmem_err_ic;
346
wire    [3:0]            icqmem_tag_ic;
347
wire                    icqmem_cycstb_qmem;
348
wire                    icqmem_ci_qmem;
349
wire    [31:0]           icqmem_dat_ic;
350
wire                    icqmem_ack_ic;
351
 
352
//
353
// QMEM and DC
354
//
355
wire    [aw-1:0] dcqmem_adr_qmem;
356
wire                    dcqmem_rty_dc;
357
wire                    dcqmem_err_dc;
358
wire    [3:0]            dcqmem_tag_dc;
359
wire                    dcqmem_cycstb_qmem;
360
wire                    dcqmem_ci_qmem;
361
wire    [31:0]           dcqmem_dat_dc;
362
wire    [31:0]           dcqmem_dat_qmem;
363
wire                    dcqmem_we_qmem;
364
wire    [3:0]            dcqmem_sel_qmem;
365
wire                    dcqmem_ack_dc;
366
 
367
//
368
// Connection between CPU and PIC
369
//
370
wire    [dw-1:0] spr_dat_pic;
371
wire                    pic_wakeup;
372
wire                    sig_int;
373
 
374
//
375
// Connection between CPU and PM
376
//
377
wire    [dw-1:0] spr_dat_pm;
378
 
379
//
380
// CPU and TT
381
//
382
wire    [dw-1:0] spr_dat_tt;
383
output wire                     sig_tick; // jb
384
 
385
//
386
// Debug port and caches/MMUs
387
//
388
wire    [dw-1:0] spr_dat_du;
389
wire                    du_stall;
390
wire    [dw-1:0] du_addr;
391
wire    [dw-1:0] du_dat_du;
392
wire                    du_read;
393
wire                    du_write;
394
wire    [13:0]           du_except_trig;
395
wire    [13:0]           du_except_stop;
396
wire    [`OR1200_DU_DSR_WIDTH-1:0]     du_dsr;
397
wire    [24:0]           du_dmr1;
398
wire    [dw-1:0] du_dat_cpu;
399
wire    [dw-1:0] du_lsu_store_dat;
400
wire    [dw-1:0] du_lsu_load_dat;
401
wire                    du_hwbkpt;
402
wire                    du_hwbkpt_ls_r = 1'b0;
403
wire                    flushpipe;
404
wire                    ex_freeze;
405
wire                    wb_freeze;
406
wire                    id_void;
407
wire                    ex_void;
408
wire    [31:0]           id_insn;
409
wire    [31:0]           ex_insn;
410
wire    [31:0]           wb_insn;
411
wire    [31:0]           id_pc;
412
wire    [31:0]           ex_pc;
413
wire    [31:0]           wb_pc;
414
wire    [`OR1200_BRANCHOP_WIDTH-1:0]     branch_op;
415
wire    [31:0]           spr_dat_npc;
416
wire    [31:0]           rf_dataw;
417
wire                    abort_ex;
418
wire                    abort_mvspr;
419
 
420
`ifdef OR1200_BIST
421
//
422
// RAM BIST
423
//
424
wire                    mbist_immu_so;
425
wire                    mbist_ic_so;
426
wire                    mbist_dmmu_so;
427
wire                    mbist_dc_so;
428
wire                    mbist_qmem_so;
429
wire                    mbist_immu_si = mbist_si_i;
430
wire                    mbist_ic_si = mbist_immu_so;
431
wire                    mbist_qmem_si = mbist_ic_so;
432
wire                    mbist_dmmu_si = mbist_qmem_so;
433
wire                    mbist_dc_si = mbist_dmmu_so;
434
assign                  mbist_so_o = mbist_dc_so;
435
`endif
436
 
437 483 julius
`ifdef OR1200_RAM_PARITY
438
wire [1:0]               p_err_dc;
439
wire [1:0]               p_err_ic;
440
wire [1:0]               p_err_dmmu;
441
wire [1:0]               p_err_immu;
442
wire                    p_err_rf;
443
 
444
assign mem_parity_err = {p_err_immu,p_err_dmmu,p_err_ic,p_err_dc,p_err_rf};
445
 
446
`endif
447
 
448 350 julius
wire  [3:0] icqmem_sel_qmem;
449
wire  [3:0] icqmem_tag_qmem;
450
wire  [3:0] dcqmem_tag_qmem;
451
 
452
//
453
// Instantiation of Instruction WISHBONE BIU
454
//
455 477 julius
or1200_wb_biu
456
  #(.bl((1 << (`OR1200_ICLS-2))))
457
  iwb_biu(
458 350 julius
        // RISC clk, rst and clock control
459
        .clk(clk_i),
460
        .rst(rst_i),
461
        .clmode(clmode_i),
462
 
463
        // WISHBONE interface
464
        .wb_clk_i(iwb_clk_i),
465
        .wb_rst_i(iwb_rst_i),
466
        .wb_ack_i(iwb_ack_i),
467
        .wb_err_i(iwb_err_i),
468
        .wb_rty_i(iwb_rty_i),
469
        .wb_dat_i(iwb_dat_i),
470
        .wb_cyc_o(iwb_cyc_o),
471
        .wb_adr_o(iwb_adr_o),
472
        .wb_stb_o(iwb_stb_o),
473
        .wb_we_o(iwb_we_o),
474
        .wb_sel_o(iwb_sel_o),
475
        .wb_dat_o(iwb_dat_o),
476
`ifdef OR1200_WB_CAB
477
        .wb_cab_o(iwb_cab_o),
478
`endif
479
`ifdef OR1200_WB_B3
480
        .wb_cti_o(iwb_cti_o),
481
        .wb_bte_o(iwb_bte_o),
482
`endif
483
 
484
        // Internal RISC bus
485
        .biu_dat_i(icbiu_dat_ic),
486
        .biu_adr_i(icbiu_adr_ic_word),
487
        .biu_cyc_i(icbiu_cyc_ic),
488
        .biu_stb_i(icbiu_stb_ic),
489
        .biu_we_i(icbiu_we_ic),
490
        .biu_sel_i(icbiu_sel_ic),
491
        .biu_cab_i(icbiu_cab_ic),
492
        .biu_dat_o(icbiu_dat_biu),
493
        .biu_ack_o(icbiu_ack_biu),
494
        .biu_err_o(icbiu_err_biu)
495
);
496
assign icbiu_adr_ic_word = {icbiu_adr_ic[31:2], 2'h0};
497
 
498
//
499
// Instantiation of Data WISHBONE BIU
500
//
501 477 julius
or1200_wb_biu
502
  #(.bl((1 << (`OR1200_DCLS-2))))
503
  dwb_biu(
504 350 julius
        // RISC clk, rst and clock control
505
        .clk(clk_i),
506
        .rst(rst_i),
507
        .clmode(clmode_i),
508
 
509
        // WISHBONE interface
510
        .wb_clk_i(dwb_clk_i),
511
        .wb_rst_i(dwb_rst_i),
512
        .wb_ack_i(dwb_ack_i),
513
        .wb_err_i(dwb_err_i),
514
        .wb_rty_i(dwb_rty_i),
515
        .wb_dat_i(dwb_dat_i),
516
        .wb_cyc_o(dwb_cyc_o),
517
        .wb_adr_o(dwb_adr_o),
518
        .wb_stb_o(dwb_stb_o),
519
        .wb_we_o(dwb_we_o),
520
        .wb_sel_o(dwb_sel_o),
521
        .wb_dat_o(dwb_dat_o),
522
`ifdef OR1200_WB_CAB
523
        .wb_cab_o(dwb_cab_o),
524
`endif
525
`ifdef OR1200_WB_B3
526
        .wb_cti_o(dwb_cti_o),
527
        .wb_bte_o(dwb_bte_o),
528
`endif
529
 
530
        // Internal RISC bus
531
        .biu_dat_i(sbbiu_dat_sb),
532
        .biu_adr_i(sbbiu_adr_sb),
533
        .biu_cyc_i(sbbiu_cyc_sb),
534
        .biu_stb_i(sbbiu_stb_sb),
535
        .biu_we_i(sbbiu_we_sb),
536
        .biu_sel_i(sbbiu_sel_sb),
537
        .biu_cab_i(sbbiu_cab_sb),
538
        .biu_dat_o(sbbiu_dat_biu),
539
        .biu_ack_o(sbbiu_ack_biu),
540
        .biu_err_o(sbbiu_err_biu)
541
);
542
 
543
//
544
// Instantiation of IMMU
545
//
546
or1200_immu_top or1200_immu_top(
547
        // Rst and clk
548
        .clk(clk_i),
549
        .rst(rst_i),
550
 
551
`ifdef OR1200_BIST
552
        // RAM BIST
553
        .mbist_si_i(mbist_immu_si),
554
        .mbist_so_o(mbist_immu_so),
555
        .mbist_ctrl_i(mbist_ctrl_i),
556
`endif
557
 
558 483 julius
`ifdef OR1200_RAM_PARITY
559
        .p_err(p_err_immu),
560
`endif
561
 
562 350 julius
        // CPU and IMMU
563
        .ic_en(ic_en),
564
        .immu_en(immu_en),
565
        .supv(supv),
566
        .icpu_adr_i(icpu_adr_cpu),
567
        .icpu_cycstb_i(icpu_cycstb_cpu),
568
        .icpu_adr_o(icpu_adr_immu),
569
        .icpu_tag_o(icpu_tag_immu),
570
        .icpu_rty_o(icpu_rty_immu),
571
        .icpu_err_o(icpu_err_immu),
572
 
573
        // SR Interface
574
        .boot_adr_sel_i(boot_adr_sel),
575
 
576
        // SPR access
577
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IMMU]),
578
        .spr_write(spr_we),
579
        .spr_addr(spr_addr),
580
        .spr_dat_i(spr_dat_cpu),
581
        .spr_dat_o(spr_dat_immu),
582
 
583
        // QMEM and IMMU
584
        .qmemimmu_rty_i(qmemimmu_rty_qmem),
585
        .qmemimmu_err_i(qmemimmu_err_qmem),
586
        .qmemimmu_tag_i(qmemimmu_tag_qmem),
587
        .qmemimmu_adr_o(qmemimmu_adr_immu),
588
        .qmemimmu_cycstb_o(qmemimmu_cycstb_immu),
589
        .qmemimmu_ci_o(qmemimmu_ci_immu)
590
);
591
 
592
//
593
// Instantiation of Instruction Cache
594
//
595
or1200_ic_top or1200_ic_top(
596
        .clk(clk_i),
597
        .rst(rst_i),
598
 
599
`ifdef OR1200_BIST
600
        // RAM BIST
601
        .mbist_si_i(mbist_ic_si),
602
        .mbist_so_o(mbist_ic_so),
603
        .mbist_ctrl_i(mbist_ctrl_i),
604
`endif
605 483 julius
`ifdef OR1200_RAM_PARITY
606
        .p_err(p_err_ic),
607
`endif
608 350 julius
        // IC and QMEM
609
        .ic_en(ic_en),
610
        .icqmem_adr_i(icqmem_adr_qmem),
611
        .icqmem_cycstb_i(icqmem_cycstb_qmem),
612
        .icqmem_ci_i(icqmem_ci_qmem),
613
        .icqmem_sel_i(icqmem_sel_qmem),
614
        .icqmem_tag_i(icqmem_tag_qmem),
615
        .icqmem_dat_o(icqmem_dat_ic),
616
        .icqmem_ack_o(icqmem_ack_ic),
617
        .icqmem_rty_o(icqmem_rty_ic),
618
        .icqmem_err_o(icqmem_err_ic),
619
        .icqmem_tag_o(icqmem_tag_ic),
620
 
621
        // SPR access
622
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_IC]),
623
        .spr_write(spr_we),
624
        .spr_dat_i(spr_dat_cpu),
625
 
626
        // IC and BIU
627
        .icbiu_dat_o(icbiu_dat_ic),
628
        .icbiu_adr_o(icbiu_adr_ic),
629
        .icbiu_cyc_o(icbiu_cyc_ic),
630
        .icbiu_stb_o(icbiu_stb_ic),
631
        .icbiu_we_o(icbiu_we_ic),
632
        .icbiu_sel_o(icbiu_sel_ic),
633
        .icbiu_cab_o(icbiu_cab_ic),
634
        .icbiu_dat_i(icbiu_dat_biu),
635
        .icbiu_ack_i(icbiu_ack_biu),
636
        .icbiu_err_i(icbiu_err_biu)
637
);
638
 
639
//
640
// Instantiation of Instruction Cache
641
//
642
or1200_cpu or1200_cpu(
643
        .clk(clk_i),
644
        .rst(rst_i),
645
 
646
        // Connection QMEM and IFETCHER inside CPU
647
        .ic_en(ic_en),
648
        .icpu_adr_o(icpu_adr_cpu),
649
        .icpu_cycstb_o(icpu_cycstb_cpu),
650
        .icpu_sel_o(icpu_sel_cpu),
651
        .icpu_tag_o(icpu_tag_cpu),
652
        .icpu_dat_i(icpu_dat_qmem),
653
        .icpu_ack_i(icpu_ack_qmem),
654
        .icpu_rty_i(icpu_rty_immu),
655
        .icpu_adr_i(icpu_adr_immu),
656
        .icpu_err_i(icpu_err_immu),
657
        .icpu_tag_i(icpu_tag_immu),
658
 
659
        // Connection CPU to external Debug port
660
        .id_void(id_void),
661
        .id_insn(id_insn),
662
        .ex_void(ex_void),
663
        .ex_insn(ex_insn),
664
        .ex_freeze(ex_freeze),
665
        .wb_insn(wb_insn),
666
        .wb_freeze(wb_freeze),
667
        .id_pc(id_pc),
668
        .ex_pc(ex_pc),
669
        .wb_pc(wb_pc),
670
        .branch_op(branch_op),
671
        .rf_dataw(rf_dataw),
672
        .ex_flushpipe(flushpipe),
673
        .du_stall(du_stall),
674
        .du_addr(du_addr),
675
        .du_dat_du(du_dat_du),
676
        .du_read(du_read),
677
        .du_write(du_write),
678
        .du_except_trig(du_except_trig),
679
        .du_except_stop(du_except_stop),
680
        .du_dsr(du_dsr),
681
        .du_dmr1(du_dmr1),
682
        .du_hwbkpt(du_hwbkpt),
683
        .du_hwbkpt_ls_r(du_hwbkpt_ls_r),
684
        .du_dat_cpu(du_dat_cpu),
685
        .du_lsu_store_dat(du_lsu_store_dat),
686
        .du_lsu_load_dat(du_lsu_load_dat),
687
        .abort_mvspr(abort_mvspr),
688
        .abort_ex(abort_ex),
689
 
690
        // Connection IMMU and CPU internally
691
        .immu_en(immu_en),
692
 
693
        // Connection QMEM and CPU
694
        .dc_en(dc_en),
695
        .dcpu_adr_o(dcpu_adr_cpu),
696
        .dcpu_cycstb_o(dcpu_cycstb_cpu),
697
        .dcpu_we_o(dcpu_we_cpu),
698
        .dcpu_sel_o(dcpu_sel_cpu),
699
        .dcpu_tag_o(dcpu_tag_cpu),
700
        .dcpu_dat_o(dcpu_dat_cpu),
701
        .dcpu_dat_i(dcpu_dat_qmem),
702
        .dcpu_ack_i(dcpu_ack_qmem),
703
        .dcpu_rty_i(dcpu_rty_qmem),
704
        .dcpu_err_i(dcpu_err_dmmu),
705
        .dcpu_tag_i(dcpu_tag_dmmu),
706
        .dc_no_writethrough(dc_no_writethrough),
707
 
708
        // Connection DMMU and CPU internally
709
        .dmmu_en(dmmu_en),
710
 
711
        // SR Interface
712
        .boot_adr_sel_i(boot_adr_sel),
713
 
714
        // SB Enable
715
        .sb_en(sb_en),
716
 
717
        // Connection PIC and CPU's EXCEPT
718
        .sig_int(sig_int),
719
        .sig_tick(sig_tick),
720
 
721
        // SPRs
722
        .supv(supv),
723
        .spr_addr(spr_addr),
724
        .spr_dat_cpu(spr_dat_cpu),
725
        .spr_dat_pic(spr_dat_pic),
726
        .spr_dat_tt(spr_dat_tt),
727
        .spr_dat_pm(spr_dat_pm),
728
        .spr_dat_dmmu(spr_dat_dmmu),
729
        .spr_dat_immu(spr_dat_immu),
730
        .spr_dat_du(spr_dat_du),
731
        .spr_dat_npc(spr_dat_npc),
732
        .spr_cs(spr_cs),
733
        .spr_we(spr_we),
734
        .mtspr_dc_done(mtspr_dc_done)
735 483 julius
`ifdef OR1200_RAM_PARITY
736
        // Register file parity error indicator
737
        , .p_err_rf(p_err_rf)
738
`endif
739
 
740 350 julius
);
741
 
742
//
743
// Instantiation of DMMU
744
//
745
or1200_dmmu_top or1200_dmmu_top(
746
        // Rst and clk
747
        .clk(clk_i),
748
        .rst(rst_i),
749
 
750
`ifdef OR1200_BIST
751
        // RAM BIST
752
        .mbist_si_i(mbist_dmmu_si),
753
        .mbist_so_o(mbist_dmmu_so),
754
        .mbist_ctrl_i(mbist_ctrl_i),
755
`endif
756
 
757 483 julius
`ifdef OR1200_RAM_PARITY
758
        .p_err(p_err_dmmu),
759
`endif
760
 
761 350 julius
        // CPU i/f
762
        .dc_en(dc_en),
763
        .dmmu_en(dmmu_en),
764
        .supv(supv),
765
        .dcpu_adr_i(dcpu_adr_cpu),
766
        .dcpu_cycstb_i(dcpu_cycstb_cpu),
767
        .dcpu_we_i(dcpu_we_cpu),
768
        .dcpu_tag_o(dcpu_tag_dmmu),
769
        .dcpu_err_o(dcpu_err_dmmu),
770
 
771
        // SPR access
772
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DMMU]),
773
        .spr_write(spr_we),
774
        .spr_addr(spr_addr),
775
        .spr_dat_i(spr_dat_cpu),
776
        .spr_dat_o(spr_dat_dmmu),
777
 
778
        // QMEM and DMMU
779
        .qmemdmmu_err_i(qmemdmmu_err_qmem),
780
        .qmemdmmu_tag_i(qmemdmmu_tag_qmem),
781
        .qmemdmmu_adr_o(qmemdmmu_adr_dmmu),
782
        .qmemdmmu_cycstb_o(qmemdmmu_cycstb_dmmu),
783
        .qmemdmmu_ci_o(qmemdmmu_ci_dmmu)
784
);
785
 
786
//
787
// Instantiation of Data Cache
788
//
789
or1200_dc_top or1200_dc_top(
790
        .clk(clk_i),
791
        .rst(rst_i),
792
 
793
`ifdef OR1200_BIST
794
        // RAM BIST
795
        .mbist_si_i(mbist_dc_si),
796
        .mbist_so_o(mbist_dc_so),
797
        .mbist_ctrl_i(mbist_ctrl_i),
798
`endif
799 483 julius
`ifdef OR1200_RAM_PARITY
800
        .p_err(p_err_dc),
801
`endif
802 350 julius
        // DC and QMEM
803
        .dc_en(dc_en),
804
        .dcqmem_adr_i(dcqmem_adr_qmem),
805
        .dcqmem_cycstb_i(dcqmem_cycstb_qmem),
806
        .dcqmem_ci_i(dcqmem_ci_qmem),
807
        .dcqmem_we_i(dcqmem_we_qmem),
808
        .dcqmem_sel_i(dcqmem_sel_qmem),
809
        .dcqmem_tag_i(dcqmem_tag_qmem),
810
        .dcqmem_dat_i(dcqmem_dat_qmem),
811
        .dcqmem_dat_o(dcqmem_dat_dc),
812
        .dcqmem_ack_o(dcqmem_ack_dc),
813
        .dcqmem_rty_o(dcqmem_rty_dc),
814
        .dcqmem_err_o(dcqmem_err_dc),
815
        .dcqmem_tag_o(dcqmem_tag_dc),
816
 
817
        .dc_no_writethrough(dc_no_writethrough),
818
 
819
        // SPR access
820
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DC]),
821
        .spr_addr(spr_addr),
822
        .spr_write(spr_we),
823
        .spr_dat_i(spr_dat_cpu),
824
        .mtspr_dc_done(mtspr_dc_done),
825
 
826
        // DC and BIU
827
        .dcsb_dat_o(dcsb_dat_dc),
828
        .dcsb_adr_o(dcsb_adr_dc),
829
        .dcsb_cyc_o(dcsb_cyc_dc),
830
        .dcsb_stb_o(dcsb_stb_dc),
831
        .dcsb_we_o(dcsb_we_dc),
832
        .dcsb_sel_o(dcsb_sel_dc),
833
        .dcsb_cab_o(dcsb_cab_dc),
834
        .dcsb_dat_i(dcsb_dat_sb),
835
        .dcsb_ack_i(dcsb_ack_sb),
836
        .dcsb_err_i(dcsb_err_sb)
837
);
838
 
839
//
840
// Instantiation of embedded memory - qmem
841
//
842
or1200_qmem_top or1200_qmem_top(
843
        .clk(clk_i),
844
        .rst(rst_i),
845
 
846
`ifdef OR1200_BIST
847
        // RAM BIST
848
        .mbist_si_i(mbist_qmem_si),
849
        .mbist_so_o(mbist_qmem_so),
850
        .mbist_ctrl_i(mbist_ctrl_i),
851
`endif
852
 
853
        // QMEM and CPU/IMMU
854
        .qmemimmu_adr_i(qmemimmu_adr_immu),
855
        .qmemimmu_cycstb_i(qmemimmu_cycstb_immu),
856
        .qmemimmu_ci_i(qmemimmu_ci_immu),
857
        .qmemicpu_sel_i(icpu_sel_cpu),
858
        .qmemicpu_tag_i(icpu_tag_cpu),
859
        .qmemicpu_dat_o(icpu_dat_qmem),
860
        .qmemicpu_ack_o(icpu_ack_qmem),
861
        .qmemimmu_rty_o(qmemimmu_rty_qmem),
862
        .qmemimmu_err_o(qmemimmu_err_qmem),
863
        .qmemimmu_tag_o(qmemimmu_tag_qmem),
864
 
865
        // QMEM and IC
866
        .icqmem_adr_o(icqmem_adr_qmem),
867
        .icqmem_cycstb_o(icqmem_cycstb_qmem),
868
        .icqmem_ci_o(icqmem_ci_qmem),
869
        .icqmem_sel_o(icqmem_sel_qmem),
870
        .icqmem_tag_o(icqmem_tag_qmem),
871
        .icqmem_dat_i(icqmem_dat_ic),
872
        .icqmem_ack_i(icqmem_ack_ic),
873
        .icqmem_rty_i(icqmem_rty_ic),
874
        .icqmem_err_i(icqmem_err_ic),
875
        .icqmem_tag_i(icqmem_tag_ic),
876
 
877
        // QMEM and CPU/DMMU
878
        .qmemdmmu_adr_i(qmemdmmu_adr_dmmu),
879
        .qmemdmmu_cycstb_i(qmemdmmu_cycstb_dmmu),
880
        .qmemdmmu_ci_i(qmemdmmu_ci_dmmu),
881
        .qmemdcpu_we_i(dcpu_we_cpu),
882
        .qmemdcpu_sel_i(dcpu_sel_cpu),
883
        .qmemdcpu_tag_i(dcpu_tag_cpu),
884
        .qmemdcpu_dat_i(dcpu_dat_cpu),
885
        .qmemdcpu_dat_o(dcpu_dat_qmem),
886
        .qmemdcpu_ack_o(dcpu_ack_qmem),
887
        .qmemdcpu_rty_o(dcpu_rty_qmem),
888
        .qmemdmmu_err_o(qmemdmmu_err_qmem),
889
        .qmemdmmu_tag_o(qmemdmmu_tag_qmem),
890
 
891
        // QMEM and DC
892
        .dcqmem_adr_o(dcqmem_adr_qmem),
893
        .dcqmem_cycstb_o(dcqmem_cycstb_qmem),
894
        .dcqmem_ci_o(dcqmem_ci_qmem),
895
        .dcqmem_we_o(dcqmem_we_qmem),
896
        .dcqmem_sel_o(dcqmem_sel_qmem),
897
        .dcqmem_tag_o(dcqmem_tag_qmem),
898
        .dcqmem_dat_o(dcqmem_dat_qmem),
899
        .dcqmem_dat_i(dcqmem_dat_dc),
900
        .dcqmem_ack_i(dcqmem_ack_dc),
901
        .dcqmem_rty_i(dcqmem_rty_dc),
902
        .dcqmem_err_i(dcqmem_err_dc),
903
        .dcqmem_tag_i(dcqmem_tag_dc)
904
);
905
 
906
//
907
// Instantiation of Store Buffer
908
//
909
or1200_sb or1200_sb(
910
        // RISC clock, reset
911
        .clk(clk_i),
912
        .rst(rst_i),
913
 
914
        // Internal RISC bus (SB)
915
        .sb_en(sb_en),
916
 
917
        // Internal RISC bus (DC<->SB)
918
        .dcsb_dat_i(dcsb_dat_dc),
919
        .dcsb_adr_i(dcsb_adr_dc),
920
        .dcsb_cyc_i(dcsb_cyc_dc),
921
        .dcsb_stb_i(dcsb_stb_dc),
922
        .dcsb_we_i(dcsb_we_dc),
923
        .dcsb_sel_i(dcsb_sel_dc),
924
        .dcsb_cab_i(dcsb_cab_dc),
925
        .dcsb_dat_o(dcsb_dat_sb),
926
        .dcsb_ack_o(dcsb_ack_sb),
927
        .dcsb_err_o(dcsb_err_sb),
928
 
929
        // SB and BIU
930
        .sbbiu_dat_o(sbbiu_dat_sb),
931
        .sbbiu_adr_o(sbbiu_adr_sb),
932
        .sbbiu_cyc_o(sbbiu_cyc_sb),
933
        .sbbiu_stb_o(sbbiu_stb_sb),
934
        .sbbiu_we_o(sbbiu_we_sb),
935
        .sbbiu_sel_o(sbbiu_sel_sb),
936
        .sbbiu_cab_o(sbbiu_cab_sb),
937
        .sbbiu_dat_i(sbbiu_dat_biu),
938
        .sbbiu_ack_i(sbbiu_ack_biu),
939
        .sbbiu_err_i(sbbiu_err_biu)
940
);
941
 
942
//
943
// Instantiation of Debug Unit
944
//
945
or1200_du or1200_du(
946
        // RISC Internal Interface
947
        .clk(clk_i),
948
        .rst(rst_i),
949
        .dcpu_cycstb_i(dcpu_cycstb_cpu),
950
        .dcpu_we_i(dcpu_we_cpu),
951
        .dcpu_adr_i(dcpu_adr_cpu),
952
        .dcpu_dat_lsu(dcpu_dat_cpu),
953
        .dcpu_dat_dc(dcpu_dat_qmem),
954
        .icpu_cycstb_i(icpu_cycstb_cpu),
955
        .ex_freeze(ex_freeze),
956
        .branch_op(branch_op),
957
        .ex_insn(ex_insn),
958
        .id_pc(id_pc),
959
        .du_dsr(du_dsr),
960
        .du_dmr1(du_dmr1),
961
 
962
        // For Trace buffer
963
        .spr_dat_npc(spr_dat_npc),
964
        .rf_dataw(rf_dataw),
965
 
966
        // DU's access to SPR unit
967
        .du_stall(du_stall),
968
        .du_addr(du_addr),
969
        .du_dat_i(du_dat_cpu),
970
        .du_dat_o(du_dat_du),
971
        .du_read(du_read),
972
        .du_write(du_write),
973
        .du_except_stop(du_except_stop),
974
        .du_hwbkpt(du_hwbkpt),
975
 
976
        // Access to DU's SPRs
977
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_DU]),
978
        .spr_write(spr_we),
979
        .spr_addr(spr_addr),
980
        .spr_dat_i(spr_dat_cpu),
981
        .spr_dat_o(spr_dat_du),
982
 
983
        // External Debug Interface
984
        .dbg_stall_i(dbg_stall_i),
985
        .dbg_ewt_i(dbg_ewt_i),
986
        .dbg_lss_o(dbg_lss_o),
987
        .dbg_is_o(dbg_is_o),
988
        .dbg_wp_o(dbg_wp_o),
989
        .dbg_bp_o(dbg_bp_o),
990
        .dbg_stb_i(dbg_stb_i),
991
        .dbg_we_i(dbg_we_i),
992
        .dbg_adr_i(dbg_adr_i),
993
        .dbg_dat_i(dbg_dat_i),
994
        .dbg_dat_o(dbg_dat_o),
995
        .dbg_ack_o(dbg_ack_o)
996
);
997
 
998
//
999
// Programmable interrupt controller
1000
//
1001
or1200_pic or1200_pic(
1002
        // RISC Internal Interface
1003
        .clk(clk_i),
1004
        .rst(rst_i),
1005
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_PIC]),
1006
        .spr_write(spr_we),
1007
        .spr_addr(spr_addr),
1008
        .spr_dat_i(spr_dat_cpu),
1009
        .spr_dat_o(spr_dat_pic),
1010
        .pic_wakeup(pic_wakeup),
1011
        .intr(sig_int),
1012
 
1013
        // PIC Interface
1014
        .pic_int(pic_ints_i)
1015
);
1016
 
1017
//
1018
// Instantiation of Tick timer
1019
//
1020
or1200_tt or1200_tt(
1021
        // RISC Internal Interface
1022
        .clk(clk_i),
1023
        .rst(rst_i),
1024
        .du_stall(du_stall),
1025
        .spr_cs(spr_cs[`OR1200_SPR_GROUP_TT]),
1026
        .spr_write(spr_we),
1027
        .spr_addr(spr_addr),
1028
        .spr_dat_i(spr_dat_cpu),
1029
        .spr_dat_o(spr_dat_tt),
1030
        .intr(sig_tick)
1031
);
1032
 
1033
//
1034
// Instantiation of Power Management
1035
//
1036
or1200_pm or1200_pm(
1037
        // RISC Internal Interface
1038
        .clk(clk_i),
1039
        .rst(rst_i),
1040
        .pic_wakeup(pic_wakeup),
1041
        .spr_write(spr_we),
1042
        .spr_addr(spr_addr),
1043
        .spr_dat_i(spr_dat_cpu),
1044
        .spr_dat_o(spr_dat_pm),
1045
 
1046
        // Power Management Interface
1047
        .pm_cpustall(pm_cpustall_i),
1048
        .pm_clksd(pm_clksd_o),
1049
        .pm_dc_gate(pm_dc_gate_o),
1050
        .pm_ic_gate(pm_ic_gate_o),
1051
        .pm_dmmu_gate(pm_dmmu_gate_o),
1052
        .pm_immu_gate(pm_immu_gate_o),
1053
        .pm_tt_gate(pm_tt_gate_o),
1054
        .pm_cpu_gate(pm_cpu_gate_o),
1055
        .pm_wakeup(pm_wakeup_o),
1056
        .pm_lvolt(pm_lvolt_o)
1057
);
1058
 
1059
 
1060
endmodule

powered by: WebSVN 2.1.0

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