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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [orpsocv2/] [boards/] [generic/] [ft/] [rtl/] [verilog/] [orpsoc_top/] [orpsoc_top.v] - Blame information for rev 483

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 483 julius
//////////////////////////////////////////////////////////////////////
2
///                                                               //// 
3
/// ORPSoC top level                                              ////
4
///                                                               ////
5
/// Define I/O ports, instantiate modules                         ////
6
///                                                               ////
7
/// Julius Baxter, julius@opencores.org                           ////
8
///                                                               ////
9
//////////////////////////////////////////////////////////////////////
10
////                                                              ////
11
//// Copyright (C) 2009, 2010 Authors and OPENCORES.ORG           ////
12
////                                                              ////
13
//// This source file may be used and distributed without         ////
14
//// restriction provided that this copyright statement is not    ////
15
//// removed from the file and that any derivative work contains  ////
16
//// the original copyright notice and the associated disclaimer. ////
17
////                                                              ////
18
//// This source file is free software; you can redistribute it   ////
19
//// and/or modify it under the terms of the GNU Lesser General   ////
20
//// Public License as published by the Free Software Foundation; ////
21
//// either version 2.1 of the License, or (at your option) any   ////
22
//// later version.                                               ////
23
////                                                              ////
24
//// This source is distributed in the hope that it will be       ////
25
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
26
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
27
//// PURPOSE.  See the GNU Lesser General Public License for more ////
28
//// details.                                                     ////
29
////                                                              ////
30
//// You should have received a copy of the GNU Lesser General    ////
31
//// Public License along with this source; if not, download it   ////
32
//// from http://www.opencores.org/lgpl.shtml                     ////
33
////                                                              ////
34
//////////////////////////////////////////////////////////////////////
35
 
36
`include "orpsoc-defines.v"
37
`include "or1200_defines.v"
38
 
39
module orpsoc_top
40
  (
41
`ifdef JTAG_DEBUG
42
    tdo_pad_o, tms_pad_i, tck_pad_i, tdi_pad_i,
43
`endif
44
    clk_pad_i,
45
    rst_n_pad_i
46
    );
47
 
48
`include "orpsoc-params.v"
49
 
50
   input clk_pad_i;
51
   input rst_n_pad_i;
52
 
53
`ifdef JTAG_DEBUG
54
   output tdo_pad_o;
55
   input  tms_pad_i;
56
   input  tck_pad_i;
57
   input  tdi_pad_i;
58
`endif
59
 
60
 
61
   ////////////////////////////////////////////////////////////////////////
62
   //
63
   // Clock and reset generation module
64
   // 
65
   ////////////////////////////////////////////////////////////////////////
66
 
67
   //
68
   // Wires
69
   //
70
   wire   async_rst;
71
   wire   wb_clk, wb_rst;
72
   wire   dbg_tck;
73
 
74
 
75
   clkgen clkgen0
76
     (
77
 
78
      .clk_pad_i             (clk_pad_i),
79
 
80
      .async_rst_o            (async_rst),
81
 
82
      .wb_clk_o                  (wb_clk),
83
      .wb_rst_o                  (wb_rst),
84
 
85
`ifdef JTAG_DEBUG
86
      .tck_pad_i                 (tck_pad_i),
87
      .dbg_tck_o                 (dbg_tck),
88
`endif
89
 
90
      // Asynchronous active low reset
91
      .rst_n_pad_i               (rst_n_pad_i)
92
      );
93
 
94
 
95
   ////////////////////////////////////////////////////////////////////////
96
   //
97
   // Arbiter
98
   // 
99
   ////////////////////////////////////////////////////////////////////////
100
 
101
   // Wire naming convention:
102
   // First: wishbone master or slave (wbm/wbs)
103
   // Second: Which bus it's on instruction or data (i/d)
104
   // Third: Between which module and the arbiter the wires are
105
   // Fourth: Signal name
106
   // Fifth: Direction relative to module (not bus/arbiter!)
107
   //        ie. wbm_d_or12_adr_o is address OUT from the or1200
108
 
109
   // OR1200 instruction bus wires
110
   wire [wb_aw-1:0]            wbm_i_or12_adr_o;
111
   wire [wb_dw-1:0]            wbm_i_or12_dat_o;
112
   wire [3:0]                  wbm_i_or12_sel_o;
113
   wire                       wbm_i_or12_we_o;
114
   wire                       wbm_i_or12_cyc_o;
115
   wire                       wbm_i_or12_stb_o;
116
   wire [2:0]                  wbm_i_or12_cti_o;
117
   wire [1:0]                  wbm_i_or12_bte_o;
118
 
119
   wire [wb_dw-1:0]            wbm_i_or12_dat_i;
120
   wire                       wbm_i_or12_ack_i;
121
   wire                       wbm_i_or12_err_i;
122
   wire                       wbm_i_or12_rty_i;
123
 
124
   // OR1200 data bus wires   
125
   wire [wb_aw-1:0]            wbm_d_or12_adr_o;
126
   wire [wb_dw-1:0]            wbm_d_or12_dat_o;
127
   wire [3:0]                  wbm_d_or12_sel_o;
128
   wire                       wbm_d_or12_we_o;
129
   wire                       wbm_d_or12_cyc_o;
130
   wire                       wbm_d_or12_stb_o;
131
   wire [2:0]                  wbm_d_or12_cti_o;
132
   wire [1:0]                  wbm_d_or12_bte_o;
133
 
134
   wire [wb_dw-1:0]            wbm_d_or12_dat_i;
135
   wire                       wbm_d_or12_ack_i;
136
   wire                       wbm_d_or12_err_i;
137
   wire                       wbm_d_or12_rty_i;
138
 
139
   // Debug interface bus wires   
140
   wire [wb_aw-1:0]            wbm_d_dbg_adr_o;
141
   wire [wb_dw-1:0]            wbm_d_dbg_dat_o;
142
   wire [3:0]                  wbm_d_dbg_sel_o;
143
   wire                       wbm_d_dbg_we_o;
144
   wire                       wbm_d_dbg_cyc_o;
145
   wire                       wbm_d_dbg_stb_o;
146
   wire [2:0]                  wbm_d_dbg_cti_o;
147
   wire [1:0]                  wbm_d_dbg_bte_o;
148
 
149
   wire [wb_dw-1:0]            wbm_d_dbg_dat_i;
150
   wire                       wbm_d_dbg_ack_i;
151
   wire                       wbm_d_dbg_err_i;
152
   wire                       wbm_d_dbg_rty_i;
153
 
154
   // Byte bus bridge master signals
155
   wire [wb_aw-1:0]            wbm_b_d_adr_o;
156
   wire [wb_dw-1:0]            wbm_b_d_dat_o;
157
   wire [3:0]                  wbm_b_d_sel_o;
158
   wire                       wbm_b_d_we_o;
159
   wire                       wbm_b_d_cyc_o;
160
   wire                       wbm_b_d_stb_o;
161
   wire [2:0]                  wbm_b_d_cti_o;
162
   wire [1:0]                  wbm_b_d_bte_o;
163
 
164
   wire [wb_dw-1:0]            wbm_b_d_dat_i;
165
   wire                       wbm_b_d_ack_i;
166
   wire                       wbm_b_d_err_i;
167
   wire                       wbm_b_d_rty_i;
168
 
169
   // Instruction bus slave wires //
170
 
171
   // rom0 instruction bus wires
172
   wire [31:0]                 wbs_i_rom0_adr_i;
173
   wire [wbs_i_rom0_data_width-1:0] wbs_i_rom0_dat_i;
174
   wire [3:0]                        wbs_i_rom0_sel_i;
175
   wire                             wbs_i_rom0_we_i;
176
   wire                             wbs_i_rom0_cyc_i;
177
   wire                             wbs_i_rom0_stb_i;
178
   wire [2:0]                        wbs_i_rom0_cti_i;
179
   wire [1:0]                        wbs_i_rom0_bte_i;
180
   wire [wbs_i_rom0_data_width-1:0] wbs_i_rom0_dat_o;
181
   wire                             wbs_i_rom0_ack_o;
182
   wire                             wbs_i_rom0_err_o;
183
   wire                             wbs_i_rom0_rty_o;
184
 
185
   // mc0 instruction bus wires
186
   wire [31:0]                       wbs_i_mc0_adr_i;
187
   wire [31:0]                       wbs_i_mc0_dat_i;
188
   wire [3:0]                        wbs_i_mc0_sel_i;
189
   wire                             wbs_i_mc0_we_i;
190
   wire                             wbs_i_mc0_cyc_i;
191
   wire                             wbs_i_mc0_stb_i;
192
   wire [2:0]                        wbs_i_mc0_cti_i;
193
   wire [1:0]                        wbs_i_mc0_bte_i;
194
   wire [31:0]                       wbs_i_mc0_dat_o;
195
   wire                             wbs_i_mc0_ack_o;
196
   wire                             wbs_i_mc0_err_o;
197
   wire                             wbs_i_mc0_rty_o;
198
 
199
   // Data bus slave wires //
200
 
201
   // mc0 data bus wires
202
   wire [31:0]                       wbs_d_mc0_adr_i;
203
   wire [31:0]                       wbs_d_mc0_dat_i;
204
   wire [3:0]                        wbs_d_mc0_sel_i;
205
   wire                             wbs_d_mc0_we_i;
206
   wire                             wbs_d_mc0_cyc_i;
207
   wire                             wbs_d_mc0_stb_i;
208
   wire [2:0]                        wbs_d_mc0_cti_i;
209
   wire [1:0]                        wbs_d_mc0_bte_i;
210
   wire [31:0]                       wbs_d_mc0_dat_o;
211
   wire                             wbs_d_mc0_ack_o;
212
   wire                             wbs_d_mc0_err_o;
213
   wire                             wbs_d_mc0_rty_o;
214
 
215
   // memory parity error handler wires
216
   wire [31:0]                        wbs_d_peh_adr_i;
217
   wire [7:0]                         wbs_d_peh_dat_i;
218
   wire [3:0]                         wbs_d_peh_sel_i;
219
   wire                              wbs_d_peh_we_i;
220
   wire                              wbs_d_peh_cyc_i;
221
   wire                              wbs_d_peh_stb_i;
222
   wire [2:0]                         wbs_d_peh_cti_i;
223
   wire [1:0]                         wbs_d_peh_bte_i;
224
   wire [7:0]                         wbs_d_peh_dat_o;
225
   wire                              wbs_d_peh_ack_o;
226
   wire                              wbs_d_peh_err_o;
227
   wire                              wbs_d_peh_rty_o;
228
 
229
   //
230
   // Wishbone instruction bus arbiter
231
   //
232
 
233
   arbiter_ibus arbiter_ibus0
234
     (
235
      // Instruction Bus Master
236
      // Inputs to arbiter from master
237
      .wbm_adr_o                        (wbm_i_or12_adr_o),
238
      .wbm_dat_o                        (wbm_i_or12_dat_o),
239
      .wbm_sel_o                        (wbm_i_or12_sel_o),
240
      .wbm_we_o                         (wbm_i_or12_we_o),
241
      .wbm_cyc_o                        (wbm_i_or12_cyc_o),
242
      .wbm_stb_o                        (wbm_i_or12_stb_o),
243
      .wbm_cti_o                        (wbm_i_or12_cti_o),
244
      .wbm_bte_o                        (wbm_i_or12_bte_o),
245
      // Outputs to master from arbiter
246
      .wbm_dat_i                        (wbm_i_or12_dat_i),
247
      .wbm_ack_i                        (wbm_i_or12_ack_i),
248
      .wbm_err_i                        (wbm_i_or12_err_i),
249
      .wbm_rty_i                        (wbm_i_or12_rty_i),
250
 
251
      // Slave 0
252
      // Inputs to slave from arbiter
253
      .wbs0_adr_i                       (wbs_i_rom0_adr_i),
254
      .wbs0_dat_i                       (wbs_i_rom0_dat_i),
255
      .wbs0_sel_i                       (wbs_i_rom0_sel_i),
256
      .wbs0_we_i                        (wbs_i_rom0_we_i),
257
      .wbs0_cyc_i                       (wbs_i_rom0_cyc_i),
258
      .wbs0_stb_i                       (wbs_i_rom0_stb_i),
259
      .wbs0_cti_i                       (wbs_i_rom0_cti_i),
260
      .wbs0_bte_i                       (wbs_i_rom0_bte_i),
261
      // Outputs from slave to arbiter      
262
      .wbs0_dat_o                       (wbs_i_rom0_dat_o),
263
      .wbs0_ack_o                       (wbs_i_rom0_ack_o),
264
      .wbs0_err_o                       (wbs_i_rom0_err_o),
265
      .wbs0_rty_o                       (wbs_i_rom0_rty_o),
266
 
267
      // Slave 1
268
      // Inputs to slave from arbiter
269
      .wbs1_adr_i                       (wbs_i_mc0_adr_i),
270
      .wbs1_dat_i                       (wbs_i_mc0_dat_i),
271
      .wbs1_sel_i                       (wbs_i_mc0_sel_i),
272
      .wbs1_we_i                        (wbs_i_mc0_we_i),
273
      .wbs1_cyc_i                       (wbs_i_mc0_cyc_i),
274
      .wbs1_stb_i                       (wbs_i_mc0_stb_i),
275
      .wbs1_cti_i                       (wbs_i_mc0_cti_i),
276
      .wbs1_bte_i                       (wbs_i_mc0_bte_i),
277
      // Outputs from slave to arbiter
278
      .wbs1_dat_o                       (wbs_i_mc0_dat_o),
279
      .wbs1_ack_o                       (wbs_i_mc0_ack_o),
280
      .wbs1_err_o                       (wbs_i_mc0_err_o),
281
      .wbs1_rty_o                       (wbs_i_mc0_rty_o),
282
 
283
      // Clock, reset inputs
284
      .wb_clk                           (wb_clk),
285
      .wb_rst                           (wb_rst));
286
 
287
   defparam arbiter_ibus0.wb_addr_match_width = ibus_arb_addr_match_width;
288
 
289
   defparam arbiter_ibus0.slave0_adr = ibus_arb_slave0_adr; // ROM
290
   defparam arbiter_ibus0.slave1_adr = ibus_arb_slave1_adr; // Main memory
291
 
292
   //
293
   // Wishbone data bus arbiter
294
   //
295
 
296
   arbiter_dbus arbiter_dbus0
297
     (
298
      // Master 0
299
      // Inputs to arbiter from master
300
      .wbm0_adr_o                       (wbm_d_or12_adr_o),
301
      .wbm0_dat_o                       (wbm_d_or12_dat_o),
302
      .wbm0_sel_o                       (wbm_d_or12_sel_o),
303
      .wbm0_we_o                        (wbm_d_or12_we_o),
304
      .wbm0_cyc_o                       (wbm_d_or12_cyc_o),
305
      .wbm0_stb_o                       (wbm_d_or12_stb_o),
306
      .wbm0_cti_o                       (wbm_d_or12_cti_o),
307
      .wbm0_bte_o                       (wbm_d_or12_bte_o),
308
      // Outputs to master from arbiter
309
      .wbm0_dat_i                       (wbm_d_or12_dat_i),
310
      .wbm0_ack_i                       (wbm_d_or12_ack_i),
311
      .wbm0_err_i                       (wbm_d_or12_err_i),
312
      .wbm0_rty_i                       (wbm_d_or12_rty_i),
313
 
314
      // Master 0
315
      // Inputs to arbiter from master
316
      .wbm1_adr_o                       (wbm_d_dbg_adr_o),
317
      .wbm1_dat_o                       (wbm_d_dbg_dat_o),
318
      .wbm1_we_o                        (wbm_d_dbg_we_o),
319
      .wbm1_cyc_o                       (wbm_d_dbg_cyc_o),
320
      .wbm1_sel_o                       (wbm_d_dbg_sel_o),
321
      .wbm1_stb_o                       (wbm_d_dbg_stb_o),
322
      .wbm1_cti_o                       (wbm_d_dbg_cti_o),
323
      .wbm1_bte_o                       (wbm_d_dbg_bte_o),
324
      // Outputs to master from arbiter      
325
      .wbm1_dat_i                       (wbm_d_dbg_dat_i),
326
      .wbm1_ack_i                       (wbm_d_dbg_ack_i),
327
      .wbm1_err_i                       (wbm_d_dbg_err_i),
328
      .wbm1_rty_i                       (wbm_d_dbg_rty_i),
329
 
330
      // Slaves
331
 
332
      .wbs0_adr_i                       (wbs_d_mc0_adr_i),
333
      .wbs0_dat_i                       (wbs_d_mc0_dat_i),
334
      .wbs0_sel_i                       (wbs_d_mc0_sel_i),
335
      .wbs0_we_i                        (wbs_d_mc0_we_i),
336
      .wbs0_cyc_i                       (wbs_d_mc0_cyc_i),
337
      .wbs0_stb_i                       (wbs_d_mc0_stb_i),
338
      .wbs0_cti_i                       (wbs_d_mc0_cti_i),
339
      .wbs0_bte_i                       (wbs_d_mc0_bte_i),
340
      .wbs0_dat_o                       (wbs_d_mc0_dat_o),
341
      .wbs0_ack_o                       (wbs_d_mc0_ack_o),
342
      .wbs0_err_o                       (wbs_d_mc0_err_o),
343
      .wbs0_rty_o                       (wbs_d_mc0_rty_o),
344
 
345
      .wbs1_adr_i                       (wbm_b_d_adr_o),
346
      .wbs1_dat_i                       (wbm_b_d_dat_o),
347
      .wbs1_sel_i                       (wbm_b_d_sel_o),
348
      .wbs1_we_i                        (wbm_b_d_we_o),
349
      .wbs1_cyc_i                       (wbm_b_d_cyc_o),
350
      .wbs1_stb_i                       (wbm_b_d_stb_o),
351
      .wbs1_cti_i                       (wbm_b_d_cti_o),
352
      .wbs1_bte_i                       (wbm_b_d_bte_o),
353
      .wbs1_dat_o                       (wbm_b_d_dat_i),
354
      .wbs1_ack_o                       (wbm_b_d_ack_i),
355
      .wbs1_err_o                       (wbm_b_d_err_i),
356
      .wbs1_rty_o                       (wbm_b_d_rty_i),
357
 
358
      // Clock, reset inputs
359
      .wb_clk                   (wb_clk),
360
      .wb_rst                   (wb_rst));
361
 
362
   // These settings are from top level params file
363
   defparam arbiter_dbus0.wb_addr_match_width = dbus_arb_wb_addr_match_width;
364
   defparam arbiter_dbus0.wb_num_slaves = dbus_arb_wb_num_slaves;
365
   defparam arbiter_dbus0.slave0_adr = dbus_arb_slave0_adr;
366
   defparam arbiter_dbus0.slave1_adr = dbus_arb_slave1_adr;
367
 
368
   //
369
   // Wishbone byte-wide bus arbiter
370
   //   
371
 
372
   arbiter_bytebus arbiter_bytebus0
373
     (
374
 
375
      // Master 0
376
      // Inputs to arbiter from master
377
      .wbm0_adr_o                       (wbm_b_d_adr_o),
378
      .wbm0_dat_o                       (wbm_b_d_dat_o),
379
      .wbm0_sel_o                       (wbm_b_d_sel_o),
380
      .wbm0_we_o                        (wbm_b_d_we_o),
381
      .wbm0_cyc_o                       (wbm_b_d_cyc_o),
382
      .wbm0_stb_o                       (wbm_b_d_stb_o),
383
      .wbm0_cti_o                       (wbm_b_d_cti_o),
384
      .wbm0_bte_o                       (wbm_b_d_bte_o),
385
      // Outputs to master from arbiter
386
      .wbm0_dat_i                       (wbm_b_d_dat_i),
387
      .wbm0_ack_i                       (wbm_b_d_ack_i),
388
      .wbm0_err_i                       (wbm_b_d_err_i),
389
      .wbm0_rty_i                       (wbm_b_d_rty_i),
390
 
391
      // Byte bus slaves
392
 
393
      .wbs0_adr_i                       (wbs_d_peh_adr_i),
394
      .wbs0_dat_i                       (wbs_d_peh_dat_i),
395
      .wbs0_we_i                        (wbs_d_peh_we_i),
396
      .wbs0_cyc_i                       (wbs_d_peh_cyc_i),
397
      .wbs0_stb_i                       (wbs_d_peh_stb_i),
398
      .wbs0_cti_i                       (wbs_d_peh_cti_i),
399
      .wbs0_bte_i                       (wbs_d_peh_bte_i),
400
      .wbs0_dat_o                       (wbs_d_peh_dat_o),
401
      .wbs0_ack_o                       (wbs_d_peh_ack_o),
402
      .wbs0_err_o                       (wbs_d_peh_err_o),
403
      .wbs0_rty_o                       (wbs_d_peh_rty_o),
404
 
405
      // Clock, reset inputs
406
      .wb_clk                   (wb_clk),
407
      .wb_rst                   (wb_rst));
408
 
409
   defparam arbiter_bytebus0.wb_addr_match_width = bbus_arb_wb_addr_match_width;
410
   defparam arbiter_bytebus0.wb_num_slaves = bbus_arb_wb_num_slaves;
411
 
412
   defparam arbiter_bytebus0.slave0_adr = bbus_arb_slave0_adr;
413
 
414
`ifdef JTAG_DEBUG
415
   ////////////////////////////////////////////////////////////////////////
416
   //
417
   // JTAG TAP
418
   // 
419
   ////////////////////////////////////////////////////////////////////////
420
 
421
   //
422
   // Wires
423
   //
424
   wire                                   dbg_if_select;
425
   wire                                   dbg_if_tdo;
426
   wire                                   jtag_tap_tdo;
427
   wire                                   jtag_tap_shift_dr, jtag_tap_pause_dr,
428
                                          jtag_tap_update_dr, jtag_tap_capture_dr;
429
   //
430
   // Instantiation
431
   //
432
 
433
   jtag_tap jtag_tap0
434
     (
435
      // Ports to pads
436
      .tdo_pad_o                        (tdo_pad_o),
437
      .tms_pad_i                        (tms_pad_i),
438
      .tck_pad_i                        (dbg_tck),
439
      .trst_pad_i                       (async_rst),
440
      .tdi_pad_i                        (tdi_pad_i),
441
 
442
      .tdo_padoe_o                      (),
443
 
444
      .tdo_o                            (jtag_tap_tdo),
445
 
446
      .shift_dr_o                       (jtag_tap_shift_dr),
447
      .pause_dr_o                       (jtag_tap_pause_dr),
448
      .update_dr_o                      (jtag_tap_update_dr),
449
      .capture_dr_o                     (jtag_tap_capture_dr),
450
 
451
      .extest_select_o                  (),
452
      .sample_preload_select_o          (),
453
      .mbist_select_o                   (),
454
      .debug_select_o                   (dbg_if_select),
455
 
456
 
457
      .bs_chain_tdi_i                   (1'b0),
458
      .mbist_tdi_i                      (1'b0),
459
      .debug_tdi_i                      (dbg_if_tdo)
460
 
461
      );
462
 
463
   ////////////////////////////////////////////////////////////////////////
464
`endif //  `ifdef JTAG_DEBUG
465
 
466
   ////////////////////////////////////////////////////////////////////////
467
   //
468
   // OpenRISC processor
469
   // 
470
   ////////////////////////////////////////////////////////////////////////
471
 
472
   // 
473
   // Wires
474
   // 
475
 
476
   wire [19:0]                             or1200_pic_ints;
477
 
478
   wire [31:0]                             or1200_dbg_dat_i;
479
   wire [31:0]                             or1200_dbg_adr_i;
480
   wire                                   or1200_dbg_we_i;
481
   wire                                   or1200_dbg_stb_i;
482
   wire                                   or1200_dbg_ack_o;
483
   wire [31:0]                             or1200_dbg_dat_o;
484
 
485
   wire                                   or1200_dbg_stall_i;
486
   wire                                   or1200_dbg_ewt_i;
487
   wire [3:0]                              or1200_dbg_lss_o;
488
   wire [1:0]                              or1200_dbg_is_o;
489
   wire [10:0]                             or1200_dbg_wp_o;
490
   wire                                   or1200_dbg_bp_o;
491
   wire                                   or1200_dbg_rst;
492
 
493
   wire                                   or1200_clk, or1200_rst;
494
   wire                                   sig_tick;
495
   wire [8:0]                              or1200_mem_parity_err;
496
   wire                                   parity_err_reset;
497
 
498
   wire                                   or1200_wb_rst;
499
 
500
   //
501
   // Assigns
502
   //
503
   assign or1200_clk = wb_clk;
504
   assign or1200_rst = wb_rst | or1200_dbg_rst | parity_err_reset;
505
   assign or1200_wb_rst = wb_rst | or1200_dbg_rst | parity_err_reset;
506
 
507
   // 
508
   // Instantiation
509
   //    
510
   or1200_top or1200_top0
511
       (
512
        // Instruction bus, clocks, reset
513
        .iwb_clk_i                      (wb_clk),
514
        .iwb_rst_i                      (or1200_wb_rst),
515
        .iwb_ack_i                      (wbm_i_or12_ack_i),
516
        .iwb_err_i                      (wbm_i_or12_err_i),
517
        .iwb_rty_i                      (wbm_i_or12_rty_i),
518
        .iwb_dat_i                      (wbm_i_or12_dat_i),
519
 
520
        .iwb_cyc_o                      (wbm_i_or12_cyc_o),
521
        .iwb_adr_o                      (wbm_i_or12_adr_o),
522
        .iwb_stb_o                      (wbm_i_or12_stb_o),
523
        .iwb_we_o                       (wbm_i_or12_we_o),
524
        .iwb_sel_o                      (wbm_i_or12_sel_o),
525
        .iwb_dat_o                      (wbm_i_or12_dat_o),
526
        .iwb_cti_o                      (wbm_i_or12_cti_o),
527
        .iwb_bte_o                      (wbm_i_or12_bte_o),
528
 
529
        // Data bus, clocks, reset            
530
        .dwb_clk_i                      (wb_clk),
531
        .dwb_rst_i                      (or1200_wb_rst),
532
        .dwb_ack_i                      (wbm_d_or12_ack_i),
533
        .dwb_err_i                      (wbm_d_or12_err_i),
534
        .dwb_rty_i                      (wbm_d_or12_rty_i),
535
        .dwb_dat_i                      (wbm_d_or12_dat_i),
536
 
537
        .dwb_cyc_o                      (wbm_d_or12_cyc_o),
538
        .dwb_adr_o                      (wbm_d_or12_adr_o),
539
        .dwb_stb_o                      (wbm_d_or12_stb_o),
540
        .dwb_we_o                       (wbm_d_or12_we_o),
541
        .dwb_sel_o                      (wbm_d_or12_sel_o),
542
        .dwb_dat_o                      (wbm_d_or12_dat_o),
543
        .dwb_cti_o                      (wbm_d_or12_cti_o),
544
        .dwb_bte_o                      (wbm_d_or12_bte_o),
545
 
546
        // Debug interface ports
547
        .dbg_stall_i                    (or1200_dbg_stall_i),
548
        //.dbg_ewt_i                    (or1200_dbg_ewt_i),
549
        .dbg_ewt_i                      (1'b0),
550
        .dbg_lss_o                      (or1200_dbg_lss_o),
551
        .dbg_is_o                       (or1200_dbg_is_o),
552
        .dbg_wp_o                       (or1200_dbg_wp_o),
553
        .dbg_bp_o                       (or1200_dbg_bp_o),
554
 
555
        .dbg_adr_i                      (or1200_dbg_adr_i),
556
        .dbg_we_i                       (or1200_dbg_we_i ),
557
        .dbg_stb_i                      (or1200_dbg_stb_i),
558
        .dbg_dat_i                      (or1200_dbg_dat_i),
559
        .dbg_dat_o                      (or1200_dbg_dat_o),
560
        .dbg_ack_o                      (or1200_dbg_ack_o),
561
 
562
        .pm_clksd_o                     (),
563
        .pm_dc_gate_o                   (),
564
        .pm_ic_gate_o                   (),
565
        .pm_dmmu_gate_o                 (),
566
        .pm_immu_gate_o                 (),
567
        .pm_tt_gate_o                   (),
568
        .pm_cpu_gate_o                  (),
569
        .pm_wakeup_o                    (),
570
        .pm_lvolt_o                     (),
571
 
572
        // Core clocks, resets
573
        .clk_i                          (or1200_clk),
574
        .rst_i                          (or1200_rst),
575
 
576
        .clmode_i                       (2'b00),
577
        // Interrupts      
578
        .pic_ints_i                     (or1200_pic_ints),
579
        .sig_tick(sig_tick),
580
        /*
581
         .mbist_so_o                    (),
582
         .mbist_si_i                    (0),
583
         .mbist_ctrl_i                  (0),
584
         */
585
 
586
`ifdef OR1200_RAM_PARITY
587
        .mem_parity_err                 (or1200_mem_parity_err),
588
`endif
589
        .pm_cpustall_i                  (1'b0)
590
 
591
        );
592
 
593
   ////////////////////////////////////////////////////////////////////////
594
 
595
 
596
`ifdef JTAG_DEBUG
597
   ////////////////////////////////////////////////////////////////////////
598
   //
599
   // OR1200 Debug Interface
600
   // 
601
   ////////////////////////////////////////////////////////////////////////
602
 
603
   dbg_if dbg_if0
604
     (
605
      // OR1200 interface
606
      .cpu0_clk_i                       (or1200_clk),
607
      .cpu0_rst_o                       (or1200_dbg_rst),
608
      .cpu0_addr_o                      (or1200_dbg_adr_i),
609
      .cpu0_data_o                      (or1200_dbg_dat_i),
610
      .cpu0_stb_o                       (or1200_dbg_stb_i),
611
      .cpu0_we_o                        (or1200_dbg_we_i),
612
      .cpu0_data_i                      (or1200_dbg_dat_o),
613
      .cpu0_ack_i                       (or1200_dbg_ack_o),
614
 
615
 
616
      .cpu0_stall_o                     (or1200_dbg_stall_i),
617
      .cpu0_bp_i                        (or1200_dbg_bp_o),
618
 
619
      // TAP interface
620
      .tck_i                            (dbg_tck),
621
      .tdi_i                            (jtag_tap_tdo),
622
      .tdo_o                            (dbg_if_tdo),
623
      .rst_i                            (wb_rst),
624
      .shift_dr_i                       (jtag_tap_shift_dr),
625
      .pause_dr_i                       (jtag_tap_pause_dr),
626
      .update_dr_i                      (jtag_tap_update_dr),
627
      .debug_select_i                   (dbg_if_select),
628
 
629
      // Wishbone debug master
630
      .wb_clk_i                         (wb_clk),
631
      .wb_dat_i                         (wbm_d_dbg_dat_i),
632
      .wb_ack_i                         (wbm_d_dbg_ack_i),
633
      .wb_err_i                         (wbm_d_dbg_err_i),
634
      .wb_adr_o                         (wbm_d_dbg_adr_o),
635
      .wb_dat_o                         (wbm_d_dbg_dat_o),
636
      .wb_cyc_o                         (wbm_d_dbg_cyc_o),
637
      .wb_stb_o                         (wbm_d_dbg_stb_o),
638
      .wb_sel_o                         (wbm_d_dbg_sel_o),
639
      .wb_we_o                          (wbm_d_dbg_we_o ),
640
      .wb_cti_o                         (wbm_d_dbg_cti_o),
641
      .wb_cab_o                         (/*   UNUSED  */),
642
      .wb_bte_o                         (wbm_d_dbg_bte_o)
643
      );
644
 
645
   ////////////////////////////////////////////////////////////////////////   
646
`else // !`ifdef JTAG_DEBUG
647
 
648
   assign or1200_dbg_rst = 0;
649
 
650
   assign wbm_d_dbg_adr_o = 0;
651
   assign wbm_d_dbg_dat_o = 0;
652
   assign wbm_d_dbg_cyc_o = 0;
653
   assign wbm_d_dbg_stb_o = 0;
654
   assign wbm_d_dbg_sel_o = 0;
655
   assign wbm_d_dbg_we_o  = 0;
656
   assign wbm_d_dbg_cti_o = 0;
657
   assign wbm_d_dbg_bte_o = 0;
658
 
659
   assign or1200_dbg_adr_i = 0;
660
   assign or1200_dbg_dat_i = 0;
661
   assign or1200_dbg_stb_i = 0;
662
   assign or1200_dbg_we_i = 0;
663
   assign or1200_dbg_stall_i = 0;
664
 
665
   ////////////////////////////////////////////////////////////////////////   
666
`endif // !`ifdef JTAG_DEBUG
667
 
668
`ifdef OR1200_RAM_PARITY
669
   ////////////////////////////////////////////////////////////////////////
670
   //
671
   // Parity error handler
672
   // 
673
   ////////////////////////////////////////////////////////////////////////
674
   wire                                   parity_err_int;
675
 
676
   parity_err_handler perrhndler
677
     (
678
      .clk(wb_clk),
679
      .parity_err(or1200_mem_parity_err),
680
      .wb_rst(wb_rst),
681
      .reset(parity_err_reset),
682
      .interrupt(parity_err_int),
683
      .wb_dat_o(wbs_d_peh_dat_o),
684
      .wb_ack_o(wbs_d_peh_ack_o),
685
      .wb_stb_i(wbs_d_peh_stb_i)
686
      );
687
 
688
   assign wbs_d_peh_err_o = 0;
689
   assign wbs_d_peh_rty_o = 0;
690
 
691
`endif
692
   ////////////////////////////////////////////////////////////////////////
693
   //
694
   // ROM
695
   // 
696
   ////////////////////////////////////////////////////////////////////////
697
`ifdef BOOTROM
698
   rom rom0
699
     (
700
      .wb_dat_o                         (wbs_i_rom0_dat_o),
701
      .wb_ack_o                         (wbs_i_rom0_ack_o),
702
      .wb_adr_i                         (wbs_i_rom0_adr_i[(wbs_i_rom0_addr_width+2)-1:2]),
703
      .wb_stb_i                         (wbs_i_rom0_stb_i),
704
      .wb_cyc_i                         (wbs_i_rom0_cyc_i),
705
      .wb_cti_i                         (wbs_i_rom0_cti_i),
706
      .wb_bte_i                         (wbs_i_rom0_bte_i),
707
      .wb_clk                           (wb_clk),
708
      .wb_rst                           (wb_rst));
709
 
710
   defparam rom0.addr_width = wbs_i_rom0_addr_width;
711
`else // !`ifdef BOOTROM
712
   assign wbs_i_rom0_dat_o = 0;
713
   assign wbs_i_rom0_ack_o = 0;
714
`endif // !`ifdef BOOTROM
715
 
716
 
717
   assign wbs_i_rom0_err_o = 0;
718
   assign wbs_i_rom0_rty_o = 0;
719
 
720
   ////////////////////////////////////////////////////////////////////////
721
 
722
`ifdef RAM_WB
723
   ////////////////////////////////////////////////////////////////////////
724
   //
725
   // Generic main RAM
726
   // 
727
   ////////////////////////////////////////////////////////////////////////
728
 
729
 
730
   ram_wb ram_wb0
731
     (
732
      // Wishbone slave interface 0
733
      .wbm0_dat_i                       (wbs_i_mc0_dat_i),
734
      .wbm0_adr_i                       (wbs_i_mc0_adr_i),
735
      .wbm0_sel_i                       (wbs_i_mc0_sel_i),
736
      .wbm0_cti_i                       (wbs_i_mc0_cti_i),
737
      .wbm0_bte_i                       (wbs_i_mc0_bte_i),
738
      .wbm0_we_i                        (wbs_i_mc0_we_i ),
739
      .wbm0_cyc_i                       (wbs_i_mc0_cyc_i),
740
      .wbm0_stb_i                       (wbs_i_mc0_stb_i),
741
      .wbm0_dat_o                       (wbs_i_mc0_dat_o),
742
      .wbm0_ack_o                       (wbs_i_mc0_ack_o),
743
      .wbm0_err_o                       (wbs_i_mc0_err_o),
744
      .wbm0_rty_o                       (wbs_i_mc0_rty_o),
745
      // Wishbone slave interface 1
746
      .wbm1_dat_i                       (wbs_d_mc0_dat_i),
747
      .wbm1_adr_i                       (wbs_d_mc0_adr_i),
748
      .wbm1_sel_i                       (wbs_d_mc0_sel_i),
749
      .wbm1_cti_i                       (wbs_d_mc0_cti_i),
750
      .wbm1_bte_i                       (wbs_d_mc0_bte_i),
751
      .wbm1_we_i                        (wbs_d_mc0_we_i ),
752
      .wbm1_cyc_i                       (wbs_d_mc0_cyc_i),
753
      .wbm1_stb_i                       (wbs_d_mc0_stb_i),
754
      .wbm1_dat_o                       (wbs_d_mc0_dat_o),
755
      .wbm1_ack_o                       (wbs_d_mc0_ack_o),
756
      .wbm1_err_o                       (wbs_d_mc0_err_o),
757
      .wbm1_rty_o                       (wbs_d_mc0_rty_o),
758
      // Wishbone slave interface 2
759
      .wbm2_dat_i                       ('d0),
760
      .wbm2_adr_i                       ('d0),
761
      .wbm2_sel_i                       (4'd0),
762
      .wbm2_cti_i                       (3'd0),
763
      .wbm2_bte_i                       (2'd0),
764
      .wbm2_we_i                        (1'd0),
765
      .wbm2_cyc_i                       (1'd0),
766
      .wbm2_stb_i                       (1'd0),
767
      .wbm2_dat_o                       (),
768
      .wbm2_ack_o                       (),
769
      .wbm2_err_o                       (),
770
      .wbm2_rty_o                       (),
771
      // Clock, reset
772
      .wb_clk_i                         (wb_clk),
773
      .wb_rst_i                         (wb_rst));
774
 
775
   defparam ram_wb0.aw = wb_aw;
776
   defparam ram_wb0.dw = wb_dw;
777
 
778
   defparam ram_wb0.mem_size_bytes = (1024*1024); // 1024MB
779
   defparam ram_wb0.mem_adr_width = 20; // log2(1024*1024)
780
 
781
 
782
   ////////////////////////////////////////////////////////////////////////
783
`endif
784
 
785
   ////////////////////////////////////////////////////////////////////////
786
   //
787
   // OR1200 Interrupt assignment
788
   // 
789
   ////////////////////////////////////////////////////////////////////////
790
 
791
   assign or1200_pic_ints[0] = 0; // Non-maskable inside OR1200
792
   assign or1200_pic_ints[1] = 0; // Non-maskable inside OR1200
793
   assign or1200_pic_ints[2] = 0;
794
   assign or1200_pic_ints[3] = 0;
795
   assign or1200_pic_ints[4] = 0;
796
`ifdef OR1200_RAM_PARITY
797
   assign or1200_pic_ints[5] = parity_err_int;
798
`else
799
   assign or1200_pic_ints[5] = 0;
800
`endif
801
 
802
`ifdef SPI0
803
   assign or1200_pic_ints[6] = spi0_irq;
804
`else
805
   assign or1200_pic_ints[6] = 0;
806
`endif
807
   assign or1200_pic_ints[7] = 0;
808
   assign or1200_pic_ints[8] = 0;
809
   assign or1200_pic_ints[9] = 0;
810
   assign or1200_pic_ints[10] = 0;
811
   assign or1200_pic_ints[11] = 0;
812
   assign or1200_pic_ints[12] = 0;
813
   assign or1200_pic_ints[13] = 0;
814
   assign or1200_pic_ints[14] = 0;
815
   assign or1200_pic_ints[15] = 0;
816
   assign or1200_pic_ints[16] = 0;
817
   assign or1200_pic_ints[17] = 0;
818
   assign or1200_pic_ints[18] = 0;
819
   assign or1200_pic_ints[19] = 0;
820
 
821
endmodule // top
822
 
823
// Local Variables:
824
// verilog-library-directories:("." "../arbiter" "../or1200" "../dbg_if" "../jtag_tap" "../rom" "../simple_spi" )
825
// verilog-library-files:()
826
// verilog-library-extensions:(".v" ".h")
827
// End:
828
 

powered by: WebSVN 2.1.0

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