OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_processor/] [mor1kx-3.1/] [rtl/] [verilog/] [mor1kx.v] - Blame information for rev 38

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 alirezamon
/* ****************************************************************************
2
  This Source Code Form is subject to the terms of the
3
  Open Hardware Description License, v. 1.0. If a copy
4
  of the OHDL was not distributed with this file, You
5
  can obtain one at http://juliusbaxter.net/ohdl/ohdl.txt
6
 
7
  Description: mor1kx processor top level
8
 
9
  Copyright (C) 2012 Authors
10
 
11
  Author(s): Julius Baxter <juliusbaxter@gmail.com>
12
             Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
13
 
14
***************************************************************************** */
15
 
16
`include "mor1kx-defines.v"
17
 
18
module mor1kx
19
  #(
20
    parameter OPTION_OPERAND_WIDTH      = 32,
21
 
22
    parameter OPTION_CPU0               = "CAPPUCCINO",
23
 
24
    parameter FEATURE_DATACACHE         = "NONE",
25
    parameter OPTION_DCACHE_BLOCK_WIDTH = 5,
26
    parameter OPTION_DCACHE_SET_WIDTH   = 9,
27
    parameter OPTION_DCACHE_WAYS        = 2,
28
    parameter OPTION_DCACHE_LIMIT_WIDTH = 32,
29
    parameter OPTION_DCACHE_SNOOP = "NONE",
30
    parameter FEATURE_DMMU              = "NONE",
31
    parameter FEATURE_DMMU_HW_TLB_RELOAD = "NONE",
32
    parameter OPTION_DMMU_SET_WIDTH     = 6,
33
    parameter OPTION_DMMU_WAYS          = 1,
34
    parameter FEATURE_INSTRUCTIONCACHE  = "NONE",
35
    parameter OPTION_ICACHE_BLOCK_WIDTH = 5,
36
    parameter OPTION_ICACHE_SET_WIDTH   = 9,
37
    parameter OPTION_ICACHE_WAYS        = 2,
38
    parameter OPTION_ICACHE_LIMIT_WIDTH = 32,
39
    parameter FEATURE_IMMU              = "NONE",
40
    parameter FEATURE_IMMU_HW_TLB_RELOAD = "NONE",
41
    parameter OPTION_IMMU_SET_WIDTH     = 6,
42
    parameter OPTION_IMMU_WAYS          = 1,
43
    parameter FEATURE_TIMER             = "ENABLED",
44
    parameter FEATURE_DEBUGUNIT         = "NONE",
45
    parameter FEATURE_PERFCOUNTERS      = "NONE",
46
    parameter FEATURE_MAC               = "NONE",
47
 
48
    parameter FEATURE_SYSCALL           = "ENABLED",
49
    parameter FEATURE_TRAP              = "ENABLED",
50
    parameter FEATURE_RANGE             = "ENABLED",
51
 
52
    parameter FEATURE_PIC               = "ENABLED",
53
    parameter OPTION_PIC_TRIGGER        = "LEVEL",
54
    parameter OPTION_PIC_NMI_WIDTH      = 0,
55
 
56
    parameter FEATURE_DSX               = "ENABLED",
57
    parameter FEATURE_OVERFLOW          = "ENABLED",
58
    parameter FEATURE_CARRY_FLAG        = "ENABLED",
59
 
60
    parameter FEATURE_FASTCONTEXTS      = "NONE",
61
    parameter OPTION_RF_NUM_SHADOW_GPR  = 0,
62
    parameter OPTION_RF_ADDR_WIDTH      = 5,
63
    parameter OPTION_RF_WORDS           = 32,
64
 
65
    parameter OPTION_RESET_PC           = {{(OPTION_OPERAND_WIDTH-13){1'b0}},
66
                                           `OR1K_RESET_VECTOR,8'd0},
67
 
68
    parameter FEATURE_MULTIPLIER        = "THREESTAGE",
69
    parameter FEATURE_DIVIDER           = "SERIAL",
70
 
71
    parameter FEATURE_ADDC              = "ENABLED",
72
    parameter FEATURE_SRA               = "ENABLED",
73
    parameter FEATURE_ROR               = "NONE",
74
    parameter FEATURE_EXT               = "NONE",
75
    parameter FEATURE_CMOV              = "ENABLED",
76
    parameter FEATURE_FFL1              = "ENABLED",
77
    parameter FEATURE_ATOMIC            = "ENABLED",
78
 
79
    parameter FEATURE_CUST1             = "NONE",
80
    parameter FEATURE_CUST2             = "NONE",
81
    parameter FEATURE_CUST3             = "NONE",
82
    parameter FEATURE_CUST4             = "NONE",
83
    parameter FEATURE_CUST5             = "NONE",
84
    parameter FEATURE_CUST6             = "NONE",
85
    parameter FEATURE_CUST7             = "NONE",
86
    parameter FEATURE_CUST8             = "NONE",
87
 
88
    parameter OPTION_SHIFTER            = "BARREL",
89
 
90
    parameter FEATURE_STORE_BUFFER      = "ENABLED",
91
    parameter OPTION_STORE_BUFFER_DEPTH_WIDTH = 8,
92
 
93
    parameter FEATURE_MULTICORE = "NONE",
94
 
95
    parameter FEATURE_TRACEPORT_EXEC = "NONE",
96
 
97
    parameter BUS_IF_TYPE               = "WISHBONE32",
98
 
99
    parameter IBUS_WB_TYPE              = "B3_READ_BURSTING",
100
    parameter DBUS_WB_TYPE              = "CLASSIC"
101
    )
102
   (
103
    input                             clk,
104
    input                             rst,
105
 
106
    // Wishbone interface
107
    output [31:0]                      iwbm_adr_o,
108
    output                            iwbm_stb_o,
109
    output                            iwbm_cyc_o,
110
    output [3:0]                       iwbm_sel_o,
111
    output                            iwbm_we_o,
112
    output [2:0]                       iwbm_cti_o,
113
    output [1:0]                       iwbm_bte_o,
114
    output [31:0]                      iwbm_dat_o,
115
    input                             iwbm_err_i,
116
    input                             iwbm_ack_i,
117
    input [31:0]                       iwbm_dat_i,
118
    input                             iwbm_rty_i,
119
 
120
    output [31:0]                      dwbm_adr_o,
121
    output                            dwbm_stb_o,
122
    output                            dwbm_cyc_o,
123
    output [3:0]                       dwbm_sel_o,
124
    output                            dwbm_we_o,
125
    output [2:0]                       dwbm_cti_o,
126
    output [1:0]                       dwbm_bte_o,
127
    output [31:0]                      dwbm_dat_o,
128
    input                             dwbm_err_i,
129
    input                             dwbm_ack_i,
130
    input [31:0]                       dwbm_dat_i,
131
    input                             dwbm_rty_i,
132
 
133
    // Avalon interface
134
    output [31:0]                      avm_d_address_o,
135
    output [3:0]                       avm_d_byteenable_o,
136
    output                            avm_d_read_o,
137
    input [31:0]                       avm_d_readdata_i,
138
    output [3:0]                       avm_d_burstcount_o,
139
    output                            avm_d_write_o,
140
    output [31:0]                      avm_d_writedata_o,
141
    input                             avm_d_waitrequest_i,
142
    input                             avm_d_readdatavalid_i,
143
 
144
    output [31:0]                      avm_i_address_o,
145
    output [3:0]                       avm_i_byteenable_o,
146
    output                            avm_i_read_o,
147
    input [31:0]                       avm_i_readdata_i,
148
    output [3:0]                       avm_i_burstcount_o,
149
    input                             avm_i_waitrequest_i,
150
    input                             avm_i_readdatavalid_i,
151
 
152
    input [31:0]                       irq_i,
153
 
154
    // Debug interface
155
    input [15:0]                       du_addr_i,
156
    input                             du_stb_i,
157
    input [OPTION_OPERAND_WIDTH-1:0]  du_dat_i,
158
    input                             du_we_i,
159
    output [OPTION_OPERAND_WIDTH-1:0] du_dat_o,
160
    output                            du_ack_o,
161
    // Stall control from debug interface
162
    input                             du_stall_i,
163
    output                            du_stall_o,
164
 
165
    output                           traceport_exec_valid_o,
166
    output [31:0]                     traceport_exec_pc_o,
167
    output [`OR1K_INSN_WIDTH-1:0]     traceport_exec_insn_o,
168
    output [OPTION_OPERAND_WIDTH-1:0] traceport_exec_wbdata_o,
169
    output [OPTION_RF_ADDR_WIDTH-1:0] traceport_exec_wbreg_o,
170
    output                           traceport_exec_wben_o,
171
 
172
    // The multicore core identifier
173
    input [OPTION_OPERAND_WIDTH-1:0]  multicore_coreid_i,
174
    // The number of cores
175
    input [OPTION_OPERAND_WIDTH-1:0]  multicore_numcores_i,
176
 
177
    input [31:0]                      snoop_adr_i,
178
    input                            snoop_en_i
179
    );
180
 
181
   /*AUTOWIRE*/
182
   // Beginning of automatic wires (for undeclared instantiated-module outputs)
183
   wire                 avm_i_write_o;          // From ibus_bridge of mor1kx_bus_if_avalon.v
184
   wire                 avm_i_writedata_o;      // From ibus_bridge of mor1kx_bus_if_avalon.v
185
   wire [OPTION_OPERAND_WIDTH-1:0] dbus_adr_o;   // From mor1kx_cpu of mor1kx_cpu.v
186
   wire [3:0]            dbus_bsel_o;            // From mor1kx_cpu of mor1kx_cpu.v
187
   wire                 dbus_burst_o;           // From mor1kx_cpu of mor1kx_cpu.v
188
   wire [OPTION_OPERAND_WIDTH-1:0] dbus_dat_o;   // From mor1kx_cpu of mor1kx_cpu.v
189
   wire                 dbus_req_o;             // From mor1kx_cpu of mor1kx_cpu.v
190
   wire                 dbus_we_o;              // From mor1kx_cpu of mor1kx_cpu.v
191
   wire [OPTION_OPERAND_WIDTH-1:0] ibus_adr_o;   // From mor1kx_cpu of mor1kx_cpu.v
192
   wire                 ibus_burst_o;           // From mor1kx_cpu of mor1kx_cpu.v
193
   wire                 ibus_req_o;             // From mor1kx_cpu of mor1kx_cpu.v
194
   wire [15:0]           spr_bus_addr_o;         // From mor1kx_cpu of mor1kx_cpu.v
195
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_o;// From mor1kx_cpu of mor1kx_cpu.v
196
   wire                 spr_bus_stb_o;          // From mor1kx_cpu of mor1kx_cpu.v
197
   wire                 spr_bus_we_o;           // From mor1kx_cpu of mor1kx_cpu.v
198
   wire [15:0]           spr_sr_o;               // From mor1kx_cpu of mor1kx_cpu.v
199
   // End of automatics
200
 
201
   wire                            ibus_ack_i;
202
   wire [OPTION_OPERAND_WIDTH-1:0] ibus_dat_i;
203
   wire                            ibus_err_i;
204
 
205
   wire                            dbus_ack_i;
206
   wire [OPTION_OPERAND_WIDTH-1:0] dbus_dat_i;
207
   wire                            dbus_err_i;
208
 
209
   generate
210
      if (BUS_IF_TYPE=="WISHBONE32") begin : bus_gen
211
 
212
         /* mor1kx_bus_if_wb32 AUTO_TEMPLATE (
213
          .cpu_err_o                    (ibus_err_i),
214
          .cpu_ack_o                    (ibus_ack_i),
215
          .cpu_dat_o                    (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]),
216
          .wbm_adr_o                    (iwbm_adr_o),
217
          .wbm_stb_o                    (iwbm_stb_o),
218
          .wbm_cyc_o                    (iwbm_cyc_o),
219
          .wbm_sel_o                    (iwbm_sel_o),
220
          .wbm_we_o                     (iwbm_we_o),
221
          .wbm_cti_o                    (iwbm_cti_o),
222
          .wbm_bte_o                    (iwbm_bte_o),
223
          .wbm_dat_o                    (iwbm_dat_o),
224
          // Inputs
225
          .cpu_adr_i                    (ibus_adr_o),
226
          .cpu_dat_i                    ({OPTION_OPERAND_WIDTH{1'b0}}),
227
          .cpu_req_i                    (ibus_req_o),
228
          .cpu_we_i                     (1'b0),
229
          .cpu_bsel_i                   (4'b1111),
230
          .cpu_burst_i                  (ibus_burst_o),
231
          .wbm_err_i                    (iwbm_err_i),
232
          .wbm_ack_i                    (iwbm_ack_i),
233
          .wbm_dat_i                    (iwbm_dat_i),
234
          .wbm_rty_i                    (iwbm_rty_i),
235
          ); */
236
 
237
         mor1kx_bus_if_wb32
238
           #(.BUS_IF_TYPE(IBUS_WB_TYPE),
239
             .BURST_LENGTH((FEATURE_INSTRUCTIONCACHE != "NONE") ?
240
                           ((OPTION_ICACHE_BLOCK_WIDTH == 4) ? 4 :
241
                            ((OPTION_ICACHE_BLOCK_WIDTH == 5) ? 8 : 1))
242
                           : 1 ))
243
         ibus_bridge
244
                      (/*AUTOINST*/
245
                       // Outputs
246
                       .cpu_err_o       (ibus_err_i),            // Templated
247
                       .cpu_ack_o       (ibus_ack_i),            // Templated
248
                       .cpu_dat_o       (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]), // Templated
249
                       .wbm_adr_o       (iwbm_adr_o),            // Templated
250
                       .wbm_stb_o       (iwbm_stb_o),            // Templated
251
                       .wbm_cyc_o       (iwbm_cyc_o),            // Templated
252
                       .wbm_sel_o       (iwbm_sel_o),            // Templated
253
                       .wbm_we_o        (iwbm_we_o),             // Templated
254
                       .wbm_cti_o       (iwbm_cti_o),            // Templated
255
                       .wbm_bte_o       (iwbm_bte_o),            // Templated
256
                       .wbm_dat_o       (iwbm_dat_o),            // Templated
257
                       // Inputs
258
                       .clk             (clk),
259
                       .rst             (rst),
260
                       .cpu_adr_i       (ibus_adr_o),            // Templated
261
                       .cpu_dat_i       ({OPTION_OPERAND_WIDTH{1'b0}}), // Templated
262
                       .cpu_req_i       (ibus_req_o),            // Templated
263
                       .cpu_bsel_i      (4'b1111),               // Templated
264
                       .cpu_we_i        (1'b0),                  // Templated
265
                       .cpu_burst_i     (ibus_burst_o),          // Templated
266
                       .wbm_err_i       (iwbm_err_i),            // Templated
267
                       .wbm_ack_i       (iwbm_ack_i),            // Templated
268
                       .wbm_dat_i       (iwbm_dat_i),            // Templated
269
                       .wbm_rty_i       (iwbm_rty_i));           // Templated
270
 
271
         /* mor1kx_bus_if_wb32 AUTO_TEMPLATE (
272
          .cpu_err_o                    (dbus_err_i),
273
          .cpu_ack_o                    (dbus_ack_i),
274
          .cpu_dat_o                    (dbus_dat_i[OPTION_OPERAND_WIDTH-1:0]),
275
          .wbm_adr_o                    (dwbm_adr_o),
276
          .wbm_stb_o                    (dwbm_stb_o),
277
          .wbm_cyc_o                    (dwbm_cyc_o),
278
          .wbm_sel_o                    (dwbm_sel_o),
279
          .wbm_we_o                     (dwbm_we_o),
280
          .wbm_cti_o                    (dwbm_cti_o),
281
          .wbm_bte_o                    (dwbm_bte_o),
282
          .wbm_dat_o                    (dwbm_dat_o),
283
          // Inputs
284
          .cpu_adr_i                    (dbus_adr_o[31:0]),
285
          .cpu_dat_i                    (dbus_dat_o),
286
          .cpu_req_i                    (dbus_req_o),
287
          .cpu_we_i                     (dbus_we_o),
288
          .cpu_bsel_i                   (dbus_bsel_o),
289
          .cpu_burst_i                  (dbus_burst_o),
290
          .wbm_err_i                    (dwbm_err_i),
291
          .wbm_ack_i                    (dwbm_ack_i),
292
          .wbm_dat_i                    (dwbm_dat_i),
293
          .wbm_rty_i                    (dwbm_rty_i),
294
          ); */
295
 
296
         mor1kx_bus_if_wb32
297
           #(.BUS_IF_TYPE(DBUS_WB_TYPE),
298
             .BURST_LENGTH((FEATURE_DATACACHE != "NONE") ?
299
                           ((OPTION_DCACHE_BLOCK_WIDTH == 4) ? 4 :
300
                            ((OPTION_DCACHE_BLOCK_WIDTH == 5) ? 8 : 1))
301
                           : 1 ))
302
         dbus_bridge
303
           (/*AUTOINST*/
304
            // Outputs
305
            .cpu_err_o                  (dbus_err_i),            // Templated
306
            .cpu_ack_o                  (dbus_ack_i),            // Templated
307
            .cpu_dat_o                  (dbus_dat_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
308
            .wbm_adr_o                  (dwbm_adr_o),            // Templated
309
            .wbm_stb_o                  (dwbm_stb_o),            // Templated
310
            .wbm_cyc_o                  (dwbm_cyc_o),            // Templated
311
            .wbm_sel_o                  (dwbm_sel_o),            // Templated
312
            .wbm_we_o                   (dwbm_we_o),             // Templated
313
            .wbm_cti_o                  (dwbm_cti_o),            // Templated
314
            .wbm_bte_o                  (dwbm_bte_o),            // Templated
315
            .wbm_dat_o                  (dwbm_dat_o),            // Templated
316
            // Inputs
317
            .clk                        (clk),
318
            .rst                        (rst),
319
            .cpu_adr_i                  (dbus_adr_o[31:0]),       // Templated
320
            .cpu_dat_i                  (dbus_dat_o),            // Templated
321
            .cpu_req_i                  (dbus_req_o),            // Templated
322
            .cpu_bsel_i                 (dbus_bsel_o),           // Templated
323
            .cpu_we_i                   (dbus_we_o),             // Templated
324
            .cpu_burst_i                (dbus_burst_o),          // Templated
325
            .wbm_err_i                  (dwbm_err_i),            // Templated
326
            .wbm_ack_i                  (dwbm_ack_i),            // Templated
327
            .wbm_dat_i                  (dwbm_dat_i),            // Templated
328
            .wbm_rty_i                  (dwbm_rty_i));           // Templated
329
 
330
      end else if (BUS_IF_TYPE=="AVALON") begin // block: bus_gen
331
         /* mor1kx_bus_if_avalon AUTO_TEMPLATE (
332
          .cpu_err_o                    (ibus_err_i),
333
          .cpu_ack_o                    (ibus_ack_i),
334
          .cpu_dat_o                    (ibus_dat_i),
335
          .avm_address_o                (avm_i_address_o),
336
          .avm_byteenable_o             (avm_i_byteenable_o),
337
          .avm_read_o                   (avm_i_read_o),
338
          .avm_burstcount_o             (avm_i_burstcount_o),
339
          .avm_write_o                  (avm_i_write_o),
340
          .avm_writedata_o              (avm_i_writedata_o),
341
          // Inputs
342
          .cpu_adr_i                    (ibus_adr_o),
343
          .cpu_dat_i                    ({OPTION_OPERAND_WIDTH{1'b0}}),
344
          .cpu_req_i                    (ibus_req_o),
345
          .cpu_we_i                     (1'b0),
346
          .cpu_bsel_i                   (4'b1111),
347
          .cpu_burst_i                  (ibus_burst_o),
348
          .avm_readdata_i               (avm_i_readdata_i),
349
          .avm_waitrequest_i            (avm_i_waitrequest_i),
350
          .avm_readdatavalid_i          (avm_i_readdatavalid_i),
351
          ); */
352
 
353
         mor1kx_bus_if_avalon
354
           #(.OPTION_AVALON_BURST_LENGTH((1<<OPTION_ICACHE_BLOCK_WIDTH)/4))
355
         ibus_bridge
356
           (/*AUTOINST*/
357
            // Outputs
358
            .cpu_err_o                  (ibus_err_i),            // Templated
359
            .cpu_ack_o                  (ibus_ack_i),            // Templated
360
            .cpu_dat_o                  (ibus_dat_i),            // Templated
361
            .avm_address_o              (avm_i_address_o),       // Templated
362
            .avm_byteenable_o           (avm_i_byteenable_o),    // Templated
363
            .avm_read_o                 (avm_i_read_o),          // Templated
364
            .avm_burstcount_o           (avm_i_burstcount_o),    // Templated
365
            .avm_write_o                (avm_i_write_o),         // Templated
366
            .avm_writedata_o            (avm_i_writedata_o),     // Templated
367
            // Inputs
368
            .clk                        (clk),
369
            .rst                        (rst),
370
            .cpu_adr_i                  (ibus_adr_o),            // Templated
371
            .cpu_dat_i                  ({OPTION_OPERAND_WIDTH{1'b0}}), // Templated
372
            .cpu_req_i                  (ibus_req_o),            // Templated
373
            .cpu_bsel_i                 (4'b1111),               // Templated
374
            .cpu_we_i                   (1'b0),                  // Templated
375
            .cpu_burst_i                (ibus_burst_o),          // Templated
376
            .avm_readdata_i             (avm_i_readdata_i),      // Templated
377
            .avm_waitrequest_i          (avm_i_waitrequest_i),   // Templated
378
            .avm_readdatavalid_i        (avm_i_readdatavalid_i)); // Templated
379
 
380
         /* mor1kx_bus_if_avalon AUTO_TEMPLATE (
381
          .cpu_err_o                    (dbus_err_i),
382
          .cpu_ack_o                    (dbus_ack_i),
383
          .cpu_dat_o                    (dbus_dat_i),
384
          .avm_address_o                (avm_d_address_o),
385
          .avm_byteenable_o             (avm_d_byteenable_o),
386
          .avm_read_o                   (avm_d_read_o),
387
          .avm_burstcount_o             (avm_d_burstcount_o),
388
          .avm_write_o                  (avm_d_write_o),
389
          .avm_writedata_o              (avm_d_writedata_o),
390
          // Inputs
391
          .cpu_adr_i                    (dbus_adr_o),
392
          .cpu_dat_i                    (dbus_dat_o),
393
          .cpu_req_i                    (dbus_req_o),
394
          .cpu_we_i                     (dbus_we_o),
395
          .cpu_bsel_i                   (dbus_bsel_o),
396
          .cpu_burst_i                  (dbus_burst_o),
397
          .avm_readdata_i               (avm_d_readdata_i),
398
          .avm_waitrequest_i            (avm_d_waitrequest_i),
399
          .avm_readdatavalid_i          (avm_d_readdatavalid_i),
400
          ); */
401
 
402
         mor1kx_bus_if_avalon
403
           #(.OPTION_AVALON_BURST_LENGTH((1<<OPTION_DCACHE_BLOCK_WIDTH)/4))
404
         dbus_bridge
405
           (/*AUTOINST*/
406
            // Outputs
407
            .cpu_err_o                  (dbus_err_i),            // Templated
408
            .cpu_ack_o                  (dbus_ack_i),            // Templated
409
            .cpu_dat_o                  (dbus_dat_i),            // Templated
410
            .avm_address_o              (avm_d_address_o),       // Templated
411
            .avm_byteenable_o           (avm_d_byteenable_o),    // Templated
412
            .avm_read_o                 (avm_d_read_o),          // Templated
413
            .avm_burstcount_o           (avm_d_burstcount_o),    // Templated
414
            .avm_write_o                (avm_d_write_o),         // Templated
415
            .avm_writedata_o            (avm_d_writedata_o),     // Templated
416
            // Inputs
417
            .clk                        (clk),
418
            .rst                        (rst),
419
            .cpu_adr_i                  (dbus_adr_o),            // Templated
420
            .cpu_dat_i                  (dbus_dat_o),            // Templated
421
            .cpu_req_i                  (dbus_req_o),            // Templated
422
            .cpu_bsel_i                 (dbus_bsel_o),           // Templated
423
            .cpu_we_i                   (dbus_we_o),             // Templated
424
            .cpu_burst_i                (dbus_burst_o),          // Templated
425
            .avm_readdata_i             (avm_d_readdata_i),      // Templated
426
            .avm_waitrequest_i          (avm_d_waitrequest_i),   // Templated
427
            .avm_readdatavalid_i        (avm_d_readdatavalid_i)); // Templated
428
 
429
      end else begin
430
           initial begin
431
              $display("Error: BUS_IF_TYPE not correct");
432
              $finish();
433
           end
434
        end // else: !if(BUS_IF_TYPE=="WISHBONE32")
435
   endgenerate
436
 
437
   /* mor1kx_cpu AUTO_TEMPLATE
438
    (
439
    .spr_bus_dat_dmmu_i         (),
440
    .spr_bus_ack_dmmu_i         (),
441
    .spr_bus_dat_immu_i         (),
442
    .spr_bus_ack_immu_i         (),
443
    .spr_bus_dat_mac_i          (),
444
    .spr_bus_ack_mac_i          (),
445
    .spr_bus_dat_pmu_i          (),
446
    .spr_bus_ack_pmu_i          (),
447
    .spr_bus_dat_pcu_i          (),
448
    .spr_bus_ack_pcu_i          (),
449
    .spr_bus_dat_fpu_i          (),
450
    .spr_bus_ack_fpu_i          (),
451
    ); */
452
   mor1kx_cpu
453
           #(
454
             .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
455
             .OPTION_CPU(OPTION_CPU0),
456
             .FEATURE_DATACACHE(FEATURE_DATACACHE),
457
             .OPTION_DCACHE_BLOCK_WIDTH(OPTION_DCACHE_BLOCK_WIDTH),
458
             .OPTION_DCACHE_SET_WIDTH(OPTION_DCACHE_SET_WIDTH),
459
             .OPTION_DCACHE_WAYS(OPTION_DCACHE_WAYS),
460
             .OPTION_DCACHE_LIMIT_WIDTH(OPTION_DCACHE_LIMIT_WIDTH),
461
             .OPTION_DCACHE_SNOOP(OPTION_DCACHE_SNOOP),
462
             .FEATURE_DMMU(FEATURE_DMMU),
463
             .FEATURE_DMMU_HW_TLB_RELOAD(FEATURE_DMMU_HW_TLB_RELOAD),
464
             .OPTION_DMMU_SET_WIDTH(OPTION_DMMU_SET_WIDTH),
465
             .OPTION_DMMU_WAYS(OPTION_DMMU_WAYS),
466
             .FEATURE_INSTRUCTIONCACHE(FEATURE_INSTRUCTIONCACHE),
467
             .OPTION_ICACHE_BLOCK_WIDTH(OPTION_ICACHE_BLOCK_WIDTH),
468
             .OPTION_ICACHE_SET_WIDTH(OPTION_ICACHE_SET_WIDTH),
469
             .OPTION_ICACHE_WAYS(OPTION_ICACHE_WAYS),
470
             .OPTION_ICACHE_LIMIT_WIDTH(OPTION_ICACHE_LIMIT_WIDTH),
471
             .FEATURE_IMMU(FEATURE_IMMU),
472
             .FEATURE_IMMU_HW_TLB_RELOAD(FEATURE_IMMU_HW_TLB_RELOAD),
473
             .OPTION_IMMU_SET_WIDTH(OPTION_IMMU_SET_WIDTH),
474
             .OPTION_IMMU_WAYS(OPTION_IMMU_WAYS),
475
             .FEATURE_PIC(FEATURE_PIC),
476
             .FEATURE_TIMER(FEATURE_TIMER),
477
             .FEATURE_DEBUGUNIT(FEATURE_DEBUGUNIT),
478
             .FEATURE_PERFCOUNTERS(FEATURE_PERFCOUNTERS),
479
             .FEATURE_MAC(FEATURE_MAC),
480
             .FEATURE_SYSCALL(FEATURE_SYSCALL),
481
             .FEATURE_TRAP(FEATURE_TRAP),
482
             .FEATURE_RANGE(FEATURE_RANGE),
483
             .OPTION_PIC_TRIGGER(OPTION_PIC_TRIGGER),
484
             .OPTION_PIC_NMI_WIDTH(OPTION_PIC_NMI_WIDTH),
485
             .FEATURE_DSX(FEATURE_DSX),
486
             .FEATURE_OVERFLOW(FEATURE_OVERFLOW),
487
             .FEATURE_CARRY_FLAG(FEATURE_CARRY_FLAG),
488
             .FEATURE_FASTCONTEXTS(FEATURE_FASTCONTEXTS),
489
             .OPTION_RF_NUM_SHADOW_GPR(OPTION_RF_NUM_SHADOW_GPR),
490
             .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
491
             .OPTION_RF_WORDS(OPTION_RF_WORDS),
492
             .OPTION_RESET_PC(OPTION_RESET_PC),
493
             .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER),
494
             .FEATURE_DIVIDER(FEATURE_DIVIDER),
495
             .FEATURE_ADDC(FEATURE_ADDC),
496
             .FEATURE_SRA(FEATURE_SRA),
497
             .FEATURE_ROR(FEATURE_ROR),
498
             .FEATURE_EXT(FEATURE_EXT),
499
             .FEATURE_CMOV(FEATURE_CMOV),
500
             .FEATURE_FFL1(FEATURE_FFL1),
501
             .FEATURE_ATOMIC(FEATURE_ATOMIC),
502
             .FEATURE_CUST1(FEATURE_CUST1),
503
             .FEATURE_CUST2(FEATURE_CUST2),
504
             .FEATURE_CUST3(FEATURE_CUST3),
505
             .FEATURE_CUST4(FEATURE_CUST4),
506
             .FEATURE_CUST5(FEATURE_CUST5),
507
             .FEATURE_CUST6(FEATURE_CUST6),
508
             .FEATURE_CUST7(FEATURE_CUST7),
509
             .FEATURE_CUST8(FEATURE_CUST8),
510
             .OPTION_SHIFTER(OPTION_SHIFTER),
511
             .FEATURE_STORE_BUFFER(FEATURE_STORE_BUFFER),
512
             .OPTION_STORE_BUFFER_DEPTH_WIDTH(OPTION_STORE_BUFFER_DEPTH_WIDTH),
513
             .FEATURE_MULTICORE(FEATURE_MULTICORE),
514
             .FEATURE_TRACEPORT_EXEC(FEATURE_TRACEPORT_EXEC)
515
             )
516
   mor1kx_cpu
517
     (/*AUTOINST*/
518
      // Outputs
519
      .ibus_adr_o                       (ibus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
520
      .ibus_req_o                       (ibus_req_o),
521
      .ibus_burst_o                     (ibus_burst_o),
522
      .dbus_adr_o                       (dbus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
523
      .dbus_dat_o                       (dbus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
524
      .dbus_req_o                       (dbus_req_o),
525
      .dbus_bsel_o                      (dbus_bsel_o[3:0]),
526
      .dbus_we_o                        (dbus_we_o),
527
      .dbus_burst_o                     (dbus_burst_o),
528
      .du_dat_o                         (du_dat_o[OPTION_OPERAND_WIDTH-1:0]),
529
      .du_ack_o                         (du_ack_o),
530
      .du_stall_o                       (du_stall_o),
531
      .traceport_exec_valid_o           (traceport_exec_valid_o),
532
      .traceport_exec_pc_o              (traceport_exec_pc_o[31:0]),
533
      .traceport_exec_insn_o            (traceport_exec_insn_o[`OR1K_INSN_WIDTH-1:0]),
534
      .traceport_exec_wbdata_o          (traceport_exec_wbdata_o[OPTION_OPERAND_WIDTH-1:0]),
535
      .traceport_exec_wbreg_o           (traceport_exec_wbreg_o[OPTION_RF_ADDR_WIDTH-1:0]),
536
      .traceport_exec_wben_o            (traceport_exec_wben_o),
537
      .spr_bus_addr_o                   (spr_bus_addr_o[15:0]),
538
      .spr_bus_we_o                     (spr_bus_we_o),
539
      .spr_bus_stb_o                    (spr_bus_stb_o),
540
      .spr_bus_dat_o                    (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
541
      .spr_sr_o                         (spr_sr_o[15:0]),
542
      // Inputs
543
      .clk                              (clk),
544
      .rst                              (rst),
545
      .ibus_err_i                       (ibus_err_i),
546
      .ibus_ack_i                       (ibus_ack_i),
547
      .ibus_dat_i                       (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]),
548
      .dbus_err_i                       (dbus_err_i),
549
      .dbus_ack_i                       (dbus_ack_i),
550
      .dbus_dat_i                       (dbus_dat_i[OPTION_OPERAND_WIDTH-1:0]),
551
      .irq_i                            (irq_i[31:0]),
552
      .du_addr_i                        (du_addr_i[15:0]),
553
      .du_stb_i                         (du_stb_i),
554
      .du_dat_i                         (du_dat_i[OPTION_OPERAND_WIDTH-1:0]),
555
      .du_we_i                          (du_we_i),
556
      .du_stall_i                       (du_stall_i),
557
      .spr_bus_dat_dmmu_i               (),                      // Templated
558
      .spr_bus_ack_dmmu_i               (),                      // Templated
559
      .spr_bus_dat_immu_i               (),                      // Templated
560
      .spr_bus_ack_immu_i               (),                      // Templated
561
      .spr_bus_dat_mac_i                (),                      // Templated
562
      .spr_bus_ack_mac_i                (),                      // Templated
563
      .spr_bus_dat_pmu_i                (),                      // Templated
564
      .spr_bus_ack_pmu_i                (),                      // Templated
565
      .spr_bus_dat_pcu_i                (),                      // Templated
566
      .spr_bus_ack_pcu_i                (),                      // Templated
567
      .spr_bus_dat_fpu_i                (),                      // Templated
568
      .spr_bus_ack_fpu_i                (),                      // Templated
569
      .multicore_coreid_i               (multicore_coreid_i[OPTION_OPERAND_WIDTH-1:0]),
570
      .multicore_numcores_i             (multicore_numcores_i[OPTION_OPERAND_WIDTH-1:0]),
571
      .snoop_adr_i                      (snoop_adr_i[31:0]),
572
      .snoop_en_i                       (snoop_en_i));
573
 
574
endmodule // mor1kx

powered by: WebSVN 2.1.0

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