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-5.0/] [rtl/] [verilog/] [mor1kx_cpu_prontoespresso.v] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 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: "Pronto espresso" pipeline CPU module
8
 
9
  Copyright (C) 2012 Authors
10
 
11
  Author(s): Julius Baxter <juliusbaxter@gmail.com>
12
 
13
***************************************************************************** */
14
 
15
`include "mor1kx-defines.v"
16
 
17
module mor1kx_cpu_prontoespresso
18
  #(
19
    parameter OPTION_OPERAND_WIDTH      = 32,
20
 
21
    parameter FEATURE_DATACACHE         = "NONE",
22
    parameter OPTION_DCACHE_BLOCK_WIDTH = 5,
23
    parameter OPTION_DCACHE_SET_WIDTH   = 9,
24
    parameter OPTION_DCACHE_WAYS        = 2,
25
    parameter FEATURE_DMMU              = "NONE",
26
    parameter FEATURE_DMMU_HW_TLB_RELOAD = "NONE",
27
    parameter FEATURE_INSTRUCTIONCACHE  = "NONE",
28
    parameter OPTION_ICACHE_BLOCK_WIDTH = 5,
29
    parameter OPTION_ICACHE_SET_WIDTH   = 9,
30
    parameter OPTION_ICACHE_WAYS        = 2,
31
    parameter FEATURE_IMMU              = "NONE",
32
    parameter FEATURE_IMMU_HW_TLB_RELOAD = "NONE",
33
    parameter FEATURE_TIMER             = "ENABLED",
34
    parameter FEATURE_DEBUGUNIT         = "NONE",
35
    parameter FEATURE_PERFCOUNTERS      = "NONE",
36
    parameter FEATURE_MAC               = "NONE",
37
 
38
    parameter FEATURE_SYSCALL           = "ENABLED",
39
    parameter FEATURE_TRAP              = "ENABLED",
40
    parameter FEATURE_RANGE             = "ENABLED",
41
 
42
    parameter FEATURE_PIC               = "ENABLED",
43
    parameter OPTION_PIC_TRIGGER        = "LEVEL",
44
    parameter OPTION_PIC_NMI_WIDTH      = 0,
45
 
46
    parameter FEATURE_DSX               = "NONE",
47
    parameter FEATURE_FASTCONTEXTS      = "NONE",
48
    parameter FEATURE_OVERFLOW          = "NONE",
49
    parameter FEATURE_CARRY_FLAG        = "ENABLED",
50
 
51
    parameter OPTION_RF_ADDR_WIDTH      = 5,
52
    parameter OPTION_RF_WORDS           = 32,
53
 
54
    parameter OPTION_RESET_PC           = {{(OPTION_OPERAND_WIDTH-13){1'b0}},
55
                                           `OR1K_RESET_VECTOR,8'd0},
56
 
57
    parameter OPTION_TCM_FETCHER = "DISABLED",
58
 
59
    parameter FEATURE_MULTIPLIER        = "THREESTAGE",
60
    parameter FEATURE_DIVIDER           = "NONE",
61
 
62
    parameter FEATURE_ADDC              = "NONE",
63
    parameter FEATURE_SRA               = "ENABLED",
64
    parameter FEATURE_ROR               = "NONE",
65
    parameter FEATURE_EXT               = "NONE",
66
    parameter FEATURE_CMOV              = "NONE",
67
    parameter FEATURE_FFL1              = "NONE",
68
    parameter FEATURE_MSYNC             = "NONE",
69
    parameter FEATURE_PSYNC             = "NONE",
70
    parameter FEATURE_CSYNC             = "NONE",
71
 
72
    parameter FEATURE_CUST1             = "NONE",
73
    parameter FEATURE_CUST2             = "NONE",
74
    parameter FEATURE_CUST3             = "NONE",
75
    parameter FEATURE_CUST4             = "NONE",
76
    parameter FEATURE_CUST5             = "NONE",
77
    parameter FEATURE_CUST6             = "NONE",
78
    parameter FEATURE_CUST7             = "NONE",
79
    parameter FEATURE_CUST8             = "NONE",
80
 
81
    parameter OPTION_SHIFTER            = "BARREL",
82
 
83
    parameter FEATURE_MULTICORE = "NONE",
84
 
85
    parameter FEATURE_TRACEPORT_EXEC = "NONE"
86
   )
87
   (
88
    input                             clk,
89
    input                             rst,
90
 
91
    // Instruction bus
92
    input                             ibus_err_i,
93
    input                             ibus_ack_i,
94
    input [`OR1K_INSN_WIDTH-1:0]      ibus_dat_i,
95
    output [OPTION_OPERAND_WIDTH-1:0] ibus_adr_o,
96
    output                            ibus_req_o,
97
    output                            ibus_burst_o,
98
 
99
    // Data bus
100
    input                             dbus_err_i,
101
    input                             dbus_ack_i,
102
    input [OPTION_OPERAND_WIDTH-1:0]  dbus_dat_i,
103
    output [OPTION_OPERAND_WIDTH-1:0] dbus_adr_o,
104
    output [OPTION_OPERAND_WIDTH-1:0] dbus_dat_o,
105
    output                            dbus_req_o,
106
    output [3:0]                       dbus_bsel_o,
107
    output                            dbus_we_o,
108
    output                            dbus_burst_o,
109
 
110
    // Interrupts
111
    input [31:0]                       irq_i,
112
 
113
    // Debug interface
114
    input [15:0]                       du_addr_i,
115
    input                             du_stb_i,
116
    input [OPTION_OPERAND_WIDTH-1:0]  du_dat_i,
117
    input                             du_we_i,
118
    output [OPTION_OPERAND_WIDTH-1:0] du_dat_o,
119
    output                            du_ack_o,
120
    // Stall control from debug interface
121
    input                             du_stall_i,
122
    output                            du_stall_o,
123
 
124
    // SPR accesses to external units (cache, mmu, etc.)
125
    output [15:0]                      spr_bus_addr_o,
126
    output                            spr_bus_we_o,
127
    output                            spr_bus_stb_o,
128
    output [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_o,
129
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_dmmu_i,
130
    input                             spr_bus_ack_dmmu_i,
131
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_immu_i,
132
    input                             spr_bus_ack_immu_i,
133
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_mac_i,
134
    input                             spr_bus_ack_mac_i,
135
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_pmu_i,
136
    input                             spr_bus_ack_pmu_i,
137
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_pcu_i,
138
    input                             spr_bus_ack_pcu_i,
139
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_fpu_i,
140
    input                             spr_bus_ack_fpu_i,
141
    output [15:0]                      spr_sr_o,
142
 
143
    // The multicore core identifier
144
    input [OPTION_OPERAND_WIDTH-1:0] multicore_coreid_i
145
    );
146
 
147
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_fetch_to_decode;
148
   wire [`OR1K_INSN_WIDTH-1:0]        insn_fetch_to_decode;
149
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_decode_to_execute;
150
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_execute_to_ctrl;
151
 
152
   /*AUTOWIRE*/
153
   // Beginning of automatic wires (for undeclared instantiated-module outputs)
154
   wire [OPTION_OPERAND_WIDTH-1:0] adder_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
155
   wire [OPTION_OPERAND_WIDTH-1:0] alu_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
156
   wire                 alu_valid_o;            // From mor1kx_execute_alu of mor1kx_execute_alu.v
157
   wire                 carry_clear_o;          // From mor1kx_execute_alu of mor1kx_execute_alu.v
158
   wire                 carry_o;                // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
159
   wire                 carry_set_o;            // From mor1kx_execute_alu of mor1kx_execute_alu.v
160
   wire                 ctrl_branch_occur_o;    // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
161
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_branch_target_o;// From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
162
   wire                 ctrl_insn_done_o;       // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
163
   wire                 ctrl_mfspr_we_o;        // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
164
   wire                 decode_adder_do_carry_o;// From mor1kx_decode of mor1kx_decode.v
165
   wire                 decode_adder_do_sub_o;  // From mor1kx_decode of mor1kx_decode.v
166
   wire                 decode_except_ibus_err_o;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
167
   wire                 decode_except_illegal_o;// From mor1kx_decode of mor1kx_decode.v
168
   wire                 decode_except_syscall_o;// From mor1kx_decode of mor1kx_decode.v
169
   wire                 decode_except_trap_o;   // From mor1kx_decode of mor1kx_decode.v
170
   wire [`OR1K_IMM_WIDTH-1:0] decode_imm16_o;    // From mor1kx_decode of mor1kx_decode.v
171
   wire [OPTION_OPERAND_WIDTH-1:0] decode_immediate_o;// From mor1kx_decode of mor1kx_decode.v
172
   wire                 decode_immediate_sel_o; // From mor1kx_decode of mor1kx_decode.v
173
   wire [9:0]            decode_immjbr_upper_o;  // From mor1kx_decode of mor1kx_decode.v
174
   wire [1:0]            decode_lsu_length_o;    // From mor1kx_decode of mor1kx_decode.v
175
   wire                 decode_lsu_zext_o;      // From mor1kx_decode of mor1kx_decode.v
176
   wire                 decode_op_add_o;        // From mor1kx_decode of mor1kx_decode.v
177
   wire                 decode_op_alu_o;        // From mor1kx_decode of mor1kx_decode.v
178
   wire                 decode_op_bf_o;         // From mor1kx_decode of mor1kx_decode.v
179
   wire                 decode_op_bnf_o;        // From mor1kx_decode of mor1kx_decode.v
180
   wire                 decode_op_branch_o;     // From mor1kx_decode of mor1kx_decode.v
181
   wire                 decode_op_brcond_o;     // From mor1kx_decode of mor1kx_decode.v
182
   wire                 decode_op_div_o;        // From mor1kx_decode of mor1kx_decode.v
183
   wire                 decode_op_div_signed_o; // From mor1kx_decode of mor1kx_decode.v
184
   wire                 decode_op_div_unsigned_o;// From mor1kx_decode of mor1kx_decode.v
185
   wire                 decode_op_ffl1_o;       // From mor1kx_decode of mor1kx_decode.v
186
   wire [`OR1K_FPUOP_WIDTH-1:0] decode_op_fpu_o;// From mor1kx_decode of mor1kx_decode.v
187
   wire                 decode_op_jal_o;        // From mor1kx_decode of mor1kx_decode.v
188
   wire                 decode_op_jbr_o;        // From mor1kx_decode of mor1kx_decode.v
189
   wire                 decode_op_jr_o;         // From mor1kx_decode of mor1kx_decode.v
190
   wire                 decode_op_lsu_load_o;   // From mor1kx_decode of mor1kx_decode.v
191
   wire                 decode_op_lsu_store_o;  // From mor1kx_decode of mor1kx_decode.v
192
   wire                 decode_op_mfspr_o;      // From mor1kx_decode of mor1kx_decode.v
193
   wire                 decode_op_movhi_o;      // From mor1kx_decode of mor1kx_decode.v
194
   wire                 decode_op_ext_o;        // From mor1kx_decode of mor1kx_decode.v
195
   wire                 decode_op_msync_o;      // From mor1kx_decode of mor1kx_decode.v
196
   wire                 decode_op_mtspr_o;      // From mor1kx_decode of mor1kx_decode.v
197
   wire                 decode_op_mul_o;        // From mor1kx_decode of mor1kx_decode.v
198
   wire                 decode_op_mul_signed_o; // From mor1kx_decode of mor1kx_decode.v
199
   wire                 decode_op_mul_unsigned_o;// From mor1kx_decode of mor1kx_decode.v
200
   wire                 decode_op_rfe_o;        // From mor1kx_decode of mor1kx_decode.v
201
   wire                 decode_op_setflag_o;    // From mor1kx_decode of mor1kx_decode.v
202
   wire                 decode_op_shift_o;      // From mor1kx_decode of mor1kx_decode.v
203
   wire [`OR1K_ALU_OPC_WIDTH-1:0] decode_opc_alu_o;// From mor1kx_decode of mor1kx_decode.v
204
   wire [`OR1K_ALU_OPC_WIDTH-1:0] decode_opc_alu_secondary_o;// From mor1kx_decode of mor1kx_decode.v
205
   wire [`OR1K_OPCODE_WIDTH-1:0] decode_opc_insn_o;// From mor1kx_decode of mor1kx_decode.v
206
   wire                 decode_rf_wb_o;         // From mor1kx_decode of mor1kx_decode.v
207
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfa_adr_o;// From mor1kx_decode of mor1kx_decode.v
208
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfb_adr_o;// From mor1kx_decode of mor1kx_decode.v
209
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfd_adr_o;// From mor1kx_decode of mor1kx_decode.v
210
   wire                 du_restart_o;           // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
211
   wire [OPTION_OPERAND_WIDTH-1:0] du_restart_pc_o;// From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
212
   wire                 exception_taken_o;      // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
213
   wire                 execute_waiting_o;      // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
214
   wire                 fetch_quick_branch_o;   // From mor1kx_fetch_prontoespresso of mor1kx_fetch_prontoespresso.v
215
   wire                 fetch_ready_o;          // From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
216
   wire                 fetch_rf_re_o;          // From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
217
   wire [OPTION_RF_ADDR_WIDTH-1:0] fetch_rfa_adr_o;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
218
   wire [OPTION_RF_ADDR_WIDTH-1:0] fetch_rfb_adr_o;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
219
   wire                 fetch_sleep_o;          // From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
220
   wire                 fetch_take_exception_branch_o;// From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
221
   wire [OPTION_OPERAND_WIDTH-1:0] fetched_pc_o;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
222
   wire                 flag_clear_o;           // From mor1kx_execute_alu of mor1kx_execute_alu.v
223
   wire                 flag_o;                 // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
224
   wire                 flag_set_o;             // From mor1kx_execute_alu of mor1kx_execute_alu.v
225
   wire [`OR1K_FPCSR_WIDTH-1:0] fpcsr_o; // From mor1kx_execute_alu of mor1kx_execute_alu.v
226
   wire                 fpcsr_set_o;            // From mor1kx_execute_alu of mor1kx_execute_alu.v
227
   wire [OPTION_OPERAND_WIDTH-1:0] link_addr_o;  // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
228
   wire                 lsu_except_align_o;     // From mor1kx_lsu_espresso of mor1kx_lsu_espresso.v
229
   wire                 lsu_except_dbus_o;      // From mor1kx_lsu_espresso of mor1kx_lsu_espresso.v
230
   wire [OPTION_OPERAND_WIDTH-1:0] lsu_result_o;// From mor1kx_lsu_espresso of mor1kx_lsu_espresso.v
231
   wire                 lsu_valid_o;            // From mor1kx_lsu_espresso of mor1kx_lsu_espresso.v
232
   wire [OPTION_OPERAND_WIDTH-1:0] mfspr_dat_o;  // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
233
   wire [OPTION_OPERAND_WIDTH-1:0] mul_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
234
   wire                 overflow_clear_o;       // From mor1kx_execute_alu of mor1kx_execute_alu.v
235
   wire                 overflow_set_o;         // From mor1kx_execute_alu of mor1kx_execute_alu.v
236
   wire                 padv_decode_o;          // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
237
   wire                 padv_execute_o;         // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
238
   wire                 padv_fetch_o;           // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
239
   wire [OPTION_OPERAND_WIDTH-1:0] pc_fetch_next_o;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_tcm_prontoespresso.v, ...
240
   wire                 pipeline_flush_o;       // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
241
   wire [OPTION_OPERAND_WIDTH-1:0] rf_result_o;  // From mor1kx_wb_mux_espresso of mor1kx_wb_mux_espresso.v
242
   wire                 rf_we_o;                // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
243
   wire [OPTION_OPERAND_WIDTH-1:0] rfa_o;        // From mor1kx_rf_espresso of mor1kx_rf_espresso.v
244
   wire [OPTION_OPERAND_WIDTH-1:0] rfb_o;        // From mor1kx_rf_espresso of mor1kx_rf_espresso.v
245
   wire                 spr_bus_ack_ic_i;       // From mor1kx_fetch_prontoespresso of mor1kx_fetch_prontoespresso.v
246
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_ic_i;// From mor1kx_fetch_prontoespresso of mor1kx_fetch_prontoespresso.v
247
   wire [OPTION_OPERAND_WIDTH-1:0] spr_npc_o;    // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
248
   wire [OPTION_OPERAND_WIDTH-1:0] spr_ppc_o;    // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
249
   wire                 stepping_o;             // From mor1kx_ctrl_prontoespresso of mor1kx_ctrl_prontoespresso.v
250
   // End of automatics
251
 
252
   generate
253
      if (OPTION_TCM_FETCHER=="ENABLED")
254
        begin : fetch_tcm
255
 
256
           /* mor1kx_fetch_tcm_prontoespresso AUTO_TEMPLATE (
257
            .padv_i                             (padv_fetch_o),
258
            .branch_occur_i                     (ctrl_branch_occur_o),
259
            .branch_dest_i                      (ctrl_branch_target_o),
260
            .pipeline_flush_i                   (pipeline_flush_o),
261
            .pc_decode_o                        (pc_fetch_to_decode),
262
            .decode_insn_o                      (insn_fetch_to_decode),
263
            .du_restart_pc_i                    (du_restart_pc_o),
264
            .du_restart_i                       (du_restart_o),
265
            .fetch_take_exception_branch_i      (fetch_take_exception_branch_o),
266
            .execute_waiting_i                  (execute_waiting_o),
267
            .stepping_i                         (stepping_o),
268
            .flag_i                             (flag_o),
269
            .flag_clear_i                       (flag_clear_o),
270
            .flag_set_i                         (flag_set_o),
271
            ); */
272
           mor1kx_fetch_tcm_prontoespresso
273
             #(
274
               .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
275
               .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
276
               .OPTION_RESET_PC(OPTION_RESET_PC)
277
               )
278
           mor1kx_fetch_prontoespresso
279
             (/*AUTOINST*/
280
              // Outputs
281
              .ibus_adr_o               (ibus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
282
              .ibus_req_o               (ibus_req_o),
283
              .decode_insn_o            (insn_fetch_to_decode),  // Templated
284
              .fetched_pc_o             (fetched_pc_o[OPTION_OPERAND_WIDTH-1:0]),
285
              .fetch_ready_o            (fetch_ready_o),
286
              .fetch_rfa_adr_o          (fetch_rfa_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
287
              .fetch_rfb_adr_o          (fetch_rfb_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
288
              .fetch_rf_re_o            (fetch_rf_re_o),
289
              .pc_fetch_next_o          (pc_fetch_next_o[OPTION_OPERAND_WIDTH-1:0]),
290
              .decode_except_ibus_err_o (decode_except_ibus_err_o),
291
              .fetch_sleep_o            (fetch_sleep_o),
292
              // Inputs
293
              .clk                      (clk),
294
              .rst                      (rst),
295
              .ibus_err_i               (ibus_err_i),
296
              .ibus_ack_i               (ibus_ack_i),
297
              .ibus_dat_i               (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]),
298
              .padv_i                   (padv_fetch_o),          // Templated
299
              .branch_occur_i           (ctrl_branch_occur_o),   // Templated
300
              .branch_dest_i            (ctrl_branch_target_o),  // Templated
301
              .du_restart_i             (du_restart_o),          // Templated
302
              .du_restart_pc_i          (du_restart_pc_o),       // Templated
303
              .fetch_take_exception_branch_i(fetch_take_exception_branch_o), // Templated
304
              .execute_waiting_i        (execute_waiting_o),     // Templated
305
              .du_stall_i               (du_stall_i),
306
              .stepping_i               (stepping_o),            // Templated
307
              .flag_i                   (flag_o),                // Templated
308
              .flag_clear_i             (flag_clear_o),          // Templated
309
              .flag_set_i               (flag_set_o));           // Templated
310
 
311
        end
312
      else
313
        begin : fetch
314
 
315
           /* mor1kx_fetch_prontoespresso AUTO_TEMPLATE (
316
            .padv_i                             (padv_fetch_o),
317
            .branch_occur_i                     (ctrl_branch_occur_o),
318
            .branch_dest_i                      (ctrl_branch_target_o),
319
            .ctrl_insn_done_i                   (ctrl_insn_done_o),
320
            .pipeline_flush_i                   (pipeline_flush_o),
321
            .pc_decode_o                        (pc_fetch_to_decode),
322
            .decode_insn_o                      (insn_fetch_to_decode),
323
            .du_restart_pc_i                    (du_restart_pc_o),
324
            .du_restart_i                       (du_restart_o),
325
            .fetch_take_exception_branch_i      (fetch_take_exception_branch_o),
326
            .execute_waiting_i                  (execute_waiting_o),
327
            .stepping_i                         (stepping_o),
328
            .flag_i                             (flag_o),
329
            .flag_clear_i                       (flag_clear_o),
330
            .flag_set_i                         (flag_set_o),
331
            .spr_bus_dat_ic_o                   (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]),
332
            .spr_bus_ack_ic_o                   (spr_bus_ack_ic_i),
333
            .spr_bus_addr_i                     (spr_bus_addr_o[15:0]),
334
            .spr_bus_we_i                       (spr_bus_we_o),
335
            .spr_bus_stb_i                      (spr_bus_stb_o),
336
            .spr_bus_dat_i                      (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
337
            .ic_enable                          (spr_sr_o[`OR1K_SPR_SR_ICE]),
338
            ); */
339
           mor1kx_fetch_prontoespresso
340
             #(
341
               .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
342
               .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
343
               .OPTION_RESET_PC(OPTION_RESET_PC),
344
               .FEATURE_INSTRUCTIONCACHE(FEATURE_INSTRUCTIONCACHE),
345
               .OPTION_ICACHE_BLOCK_WIDTH(OPTION_ICACHE_BLOCK_WIDTH)
346
               )
347
           mor1kx_fetch_prontoespresso
348
             (/*AUTOINST*/
349
              // Outputs
350
              .ibus_adr_o               (ibus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
351
              .ibus_req_o               (ibus_req_o),
352
              .ibus_burst_o             (ibus_burst_o),
353
              .decode_insn_o            (insn_fetch_to_decode),  // Templated
354
              .fetched_pc_o             (fetched_pc_o[OPTION_OPERAND_WIDTH-1:0]),
355
              .fetch_ready_o            (fetch_ready_o),
356
              .fetch_rfa_adr_o          (fetch_rfa_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
357
              .fetch_rfb_adr_o          (fetch_rfb_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
358
              .fetch_rf_re_o            (fetch_rf_re_o),
359
              .pc_fetch_next_o          (pc_fetch_next_o[OPTION_OPERAND_WIDTH-1:0]),
360
              .decode_except_ibus_err_o (decode_except_ibus_err_o),
361
              .fetch_sleep_o            (fetch_sleep_o),
362
              .fetch_quick_branch_o     (fetch_quick_branch_o),
363
              .spr_bus_dat_ic_o         (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
364
              .spr_bus_ack_ic_o         (spr_bus_ack_ic_i),      // Templated
365
              // Inputs
366
              .clk                      (clk),
367
              .rst                      (rst),
368
              .ibus_err_i               (ibus_err_i),
369
              .ibus_ack_i               (ibus_ack_i),
370
              .ibus_dat_i               (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]),
371
              .ic_enable                (spr_sr_o[`OR1K_SPR_SR_ICE]), // Templated
372
              .padv_i                   (padv_fetch_o),          // Templated
373
              .branch_occur_i           (ctrl_branch_occur_o),   // Templated
374
              .branch_dest_i            (ctrl_branch_target_o),  // Templated
375
              .ctrl_insn_done_i         (ctrl_insn_done_o),      // Templated
376
              .du_restart_i             (du_restart_o),          // Templated
377
              .du_restart_pc_i          (du_restart_pc_o),       // Templated
378
              .fetch_take_exception_branch_i(fetch_take_exception_branch_o), // Templated
379
              .execute_waiting_i        (execute_waiting_o),     // Templated
380
              .du_stall_i               (du_stall_i),
381
              .stepping_i               (stepping_o),            // Templated
382
              .flag_i                   (flag_o),                // Templated
383
              .flag_clear_i             (flag_clear_o),          // Templated
384
              .flag_set_i               (flag_set_o),            // Templated
385
              .spr_bus_addr_i           (spr_bus_addr_o[15:0]),   // Templated
386
              .spr_bus_we_i             (spr_bus_we_o),          // Templated
387
              .spr_bus_stb_i            (spr_bus_stb_o),         // Templated
388
              .spr_bus_dat_i            (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0])); // Templated
389
        end // else: !if(OPTION_TCM_FETCHER=="ENABLED")
390
   endgenerate
391
 
392
   /* mor1kx_decode AUTO_TEMPLATE (
393
    .decode_insn_i                      (insn_fetch_to_decode),
394
    .decode_op_lsu_atomic_o             (),
395
    ); */
396
   mor1kx_decode
397
     #(
398
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
399
       .OPTION_RESET_PC(OPTION_RESET_PC),
400
       .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
401
       .FEATURE_SYSCALL(FEATURE_SYSCALL),
402
       .FEATURE_TRAP(FEATURE_TRAP),
403
       .FEATURE_RANGE(FEATURE_RANGE),
404
       .FEATURE_MAC(FEATURE_MAC),
405
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER),
406
       .FEATURE_DIVIDER(FEATURE_DIVIDER),
407
       .FEATURE_ADDC(FEATURE_ADDC),
408
       .FEATURE_SRA(FEATURE_SRA),
409
       .FEATURE_ROR(FEATURE_ROR),
410
       .FEATURE_EXT(FEATURE_EXT),
411
       .FEATURE_CMOV(FEATURE_CMOV),
412
       .FEATURE_FFL1(FEATURE_FFL1),
413
       .FEATURE_MSYNC(FEATURE_MSYNC),
414
       .FEATURE_PSYNC(FEATURE_PSYNC),
415
       .FEATURE_CSYNC(FEATURE_CSYNC),
416
       .FEATURE_CUST1(FEATURE_CUST1),
417
       .FEATURE_CUST2(FEATURE_CUST2),
418
       .FEATURE_CUST3(FEATURE_CUST3),
419
       .FEATURE_CUST4(FEATURE_CUST4),
420
       .FEATURE_CUST5(FEATURE_CUST5),
421
       .FEATURE_CUST6(FEATURE_CUST6),
422
       .FEATURE_CUST7(FEATURE_CUST7),
423
       .FEATURE_CUST8(FEATURE_CUST8)
424
       )
425
     mor1kx_decode
426
     (/*AUTOINST*/
427
      // Outputs
428
      .decode_opc_alu_o                 (decode_opc_alu_o[`OR1K_ALU_OPC_WIDTH-1:0]),
429
      .decode_opc_alu_secondary_o       (decode_opc_alu_secondary_o[`OR1K_ALU_OPC_WIDTH-1:0]),
430
      .decode_imm16_o                   (decode_imm16_o[`OR1K_IMM_WIDTH-1:0]),
431
      .decode_immediate_o               (decode_immediate_o[OPTION_OPERAND_WIDTH-1:0]),
432
      .decode_immediate_sel_o           (decode_immediate_sel_o),
433
      .decode_immjbr_upper_o            (decode_immjbr_upper_o[9:0]),
434
      .decode_rfd_adr_o                 (decode_rfd_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
435
      .decode_rfa_adr_o                 (decode_rfa_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
436
      .decode_rfb_adr_o                 (decode_rfb_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
437
      .decode_rf_wb_o                   (decode_rf_wb_o),
438
      .decode_op_jbr_o                  (decode_op_jbr_o),
439
      .decode_op_jr_o                   (decode_op_jr_o),
440
      .decode_op_jal_o                  (decode_op_jal_o),
441
      .decode_op_bf_o                   (decode_op_bf_o),
442
      .decode_op_bnf_o                  (decode_op_bnf_o),
443
      .decode_op_brcond_o               (decode_op_brcond_o),
444
      .decode_op_branch_o               (decode_op_branch_o),
445
      .decode_op_alu_o                  (decode_op_alu_o),
446
      .decode_op_lsu_load_o             (decode_op_lsu_load_o),
447
      .decode_op_lsu_store_o            (decode_op_lsu_store_o),
448
      .decode_op_lsu_atomic_o           (),                      // Templated
449
      .decode_lsu_length_o              (decode_lsu_length_o[1:0]),
450
      .decode_lsu_zext_o                (decode_lsu_zext_o),
451
      .decode_op_mfspr_o                (decode_op_mfspr_o),
452
      .decode_op_mtspr_o                (decode_op_mtspr_o),
453
      .decode_op_rfe_o                  (decode_op_rfe_o),
454
      .decode_op_setflag_o              (decode_op_setflag_o),
455
      .decode_op_add_o                  (decode_op_add_o),
456
      .decode_op_mul_o                  (decode_op_mul_o),
457
      .decode_op_mul_signed_o           (decode_op_mul_signed_o),
458
      .decode_op_mul_unsigned_o         (decode_op_mul_unsigned_o),
459
      .decode_op_div_o                  (decode_op_div_o),
460
      .decode_op_div_signed_o           (decode_op_div_signed_o),
461
      .decode_op_div_unsigned_o         (decode_op_div_unsigned_o),
462
      .decode_op_shift_o                (decode_op_shift_o),
463
      .decode_op_ffl1_o                 (decode_op_ffl1_o),
464
      .decode_op_movhi_o                (decode_op_movhi_o),
465
      .decode_op_ext_o                  (decode_op_ext_o),
466
      .decode_op_msync_o                (decode_op_msync_o),
467
      .decode_op_fpu_o                  (decode_op_fpu_o[`OR1K_FPUOP_WIDTH-1:0]),
468
      .decode_adder_do_sub_o            (decode_adder_do_sub_o),
469
      .decode_adder_do_carry_o          (decode_adder_do_carry_o),
470
      .decode_except_illegal_o          (decode_except_illegal_o),
471
      .decode_except_syscall_o          (decode_except_syscall_o),
472
      .decode_except_trap_o             (decode_except_trap_o),
473
      .decode_opc_insn_o                (decode_opc_insn_o[`OR1K_OPCODE_WIDTH-1:0]),
474
      // Inputs
475
      .clk                              (clk),
476
      .rst                              (rst),
477
      .decode_insn_i                    (insn_fetch_to_decode));         // Templated
478
 
479
   /* mor1kx_execute_alu AUTO_TEMPLATE (
480
    .padv_decode_i                      (padv_decode_o),
481
    .padv_execute_i                     (padv_execute_o),
482
    .padv_ctrl_i                        (1'b1),
483
    .pipeline_flush_i                   (pipeline_flush_o),
484
    .opc_alu_i                          (decode_opc_alu_o),
485
    .opc_alu_secondary_i                (decode_opc_alu_secondary_o),
486
    .imm16_i                            (decode_imm16_o),
487
    .immediate_i                        (decode_immediate_o),
488
    .immediate_sel_i                    (decode_immediate_sel_o),
489
    .decode_valid_i                     (padv_decode_o),
490
    .decode_immediate_i                 (decode_immediate_o),
491
    .decode_immediate_sel_i             (decode_immediate_sel_o),
492
    .decode_op_mul_i                    (decode_op_mul_o),
493
    .op_alu_i                           (decode_op_alu_o),
494
    .op_add_i                           (decode_op_add_o),
495
    .op_mul_i                           (decode_op_mul_o),
496
    .op_mul_signed_i                    (decode_op_mul_signed_o),
497
    .op_mul_unsigned_i                  (decode_op_mul_unsigned_o),
498
    .op_div_i                           (decode_op_div_o),
499
    .op_div_signed_i                    (decode_op_div_signed_o),
500
    .op_div_unsigned_i                  (decode_op_div_unsigned_o),
501
    .op_shift_i                         (decode_op_shift_o),
502
    .op_ffl1_i                          (decode_op_ffl1_o),
503
    .op_setflag_i                       (decode_op_setflag_o),
504
    .op_mtspr_i                         (decode_op_mtspr_o),
505
    .op_mfspr_i                         (decode_op_mfspr_o),
506
    .op_movhi_i                         (decode_op_movhi_o),
507
    .op_ext_i                           (decode_op_ext_o),
508
    .op_jbr_i                           (decode_op_jbr_o),
509
    .op_jr_i                            (decode_op_jr_o),
510
    .op_fpu_i                           (decode_op_fpu_o),
511
    .fpu_round_mode_i                   (2'b00),
512
    .immjbr_upper_i                     (decode_immjbr_upper_o),
513
    .pc_execute_i                       (spr_ppc_o),
514
    .adder_do_sub_i                     (decode_adder_do_sub_o),
515
    .adder_do_carry_i                   (decode_adder_do_carry_o),
516
    .decode_rfa_i                       (rfa_o),
517
    .decode_rfb_i                       (rfb_o),
518
    .rfa_i                              (rfa_o),
519
    .rfb_i                              (rfb_o),
520
    .flag_i                             (flag_o),
521
    .carry_i                            (carry_o),
522
    ); */
523
   mor1kx_execute_alu
524
     #(
525
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
526
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER),
527
       .FEATURE_DIVIDER(FEATURE_DIVIDER),
528
       .FEATURE_ADDC(FEATURE_ADDC),
529
       .FEATURE_SRA(FEATURE_SRA),
530
       .FEATURE_ROR(FEATURE_ROR),
531
       .FEATURE_EXT(FEATURE_EXT),
532
       .FEATURE_CMOV(FEATURE_CMOV),
533
       .FEATURE_FFL1(FEATURE_FFL1),
534
       .FEATURE_CUST1(FEATURE_CUST1),
535
       .FEATURE_CUST2(FEATURE_CUST2),
536
       .FEATURE_CUST3(FEATURE_CUST3),
537
       .FEATURE_CUST4(FEATURE_CUST4),
538
       .FEATURE_CUST5(FEATURE_CUST5),
539
       .FEATURE_CUST6(FEATURE_CUST6),
540
       .FEATURE_CUST7(FEATURE_CUST7),
541
       .FEATURE_CUST8(FEATURE_CUST8),
542
       .OPTION_SHIFTER(OPTION_SHIFTER)
543
       )
544
     mor1kx_execute_alu
545
     (/*AUTOINST*/
546
      // Outputs
547
      .flag_set_o                       (flag_set_o),
548
      .flag_clear_o                     (flag_clear_o),
549
      .carry_set_o                      (carry_set_o),
550
      .carry_clear_o                    (carry_clear_o),
551
      .overflow_set_o                   (overflow_set_o),
552
      .overflow_clear_o                 (overflow_clear_o),
553
      .fpcsr_o                          (fpcsr_o[`OR1K_FPCSR_WIDTH-1:0]),
554
      .fpcsr_set_o                      (fpcsr_set_o),
555
      .alu_result_o                     (alu_result_o[OPTION_OPERAND_WIDTH-1:0]),
556
      .alu_valid_o                      (alu_valid_o),
557
      .mul_result_o                     (mul_result_o[OPTION_OPERAND_WIDTH-1:0]),
558
      .adder_result_o                   (adder_result_o[OPTION_OPERAND_WIDTH-1:0]),
559
      // Inputs
560
      .clk                              (clk),
561
      .rst                              (rst),
562
      .padv_decode_i                    (padv_decode_o),         // Templated
563
      .padv_execute_i                   (padv_execute_o),        // Templated
564
      .padv_ctrl_i                      (1'b1),                  // Templated
565
      .pipeline_flush_i                 (pipeline_flush_o),      // Templated
566
      .opc_alu_i                        (decode_opc_alu_o),      // Templated
567
      .opc_alu_secondary_i              (decode_opc_alu_secondary_o), // Templated
568
      .imm16_i                          (decode_imm16_o),        // Templated
569
      .immediate_i                      (decode_immediate_o),    // Templated
570
      .immediate_sel_i                  (decode_immediate_sel_o), // Templated
571
      .decode_immediate_i               (decode_immediate_o),    // Templated
572
      .decode_immediate_sel_i           (decode_immediate_sel_o), // Templated
573
      .decode_valid_i                   (padv_decode_o),         // Templated
574
      .decode_op_mul_i                  (decode_op_mul_o),       // Templated
575
      .op_alu_i                         (decode_op_alu_o),       // Templated
576
      .op_add_i                         (decode_op_add_o),       // Templated
577
      .op_mul_i                         (decode_op_mul_o),       // Templated
578
      .op_mul_signed_i                  (decode_op_mul_signed_o), // Templated
579
      .op_mul_unsigned_i                (decode_op_mul_unsigned_o), // Templated
580
      .op_div_i                         (decode_op_div_o),       // Templated
581
      .op_div_signed_i                  (decode_op_div_signed_o), // Templated
582
      .op_div_unsigned_i                (decode_op_div_unsigned_o), // Templated
583
      .op_shift_i                       (decode_op_shift_o),     // Templated
584
      .op_ffl1_i                        (decode_op_ffl1_o),      // Templated
585
      .op_setflag_i                     (decode_op_setflag_o),   // Templated
586
      .op_mtspr_i                       (decode_op_mtspr_o),     // Templated
587
      .op_mfspr_i                       (decode_op_mfspr_o),     // Templated
588
      .op_movhi_i                       (decode_op_movhi_o),     // Templated
589
      .op_ext_i                         (decode_op_ext_o),       // Templated
590
      .op_fpu_i                         (decode_op_fpu_o),       // Templated
591
      .fpu_round_mode_i                 (2'b00),                 // Templated
592
      .op_jbr_i                         (decode_op_jbr_o),       // Templated
593
      .op_jr_i                          (decode_op_jr_o),        // Templated
594
      .immjbr_upper_i                   (decode_immjbr_upper_o), // Templated
595
      .pc_execute_i                     (spr_ppc_o),             // Templated
596
      .adder_do_sub_i                   (decode_adder_do_sub_o), // Templated
597
      .adder_do_carry_i                 (decode_adder_do_carry_o), // Templated
598
      .decode_rfa_i                     (rfa_o),                 // Templated
599
      .decode_rfb_i                     (rfb_o),                 // Templated
600
      .rfa_i                            (rfa_o),                 // Templated
601
      .rfb_i                            (rfb_o),                 // Templated
602
      .flag_i                           (flag_o),                // Templated
603
      .carry_i                          (carry_o));              // Templated
604
 
605
 
606
   /* mor1kx_lsu_espresso AUTO_TEMPLATE (
607
    .padv_fetch_i                       (padv_fetch_o),
608
    .lsu_adr_i                          (adder_result_o),
609
    .rfb_i                              (rfb_o),
610
    .op_lsu_load_i                      (decode_op_lsu_load_o),
611
    .op_lsu_store_i                     (decode_op_lsu_store_o),
612
    .lsu_length_i                       (decode_lsu_length_o),
613
    .lsu_zext_i                         (decode_lsu_zext_o),
614
    .exception_taken_i                  (exception_taken_o),
615
    .du_restart_i                       (du_restart_o),
616
    .stepping_i                         (stepping_o),
617
    .next_fetch_done_i                  (fetch_ready_o),
618
    ); */
619
   mor1kx_lsu_espresso
620
     #(
621
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH)
622
       )
623
     mor1kx_lsu_espresso
624
     (/*AUTOINST*/
625
      // Outputs
626
      .lsu_result_o                     (lsu_result_o[OPTION_OPERAND_WIDTH-1:0]),
627
      .lsu_valid_o                      (lsu_valid_o),
628
      .lsu_except_dbus_o                (lsu_except_dbus_o),
629
      .lsu_except_align_o               (lsu_except_align_o),
630
      .dbus_adr_o                       (dbus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
631
      .dbus_req_o                       (dbus_req_o),
632
      .dbus_dat_o                       (dbus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
633
      .dbus_bsel_o                      (dbus_bsel_o[3:0]),
634
      .dbus_we_o                        (dbus_we_o),
635
      .dbus_burst_o                     (dbus_burst_o),
636
      // Inputs
637
      .clk                              (clk),
638
      .rst                              (rst),
639
      .padv_fetch_i                     (padv_fetch_o),          // Templated
640
      .lsu_adr_i                        (adder_result_o),        // Templated
641
      .rfb_i                            (rfb_o),                 // Templated
642
      .op_lsu_load_i                    (decode_op_lsu_load_o),  // Templated
643
      .op_lsu_store_i                   (decode_op_lsu_store_o), // Templated
644
      .lsu_length_i                     (decode_lsu_length_o),   // Templated
645
      .lsu_zext_i                       (decode_lsu_zext_o),     // Templated
646
      .exception_taken_i                (exception_taken_o),     // Templated
647
      .du_restart_i                     (du_restart_o),          // Templated
648
      .stepping_i                       (stepping_o),            // Templated
649
      .next_fetch_done_i                (fetch_ready_o),         // Templated
650
      .dbus_err_i                       (dbus_err_i),
651
      .dbus_ack_i                       (dbus_ack_i),
652
      .dbus_dat_i                       (dbus_dat_i[OPTION_OPERAND_WIDTH-1:0]));
653
 
654
 
655
   /* mor1kx_wb_mux_espresso AUTO_TEMPLATE (
656
    .alu_result_i                       (alu_result_o),
657
    .lsu_result_i                       (lsu_result_o),
658
    .spr_i                              (mfspr_dat_o),
659
    .op_jal_i                           (decode_op_jal_o),
660
    .op_lsu_load_i                      (decode_op_lsu_load_o),
661
    .ppc_i                              (spr_ppc_o),
662
    .op_mfspr_i                         (decode_op_mfspr_o),
663
    .pc_fetch_next_i                    (link_addr_o),
664
    ); */
665
   mor1kx_wb_mux_espresso
666
     #(
667
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH)
668
       )
669
     mor1kx_wb_mux_espresso
670
     (/*AUTOINST*/
671
      // Outputs
672
      .rf_result_o                      (rf_result_o[OPTION_OPERAND_WIDTH-1:0]),
673
      // Inputs
674
      .clk                              (clk),
675
      .rst                              (rst),
676
      .alu_result_i                     (alu_result_o),          // Templated
677
      .lsu_result_i                     (lsu_result_o),          // Templated
678
      .ppc_i                            (spr_ppc_o),             // Templated
679
      .pc_fetch_next_i                  (link_addr_o),           // Templated
680
      .spr_i                            (mfspr_dat_o),           // Templated
681
      .op_jal_i                         (decode_op_jal_o),       // Templated
682
      .op_lsu_load_i                    (decode_op_lsu_load_o),  // Templated
683
      .op_mfspr_i                       (decode_op_mfspr_o));    // Templated
684
 
685
 
686
   /* mor1kx_rf_espresso AUTO_TEMPLATE (
687
    .rf_we_i                            (rf_we_o),
688
    .rf_re_i                            (fetch_rf_re_o),
689
    .rfd_adr_i                          (decode_rfd_adr_o),
690
    .rfa_adr_i                          (fetch_rfa_adr_o),
691
    .rfb_adr_i                          (fetch_rfb_adr_o),
692
    .result_i                           (rf_result_o),
693
    ); */
694
   mor1kx_rf_espresso
695
     #(
696
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
697
       .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
698
       .OPTION_RF_WORDS(OPTION_RF_WORDS)
699
       )
700
     mor1kx_rf_espresso
701
     (/*AUTOINST*/
702
      // Outputs
703
      .rfa_o                            (rfa_o[OPTION_OPERAND_WIDTH-1:0]),
704
      .rfb_o                            (rfb_o[OPTION_OPERAND_WIDTH-1:0]),
705
      // Inputs
706
      .clk                              (clk),
707
      .rst                              (rst),
708
      .rfd_adr_i                        (decode_rfd_adr_o),      // Templated
709
      .rfa_adr_i                        (fetch_rfa_adr_o),       // Templated
710
      .rfb_adr_i                        (fetch_rfb_adr_o),       // Templated
711
      .rf_we_i                          (rf_we_o),               // Templated
712
      .rf_re_i                          (fetch_rf_re_o),         // Templated
713
      .result_i                         (rf_result_o));          // Templated
714
 
715
 
716
   /* Debug signals required for the debug monitor */
717
   function [OPTION_OPERAND_WIDTH-1:0] get_gpr;
718
      // verilator public
719
      input [4:0]                   gpr_num;
720
      begin
721
         // If we're writing, the value won't be in the GPR yet, so snoop
722
         // it off the result in line.
723
         if (rf_we_o)
724
           get_gpr = rf_result_o;
725
         else
726
           get_gpr = mor1kx_rf_espresso.rfa.mem[gpr_num];
727
      end
728
   endfunction //
729
 
730
 
731
`ifndef SYNTHESIS
732
// synthesis translate_off
733
   task set_gpr;
734
      // verilator public
735
      input [4:0] gpr_num;
736
      input [OPTION_OPERAND_WIDTH-1:0] gpr_value;
737
      begin
738
         mor1kx_rf_espresso.rfa.mem[gpr_num] = gpr_value;
739
         mor1kx_rf_espresso.rfb.mem[gpr_num] = gpr_value;
740
      end
741
   endtask
742
// synthesis translate_on
743
`endif
744
 
745
   /* mor1kx_ctrl_prontoespresso AUTO_TEMPLATE (
746
    .ctrl_alu_result_i          (alu_result_o),
747
    .ctrl_rfb_i                 (rfb_o),
748
    .ctrl_flag_set_i            (flag_set_o),
749
    .ctrl_flag_clear_i          (flag_clear_o),
750
    .pc_ctrl_i                  (),
751
    .pc_fetch_next_i            (pc_fetch_next_o),
752
    .ctrl_opc_insn_i            (decode_opc_insn_o),
753
    .ctrl_branch_target_i       (ctrl_branch_target_o),
754
    .op_lsu_load_i              (decode_op_lsu_load_o),
755
    .op_lsu_store_i             (decode_op_lsu_store_o),
756
    .alu_valid_i                (alu_valid_o),
757
    .lsu_valid_i                (lsu_valid_o),
758
    .op_jr_i                    (decode_op_jr_o),
759
    .op_jbr_i                   (decode_op_jbr_o),
760
    .except_ibus_err_i          (decode_except_ibus_err_o),
761
    .except_illegal_i           (decode_except_illegal_o),
762
    .except_syscall_i           (decode_except_syscall_o),
763
    .except_dbus_i              (lsu_except_dbus_o),
764
    .except_trap_i              (decode_except_trap_o),
765
    .except_align_i             (lsu_except_align_o),
766
    .fetch_ready_i              (fetch_ready_o),
767
    .execute_valid_i            (execute_valid_o),
768
    .execute_waiting_i          (execute_waiting_o),
769
    .fetch_branch_taken_i       (fetch_branch_taken_o),
770
    .fetch_ppc_i                (fetched_pc_o),
771
    .fetch_sleep_i              (fetch_sleep_o),
772
    .fetch_quick_branch_i       (fetch_quick_branch_o),
773
    .rf_wb_i                    (decode_rf_wb_o),
774
    .spr_bus_dat_dc_i           (),
775
    .spr_bus_ack_dc_i           (),
776
    .carry_set_i                (carry_set_o),
777
    .carry_clear_i              (carry_clear_o),
778
    .overflow_set_i             (overflow_set_o),
779
    .overflow_clear_i           (overflow_clear_o),
780
    ); */
781
   mor1kx_ctrl_prontoespresso
782
     #(
783
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
784
       .OPTION_RESET_PC(OPTION_RESET_PC),
785
       .FEATURE_PIC(FEATURE_PIC),
786
       .FEATURE_TIMER(FEATURE_TIMER),
787
       .OPTION_PIC_TRIGGER(OPTION_PIC_TRIGGER),
788
       .OPTION_PIC_NMI_WIDTH(OPTION_PIC_NMI_WIDTH),
789
       .FEATURE_DSX(FEATURE_DSX),
790
       .FEATURE_FASTCONTEXTS(FEATURE_FASTCONTEXTS),
791
       .FEATURE_OVERFLOW(FEATURE_OVERFLOW),
792
       .FEATURE_DATACACHE(FEATURE_DATACACHE),
793
       .OPTION_DCACHE_BLOCK_WIDTH(OPTION_DCACHE_BLOCK_WIDTH),
794
       .OPTION_DCACHE_SET_WIDTH(OPTION_DCACHE_SET_WIDTH),
795
       .OPTION_DCACHE_WAYS(OPTION_DCACHE_WAYS),
796
       .FEATURE_DMMU(FEATURE_DMMU),
797
       .FEATURE_INSTRUCTIONCACHE(FEATURE_INSTRUCTIONCACHE),
798
       .OPTION_ICACHE_BLOCK_WIDTH(OPTION_ICACHE_BLOCK_WIDTH),
799
       .OPTION_ICACHE_SET_WIDTH(OPTION_ICACHE_SET_WIDTH),
800
       .OPTION_ICACHE_WAYS(OPTION_ICACHE_WAYS),
801
       .FEATURE_IMMU(FEATURE_IMMU),
802
       .FEATURE_DEBUGUNIT(FEATURE_DEBUGUNIT),
803
       .FEATURE_PERFCOUNTERS(FEATURE_PERFCOUNTERS),
804
       .FEATURE_MAC(FEATURE_MAC),
805
       .FEATURE_MULTICORE(FEATURE_MULTICORE),
806
       .FEATURE_SYSCALL(FEATURE_SYSCALL),
807
       .FEATURE_TRAP(FEATURE_TRAP),
808
       .FEATURE_RANGE(FEATURE_RANGE)
809
       )
810
     mor1kx_ctrl_prontoespresso
811
       (/*AUTOINST*/
812
        // Outputs
813
        .spr_npc_o                      (spr_npc_o[OPTION_OPERAND_WIDTH-1:0]),
814
        .spr_ppc_o                      (spr_ppc_o[OPTION_OPERAND_WIDTH-1:0]),
815
        .link_addr_o                    (link_addr_o[OPTION_OPERAND_WIDTH-1:0]),
816
        .mfspr_dat_o                    (mfspr_dat_o[OPTION_OPERAND_WIDTH-1:0]),
817
        .ctrl_mfspr_we_o                (ctrl_mfspr_we_o),
818
        .flag_o                         (flag_o),
819
        .carry_o                        (carry_o),
820
        .pipeline_flush_o               (pipeline_flush_o),
821
        .padv_fetch_o                   (padv_fetch_o),
822
        .padv_decode_o                  (padv_decode_o),
823
        .padv_execute_o                 (padv_execute_o),
824
        .fetch_take_exception_branch_o  (fetch_take_exception_branch_o),
825
        .exception_taken_o              (exception_taken_o),
826
        .execute_waiting_o              (execute_waiting_o),
827
        .stepping_o                     (stepping_o),
828
        .du_dat_o                       (du_dat_o[OPTION_OPERAND_WIDTH-1:0]),
829
        .du_ack_o                       (du_ack_o),
830
        .du_stall_o                     (du_stall_o),
831
        .du_restart_pc_o                (du_restart_pc_o[OPTION_OPERAND_WIDTH-1:0]),
832
        .du_restart_o                   (du_restart_o),
833
        .spr_bus_addr_o                 (spr_bus_addr_o[15:0]),
834
        .spr_bus_we_o                   (spr_bus_we_o),
835
        .spr_bus_stb_o                  (spr_bus_stb_o),
836
        .spr_bus_dat_o                  (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
837
        .spr_sr_o                       (spr_sr_o[15:0]),
838
        .ctrl_branch_target_o           (ctrl_branch_target_o[OPTION_OPERAND_WIDTH-1:0]),
839
        .ctrl_insn_done_o               (ctrl_insn_done_o),
840
        .ctrl_branch_occur_o            (ctrl_branch_occur_o),
841
        .rf_we_o                        (rf_we_o),
842
        // Inputs
843
        .clk                            (clk),
844
        .rst                            (rst),
845
        .ctrl_alu_result_i              (alu_result_o),          // Templated
846
        .ctrl_rfb_i                     (rfb_o),                 // Templated
847
        .ctrl_flag_set_i                (flag_set_o),            // Templated
848
        .ctrl_flag_clear_i              (flag_clear_o),          // Templated
849
        .ctrl_opc_insn_i                (decode_opc_insn_o),     // Templated
850
        .fetch_ppc_i                    (fetched_pc_o),          // Templated
851
        .pc_fetch_next_i                (pc_fetch_next_o),       // Templated
852
        .fetch_sleep_i                  (fetch_sleep_o),         // Templated
853
        .except_ibus_err_i              (decode_except_ibus_err_o), // Templated
854
        .except_illegal_i               (decode_except_illegal_o), // Templated
855
        .except_syscall_i               (decode_except_syscall_o), // Templated
856
        .except_dbus_i                  (lsu_except_dbus_o),     // Templated
857
        .except_trap_i                  (decode_except_trap_o),  // Templated
858
        .except_align_i                 (lsu_except_align_o),    // Templated
859
        .fetch_ready_i                  (fetch_ready_o),         // Templated
860
        .fetch_quick_branch_i           (fetch_quick_branch_o),  // Templated
861
        .alu_valid_i                    (alu_valid_o),           // Templated
862
        .lsu_valid_i                    (lsu_valid_o),           // Templated
863
        .op_lsu_load_i                  (decode_op_lsu_load_o),  // Templated
864
        .op_lsu_store_i                 (decode_op_lsu_store_o), // Templated
865
        .op_jr_i                        (decode_op_jr_o),        // Templated
866
        .op_jbr_i                       (decode_op_jbr_o),       // Templated
867
        .irq_i                          (irq_i[31:0]),
868
        .carry_set_i                    (carry_set_o),           // Templated
869
        .carry_clear_i                  (carry_clear_o),         // Templated
870
        .overflow_set_i                 (overflow_set_o),        // Templated
871
        .overflow_clear_i               (overflow_clear_o),      // Templated
872
        .du_addr_i                      (du_addr_i[15:0]),
873
        .du_stb_i                       (du_stb_i),
874
        .du_dat_i                       (du_dat_i[OPTION_OPERAND_WIDTH-1:0]),
875
        .du_we_i                        (du_we_i),
876
        .du_stall_i                     (du_stall_i),
877
        .spr_bus_dat_dc_i               (),                      // Templated
878
        .spr_bus_ack_dc_i               (),                      // Templated
879
        .spr_bus_dat_ic_i               (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]),
880
        .spr_bus_ack_ic_i               (spr_bus_ack_ic_i),
881
        .spr_bus_dat_dmmu_i             (spr_bus_dat_dmmu_i[OPTION_OPERAND_WIDTH-1:0]),
882
        .spr_bus_ack_dmmu_i             (spr_bus_ack_dmmu_i),
883
        .spr_bus_dat_immu_i             (spr_bus_dat_immu_i[OPTION_OPERAND_WIDTH-1:0]),
884
        .spr_bus_ack_immu_i             (spr_bus_ack_immu_i),
885
        .spr_bus_dat_mac_i              (spr_bus_dat_mac_i[OPTION_OPERAND_WIDTH-1:0]),
886
        .spr_bus_ack_mac_i              (spr_bus_ack_mac_i),
887
        .spr_bus_dat_pmu_i              (spr_bus_dat_pmu_i[OPTION_OPERAND_WIDTH-1:0]),
888
        .spr_bus_ack_pmu_i              (spr_bus_ack_pmu_i),
889
        .spr_bus_dat_pcu_i              (spr_bus_dat_pcu_i[OPTION_OPERAND_WIDTH-1:0]),
890
        .spr_bus_ack_pcu_i              (spr_bus_ack_pcu_i),
891
        .spr_bus_dat_fpu_i              (spr_bus_dat_fpu_i[OPTION_OPERAND_WIDTH-1:0]),
892
        .spr_bus_ack_fpu_i              (spr_bus_ack_fpu_i),
893
        .multicore_coreid_i             (multicore_coreid_i[OPTION_OPERAND_WIDTH-1:0]),
894
        .rf_wb_i                        (decode_rf_wb_o));       // Templated
895
 
896
endmodule // mor1kx_cpu_prontoespresso

powered by: WebSVN 2.1.0

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