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_cpu_cappuccino.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: "Cappuccino" 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_cappuccino
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 OPTION_DCACHE_LIMIT_WIDTH = 32,
26
    parameter OPTION_DCACHE_SNOOP = "NONE",
27
    parameter FEATURE_DMMU = "NONE",
28
    parameter FEATURE_DMMU_HW_TLB_RELOAD = "NONE",
29
    parameter OPTION_DMMU_SET_WIDTH = 6,
30
    parameter OPTION_DMMU_WAYS = 1,
31
    parameter FEATURE_INSTRUCTIONCACHE = "NONE",
32
    parameter OPTION_ICACHE_BLOCK_WIDTH = 5,
33
    parameter OPTION_ICACHE_SET_WIDTH = 9,
34
    parameter OPTION_ICACHE_WAYS = 2,
35
    parameter OPTION_ICACHE_LIMIT_WIDTH = 32,
36
    parameter FEATURE_IMMU = "NONE",
37
    parameter FEATURE_IMMU_HW_TLB_RELOAD = "NONE",
38
    parameter OPTION_IMMU_SET_WIDTH = 6,
39
    parameter OPTION_IMMU_WAYS = 1,
40
    parameter FEATURE_TIMER = "ENABLED",
41
    parameter FEATURE_DEBUGUNIT = "NONE",
42
    parameter FEATURE_PERFCOUNTERS = "NONE",
43
    parameter FEATURE_MAC = "NONE",
44
 
45
    parameter FEATURE_SYSCALL = "ENABLED",
46
    parameter FEATURE_TRAP = "ENABLED",
47
    parameter FEATURE_RANGE = "ENABLED",
48
 
49
    parameter FEATURE_PIC = "ENABLED",
50
    parameter OPTION_PIC_TRIGGER = "LEVEL",
51
    parameter OPTION_PIC_NMI_WIDTH = 0,
52
 
53
    parameter FEATURE_DSX = "NONE",
54
    parameter FEATURE_OVERFLOW = "NONE",
55
    parameter FEATURE_CARRY_FLAG = "ENABLED",
56
 
57
    parameter FEATURE_FASTCONTEXTS = "NONE",
58
    parameter OPTION_RF_NUM_SHADOW_GPR = 0,
59
    parameter OPTION_RF_ADDR_WIDTH = 5,
60
    parameter OPTION_RF_WORDS = 32,
61
 
62
    parameter OPTION_RESET_PC = {{(OPTION_OPERAND_WIDTH-13){1'b0}},
63
                                 `OR1K_RESET_VECTOR,8'd0},
64
 
65
    parameter FEATURE_MULTIPLIER = "THREESTAGE",
66
    parameter FEATURE_DIVIDER = "NONE",
67
 
68
    parameter OPTION_SHIFTER = "BARREL",
69
 
70
    parameter FEATURE_ADDC = "NONE",
71
    parameter FEATURE_SRA = "ENABLED",
72
    parameter FEATURE_ROR = "NONE",
73
    parameter FEATURE_EXT = "NONE",
74
    parameter FEATURE_CMOV = "NONE",
75
    parameter FEATURE_FFL1 = "NONE",
76
    parameter FEATURE_MSYNC = "NONE",
77
    parameter FEATURE_PSYNC = "NONE",
78
    parameter FEATURE_CSYNC = "NONE",
79
 
80
    parameter FEATURE_ATOMIC = "ENABLED",
81
 
82
 
83
    parameter FEATURE_CUST1 = "NONE",
84
    parameter FEATURE_CUST2 = "NONE",
85
    parameter FEATURE_CUST3 = "NONE",
86
    parameter FEATURE_CUST4 = "NONE",
87
    parameter FEATURE_CUST5 = "NONE",
88
    parameter FEATURE_CUST6 = "NONE",
89
    parameter FEATURE_CUST7 = "NONE",
90
    parameter FEATURE_CUST8 = "NONE",
91
 
92
    parameter FEATURE_STORE_BUFFER = "ENABLED",
93
    parameter OPTION_STORE_BUFFER_DEPTH_WIDTH = 8,
94
 
95
    parameter FEATURE_MULTICORE = "NONE",
96
 
97
    parameter FEATURE_TRACEPORT_EXEC = "NONE"
98
    )
99
   (
100
    input                             clk,
101
    input                             rst,
102
 
103
    // Instruction bus
104
    input                             ibus_err_i,
105
    input                             ibus_ack_i,
106
    input [`OR1K_INSN_WIDTH-1:0]      ibus_dat_i,
107
    output [OPTION_OPERAND_WIDTH-1:0] ibus_adr_o,
108
    output                            ibus_req_o,
109
    output                            ibus_burst_o,
110
 
111
    // Data bus
112
    input                             dbus_err_i,
113
    input                             dbus_ack_i,
114
    input [OPTION_OPERAND_WIDTH-1:0]  dbus_dat_i,
115
    output [OPTION_OPERAND_WIDTH-1:0] dbus_adr_o,
116
    output [OPTION_OPERAND_WIDTH-1:0] dbus_dat_o,
117
    output                            dbus_req_o,
118
    output [3:0]                       dbus_bsel_o,
119
    output                            dbus_we_o,
120
    output                            dbus_burst_o,
121
 
122
    // Interrupts
123
    input [31:0]                       irq_i,
124
 
125
    // Debug interface
126
    input [15:0]                       du_addr_i,
127
    input                             du_stb_i,
128
    input [OPTION_OPERAND_WIDTH-1:0]  du_dat_i,
129
    input                             du_we_i,
130
    output [OPTION_OPERAND_WIDTH-1:0] du_dat_o,
131
    output                            du_ack_o,
132
    // Stall control from debug interface
133
    input                             du_stall_i,
134
    output                            du_stall_o,
135
 
136
    output reg                        traceport_exec_valid_o,
137
    output reg [31:0]                 traceport_exec_pc_o,
138
    output reg [`OR1K_INSN_WIDTH-1:0] traceport_exec_insn_o,
139
    output [OPTION_OPERAND_WIDTH-1:0] traceport_exec_wbdata_o,
140
    output [OPTION_RF_ADDR_WIDTH-1:0] traceport_exec_wbreg_o,
141
    output                            traceport_exec_wben_o,
142
 
143
    // SPR accesses to external units (cache, mmu, etc.)
144
    output [15:0]                      spr_bus_addr_o,
145
    output                            spr_bus_we_o,
146
    output                            spr_bus_stb_o,
147
    output [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_o,
148
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_mac_i,
149
    input                             spr_bus_ack_mac_i,
150
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_pmu_i,
151
    input                             spr_bus_ack_pmu_i,
152
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_pcu_i,
153
    input                             spr_bus_ack_pcu_i,
154
    input [OPTION_OPERAND_WIDTH-1:0]  spr_bus_dat_fpu_i,
155
    input                             spr_bus_ack_fpu_i,
156
    output [15:0]                      spr_sr_o,
157
 
158
    input [OPTION_OPERAND_WIDTH-1:0]  multicore_coreid_i,
159
    input [OPTION_OPERAND_WIDTH-1:0]  multicore_numcores_i,
160
 
161
    input [31:0]                      snoop_adr_i,
162
    input                            snoop_en_i
163
    );
164
 
165
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_fetch_to_decode;
166
   wire [`OR1K_INSN_WIDTH-1:0]        insn_fetch_to_decode;
167
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_decode_to_execute;
168
   wire [OPTION_OPERAND_WIDTH-1:0]   pc_execute_to_ctrl;
169
 
170
   /*AUTOWIRE*/
171
   // Beginning of automatic wires (for undeclared instantiated-module outputs)
172
   wire [OPTION_OPERAND_WIDTH-1:0] adder_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
173
   wire [OPTION_OPERAND_WIDTH-1:0] alu_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
174
   wire                 alu_valid_o;            // From mor1kx_execute_alu of mor1kx_execute_alu.v
175
   wire                 atomic_flag_clear_o;    // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
176
   wire                 atomic_flag_set_o;      // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
177
   wire                 branch_mispredict_o;    // From mor1kx_branch_prediction of mor1kx_branch_prediction.v
178
   wire                 carry_clear_o;          // From mor1kx_execute_alu of mor1kx_execute_alu.v
179
   wire                 carry_set_o;            // From mor1kx_execute_alu of mor1kx_execute_alu.v
180
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_alu_result_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
181
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_branch_except_pc_o;// From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
182
   wire                 ctrl_branch_exception_o;// From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
183
   wire                 ctrl_bubble_o;          // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
184
   wire                 ctrl_carry_clear_o;     // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
185
   wire                 ctrl_carry_o;           // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
186
   wire                 ctrl_carry_set_o;       // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
187
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_epcr_o;  // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
188
   wire                 ctrl_except_align_o;    // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
189
   wire                 ctrl_except_dbus_o;     // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
190
   wire                 ctrl_except_dpagefault_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
191
   wire                 ctrl_except_dtlb_miss_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
192
   wire                 ctrl_except_ibus_align_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
193
   wire                 ctrl_except_ibus_err_o; // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
194
   wire                 ctrl_except_illegal_o;  // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
195
   wire                 ctrl_except_ipagefault_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
196
   wire                 ctrl_except_itlb_miss_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
197
   wire                 ctrl_except_syscall_o;  // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
198
   wire                 ctrl_except_trap_o;     // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
199
   wire                 ctrl_flag_clear_o;      // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
200
   wire                 ctrl_flag_o;            // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
201
   wire                 ctrl_flag_set_o;        // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
202
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_lsu_adr_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
203
   wire [1:0]            ctrl_lsu_length_o;      // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
204
   wire                 ctrl_lsu_zext_o;        // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
205
   wire                 ctrl_mfspr_ack_o;       // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
206
   wire                 ctrl_mtspr_ack_o;       // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
207
   wire                 ctrl_op_lsu_atomic_o;   // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
208
   wire                 ctrl_op_lsu_load_o;     // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
209
   wire                 ctrl_op_lsu_store_o;    // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
210
   wire                 ctrl_op_mfspr_o;        // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
211
   wire                 ctrl_op_mtspr_o;        // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
212
   wire                 ctrl_op_mul_o;          // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
213
   wire                 ctrl_op_rfe_o;          // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
214
   wire                 ctrl_overflow_clear_o;  // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
215
   wire                 ctrl_overflow_set_o;    // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
216
   wire                 ctrl_rf_wb_o;           // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
217
   wire [OPTION_OPERAND_WIDTH-1:0] ctrl_rfb_o;   // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
218
   wire [OPTION_RF_ADDR_WIDTH-1:0] ctrl_rfd_adr_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
219
   wire                 ctrl_valid_o;           // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
220
   wire                 decode_adder_do_carry_o;// From mor1kx_decode of mor1kx_decode.v
221
   wire                 decode_adder_do_sub_o;  // From mor1kx_decode of mor1kx_decode.v
222
   wire                 decode_branch_o;        // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
223
   wire [OPTION_OPERAND_WIDTH-1:0] decode_branch_target_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
224
   wire                 decode_bubble_o;        // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
225
   wire                 decode_except_ibus_err_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
226
   wire                 decode_except_illegal_o;// From mor1kx_decode of mor1kx_decode.v
227
   wire                 decode_except_ipagefault_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
228
   wire                 decode_except_itlb_miss_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
229
   wire                 decode_except_syscall_o;// From mor1kx_decode of mor1kx_decode.v
230
   wire                 decode_except_trap_o;   // From mor1kx_decode of mor1kx_decode.v
231
   wire [`OR1K_IMM_WIDTH-1:0] decode_imm16_o;    // From mor1kx_decode of mor1kx_decode.v
232
   wire [OPTION_OPERAND_WIDTH-1:0] decode_immediate_o;// From mor1kx_decode of mor1kx_decode.v
233
   wire                 decode_immediate_sel_o; // From mor1kx_decode of mor1kx_decode.v
234
   wire [9:0]            decode_immjbr_upper_o;  // From mor1kx_decode of mor1kx_decode.v
235
   wire [1:0]            decode_lsu_length_o;    // From mor1kx_decode of mor1kx_decode.v
236
   wire                 decode_lsu_zext_o;      // From mor1kx_decode of mor1kx_decode.v
237
   wire                 decode_op_add_o;        // From mor1kx_decode of mor1kx_decode.v
238
   wire                 decode_op_alu_o;        // From mor1kx_decode of mor1kx_decode.v
239
   wire                 decode_op_bf_o;         // From mor1kx_decode of mor1kx_decode.v
240
   wire                 decode_op_bnf_o;        // From mor1kx_decode of mor1kx_decode.v
241
   wire                 decode_op_branch_o;     // From mor1kx_decode of mor1kx_decode.v
242
   wire                 decode_op_brcond_o;     // From mor1kx_decode of mor1kx_decode.v
243
   wire                 decode_op_div_o;        // From mor1kx_decode of mor1kx_decode.v
244
   wire                 decode_op_div_signed_o; // From mor1kx_decode of mor1kx_decode.v
245
   wire                 decode_op_div_unsigned_o;// From mor1kx_decode of mor1kx_decode.v
246
   wire                 decode_op_ffl1_o;       // From mor1kx_decode of mor1kx_decode.v
247
   wire                 decode_op_jal_o;        // From mor1kx_decode of mor1kx_decode.v
248
   wire                 decode_op_jbr_o;        // From mor1kx_decode of mor1kx_decode.v
249
   wire                 decode_op_jr_o;         // From mor1kx_decode of mor1kx_decode.v
250
   wire                 decode_op_lsu_atomic_o; // From mor1kx_decode of mor1kx_decode.v
251
   wire                 decode_op_lsu_load_o;   // From mor1kx_decode of mor1kx_decode.v
252
   wire                 decode_op_lsu_store_o;  // From mor1kx_decode of mor1kx_decode.v
253
   wire                 decode_op_mfspr_o;      // From mor1kx_decode of mor1kx_decode.v
254
   wire                 decode_op_movhi_o;      // From mor1kx_decode of mor1kx_decode.v
255
   wire                 decode_op_mtspr_o;      // From mor1kx_decode of mor1kx_decode.v
256
   wire                 decode_op_mul_o;        // From mor1kx_decode of mor1kx_decode.v
257
   wire                 decode_op_mul_signed_o; // From mor1kx_decode of mor1kx_decode.v
258
   wire                 decode_op_mul_unsigned_o;// From mor1kx_decode of mor1kx_decode.v
259
   wire                 decode_op_rfe_o;        // From mor1kx_decode of mor1kx_decode.v
260
   wire                 decode_op_setflag_o;    // From mor1kx_decode of mor1kx_decode.v
261
   wire                 decode_op_shift_o;      // From mor1kx_decode of mor1kx_decode.v
262
   wire [`OR1K_ALU_OPC_WIDTH-1:0] decode_opc_alu_o;// From mor1kx_decode of mor1kx_decode.v
263
   wire [`OR1K_ALU_OPC_WIDTH-1:0] decode_opc_alu_secondary_o;// From mor1kx_decode of mor1kx_decode.v
264
   wire [`OR1K_OPCODE_WIDTH-1:0] decode_opc_insn_o;// From mor1kx_decode of mor1kx_decode.v
265
   wire                 decode_rf_wb_o;         // From mor1kx_decode of mor1kx_decode.v
266
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfa_adr_o;// From mor1kx_decode of mor1kx_decode.v
267
   wire [OPTION_OPERAND_WIDTH-1:0] decode_rfa_o;// From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
268
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfb_adr_o;// From mor1kx_decode of mor1kx_decode.v
269
   wire [OPTION_OPERAND_WIDTH-1:0] decode_rfb_o;// From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
270
   wire [OPTION_RF_ADDR_WIDTH-1:0] decode_rfd_adr_o;// From mor1kx_decode of mor1kx_decode.v
271
   wire                 decode_valid_o;         // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
272
   wire                 doing_rfe_o;            // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
273
   wire                 du_restart_o;           // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
274
   wire [OPTION_OPERAND_WIDTH-1:0] du_restart_pc_o;// From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
275
   wire                 execute_adder_do_carry_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
276
   wire                 execute_adder_do_sub_o; // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
277
   wire                 execute_bubble_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
278
   wire                 execute_except_ibus_align_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
279
   wire                 execute_except_ibus_err_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
280
   wire                 execute_except_illegal_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
281
   wire                 execute_except_ipagefault_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
282
   wire                 execute_except_itlb_miss_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
283
   wire                 execute_except_syscall_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
284
   wire                 execute_except_trap_o;  // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
285
   wire [`OR1K_IMM_WIDTH-1:0] execute_imm16_o;   // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
286
   wire [OPTION_OPERAND_WIDTH-1:0] execute_immediate_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
287
   wire                 execute_immediate_sel_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
288
   wire [9:0]            execute_immjbr_upper_o; // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
289
   wire [OPTION_OPERAND_WIDTH-1:0] execute_jal_result_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
290
   wire [1:0]            execute_lsu_length_o;   // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
291
   wire                 execute_lsu_zext_o;     // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
292
   wire [OPTION_OPERAND_WIDTH-1:0] execute_mispredict_target_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
293
   wire                 execute_op_add_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
294
   wire                 execute_op_alu_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
295
   wire                 execute_op_branch_o;    // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
296
   wire                 execute_op_brcond_o;    // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
297
   wire                 execute_op_div_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
298
   wire                 execute_op_div_signed_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
299
   wire                 execute_op_div_unsigned_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
300
   wire                 execute_op_ffl1_o;      // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
301
   wire                 execute_op_jal_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
302
   wire                 execute_op_jbr_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
303
   wire                 execute_op_jr_o;        // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
304
   wire                 execute_op_lsu_atomic_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
305
   wire                 execute_op_lsu_load_o;  // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
306
   wire                 execute_op_lsu_store_o; // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
307
   wire                 execute_op_mfspr_o;     // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
308
   wire                 execute_op_movhi_o;     // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
309
   wire                 execute_op_mtspr_o;     // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
310
   wire                 execute_op_mul_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
311
   wire                 execute_op_mul_signed_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
312
   wire                 execute_op_mul_unsigned_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
313
   wire                 execute_op_rfe_o;       // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
314
   wire                 execute_op_setflag_o;   // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
315
   wire                 execute_op_shift_o;     // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
316
   wire [`OR1K_ALU_OPC_WIDTH-1:0] execute_opc_alu_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
317
   wire [`OR1K_ALU_OPC_WIDTH-1:0] execute_opc_alu_secondary_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
318
   wire [`OR1K_OPCODE_WIDTH-1:0] execute_opc_insn_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
319
   wire                 execute_predicted_flag_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
320
   wire                 execute_rf_wb_o;        // From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
321
   wire [OPTION_OPERAND_WIDTH-1:0] execute_rfa_o;// From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
322
   wire [OPTION_OPERAND_WIDTH-1:0] execute_rfb_o;// From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
323
   wire [OPTION_RF_ADDR_WIDTH-1:0] execute_rfd_adr_o;// From mor1kx_decode_execute_cappuccino of mor1kx_decode_execute_cappuccino.v
324
   wire                 execute_valid_o;        // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
325
   wire                 fetch_exception_taken_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
326
   wire                 fetch_rf_adr_valid_o;   // From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
327
   wire [OPTION_RF_ADDR_WIDTH-1:0] fetch_rfa_adr_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
328
   wire [OPTION_RF_ADDR_WIDTH-1:0] fetch_rfb_adr_o;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
329
   wire                 fetch_valid_o;          // From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
330
   wire                 flag_clear_o;           // From mor1kx_execute_alu of mor1kx_execute_alu.v
331
   wire                 flag_set_o;             // From mor1kx_execute_alu of mor1kx_execute_alu.v
332
   wire                 lsu_except_align_o;     // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
333
   wire                 lsu_except_dbus_o;      // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
334
   wire                 lsu_except_dpagefault_o;// From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
335
   wire                 lsu_except_dtlb_miss_o; // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
336
   wire [OPTION_OPERAND_WIDTH-1:0] lsu_result_o;// From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
337
   wire                 lsu_valid_o;            // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
338
   wire [OPTION_OPERAND_WIDTH-1:0] mfspr_dat_o;  // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
339
   wire [OPTION_OPERAND_WIDTH-1:0] mul_result_o;// From mor1kx_execute_alu of mor1kx_execute_alu.v
340
   wire                 overflow_clear_o;       // From mor1kx_execute_alu of mor1kx_execute_alu.v
341
   wire                 overflow_set_o;         // From mor1kx_execute_alu of mor1kx_execute_alu.v
342
   wire                 padv_ctrl_o;            // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
343
   wire                 padv_decode_o;          // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
344
   wire                 padv_execute_o;         // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
345
   wire                 padv_fetch_o;           // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
346
   wire                 pipeline_flush_o;       // From mor1kx_ctrl_cappuccino of mor1kx_ctrl_cappuccino.v
347
   wire                 predicted_flag_o;       // From mor1kx_branch_prediction of mor1kx_branch_prediction.v
348
   wire [OPTION_OPERAND_WIDTH-1:0] rf_result_o;  // From mor1kx_wb_mux_cappuccino of mor1kx_wb_mux_cappuccino.v
349
   wire                 spr_bus_ack_dc_i;       // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
350
   wire                 spr_bus_ack_dmmu_i;     // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
351
   wire                 spr_bus_ack_ic_i;       // From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
352
   wire                 spr_bus_ack_immu_i;     // From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
353
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_dc_i;// From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
354
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_dmmu_i;// From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
355
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_ic_i;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
356
   wire [OPTION_OPERAND_WIDTH-1:0] spr_bus_dat_immu_i;// From mor1kx_fetch_cappuccino of mor1kx_fetch_cappuccino.v
357
   wire                 spr_gpr_ack_o;          // From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
358
   wire [OPTION_OPERAND_WIDTH-1:0] spr_gpr_dat_o;// From mor1kx_rf_cappuccino of mor1kx_rf_cappuccino.v
359
   wire [OPTION_OPERAND_WIDTH-1:0] store_buffer_epcr_o;// From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
360
   wire                 store_buffer_err_o;     // From mor1kx_lsu_cappuccino of mor1kx_lsu_cappuccino.v
361
   wire                 wb_rf_wb_o;             // From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
362
   wire [OPTION_RF_ADDR_WIDTH-1:0] wb_rfd_adr_o;// From mor1kx_execute_ctrl_cappuccino of mor1kx_execute_ctrl_cappuccino.v
363
   // End of automatics
364
 
365
   /* mor1kx_fetch_cappuccino AUTO_TEMPLATE (
366
    .padv_i                             (padv_fetch_o),
367
    .padv_ctrl_i                        (padv_ctrl_o),
368
    .decode_branch_i                    (decode_branch_o),
369
    .decode_branch_target_i             (decode_branch_target_o),
370
    .ctrl_branch_exception_i            (ctrl_branch_exception_o),
371
    .ctrl_branch_except_pc_i            (ctrl_branch_except_pc_o),
372
    .doing_rfe_i                        (doing_rfe_o),
373
    .pipeline_flush_i                   (pipeline_flush_o),
374
    .pc_decode_o                        (pc_fetch_to_decode),
375
    .decode_insn_o                      (insn_fetch_to_decode),
376
    .du_restart_pc_i                    (du_restart_pc_o),
377
    .du_restart_i                       (du_restart_o),
378
    .decode_op_brcond_i                 (decode_op_brcond_o),
379
    .branch_mispredict_i                (branch_mispredict_o),
380
    .execute_mispredict_target_i        (execute_mispredict_target_o),
381
    .spr_bus_dat_ic_o                   (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]),
382
    .spr_bus_ack_ic_o                   (spr_bus_ack_ic_i),
383
    .spr_bus_dat_immu_o                 (spr_bus_dat_immu_i[OPTION_OPERAND_WIDTH-1:0]),
384
    .spr_bus_ack_immu_o                 (spr_bus_ack_immu_i),
385
    .spr_bus_addr_i                     (spr_bus_addr_o[15:0]),
386
    .spr_bus_we_i                       (spr_bus_we_o),
387
    .spr_bus_stb_i                      (spr_bus_stb_o),
388
    .spr_bus_dat_i                      (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
389
    .ic_enable                          (spr_sr_o[`OR1K_SPR_SR_ICE]),
390
    .immu_enable_i                      (spr_sr_o[`OR1K_SPR_SR_IME]),
391
    .supervisor_mode_i                  (spr_sr_o[`OR1K_SPR_SR_SM]),
392
    ); */
393
   mor1kx_fetch_cappuccino
394
     #(
395
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
396
       .OPTION_RESET_PC(OPTION_RESET_PC),
397
       .FEATURE_INSTRUCTIONCACHE(FEATURE_INSTRUCTIONCACHE),
398
       .OPTION_ICACHE_BLOCK_WIDTH(OPTION_ICACHE_BLOCK_WIDTH),
399
       .OPTION_ICACHE_SET_WIDTH(OPTION_ICACHE_SET_WIDTH),
400
       .OPTION_ICACHE_WAYS(OPTION_ICACHE_WAYS),
401
       .OPTION_ICACHE_LIMIT_WIDTH(OPTION_ICACHE_LIMIT_WIDTH),
402
       .FEATURE_IMMU(FEATURE_IMMU),
403
       .FEATURE_IMMU_HW_TLB_RELOAD(FEATURE_IMMU_HW_TLB_RELOAD),
404
       .OPTION_IMMU_SET_WIDTH(OPTION_IMMU_SET_WIDTH),
405
       .OPTION_IMMU_WAYS(OPTION_IMMU_WAYS)
406
       )
407
     mor1kx_fetch_cappuccino
408
     (/*AUTOINST*/
409
      // Outputs
410
      .spr_bus_dat_ic_o                 (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
411
      .spr_bus_ack_ic_o                 (spr_bus_ack_ic_i),      // Templated
412
      .spr_bus_dat_immu_o               (spr_bus_dat_immu_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
413
      .spr_bus_ack_immu_o               (spr_bus_ack_immu_i),    // Templated
414
      .ibus_req_o                       (ibus_req_o),
415
      .ibus_adr_o                       (ibus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
416
      .ibus_burst_o                     (ibus_burst_o),
417
      .pc_decode_o                      (pc_fetch_to_decode),    // Templated
418
      .decode_insn_o                    (insn_fetch_to_decode),  // Templated
419
      .fetch_valid_o                    (fetch_valid_o),
420
      .fetch_rfa_adr_o                  (fetch_rfa_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
421
      .fetch_rfb_adr_o                  (fetch_rfb_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
422
      .fetch_rf_adr_valid_o             (fetch_rf_adr_valid_o),
423
      .decode_except_ibus_err_o         (decode_except_ibus_err_o),
424
      .decode_except_itlb_miss_o        (decode_except_itlb_miss_o),
425
      .decode_except_ipagefault_o       (decode_except_ipagefault_o),
426
      .fetch_exception_taken_o          (fetch_exception_taken_o),
427
      // Inputs
428
      .clk                              (clk),
429
      .rst                              (rst),
430
      .spr_bus_addr_i                   (spr_bus_addr_o[15:0]),   // Templated
431
      .spr_bus_we_i                     (spr_bus_we_o),          // Templated
432
      .spr_bus_stb_i                    (spr_bus_stb_o),         // Templated
433
      .spr_bus_dat_i                    (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]), // Templated
434
      .ic_enable                        (spr_sr_o[`OR1K_SPR_SR_ICE]), // Templated
435
      .immu_enable_i                    (spr_sr_o[`OR1K_SPR_SR_IME]), // Templated
436
      .supervisor_mode_i                (spr_sr_o[`OR1K_SPR_SR_SM]), // Templated
437
      .ibus_err_i                       (ibus_err_i),
438
      .ibus_ack_i                       (ibus_ack_i),
439
      .ibus_dat_i                       (ibus_dat_i[`OR1K_INSN_WIDTH-1:0]),
440
      .padv_i                           (padv_fetch_o),          // Templated
441
      .padv_ctrl_i                      (padv_ctrl_o),           // Templated
442
      .decode_branch_i                  (decode_branch_o),       // Templated
443
      .decode_branch_target_i           (decode_branch_target_o), // Templated
444
      .ctrl_branch_exception_i          (ctrl_branch_exception_o), // Templated
445
      .ctrl_branch_except_pc_i          (ctrl_branch_except_pc_o), // Templated
446
      .du_restart_i                     (du_restart_o),          // Templated
447
      .du_restart_pc_i                  (du_restart_pc_o),       // Templated
448
      .decode_op_brcond_i               (decode_op_brcond_o),    // Templated
449
      .branch_mispredict_i              (branch_mispredict_o),   // Templated
450
      .execute_mispredict_target_i      (execute_mispredict_target_o), // Templated
451
      .pipeline_flush_i                 (pipeline_flush_o),      // Templated
452
      .doing_rfe_i                      (doing_rfe_o));          // Templated
453
 
454
   /* mor1kx_decode AUTO_TEMPLATE (
455
    .decode_insn_i                      (insn_fetch_to_decode),
456
    ); */
457
   mor1kx_decode
458
     #(
459
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
460
       .OPTION_RESET_PC(OPTION_RESET_PC),
461
       .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
462
       .FEATURE_SYSCALL(FEATURE_SYSCALL),
463
       .FEATURE_TRAP(FEATURE_TRAP),
464
       .FEATURE_RANGE(FEATURE_RANGE),
465
       .FEATURE_MAC(FEATURE_MAC),
466
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER),
467
       .FEATURE_DIVIDER(FEATURE_DIVIDER),
468
       .FEATURE_ADDC(FEATURE_ADDC),
469
       .FEATURE_SRA(FEATURE_SRA),
470
       .FEATURE_ROR(FEATURE_ROR),
471
       .FEATURE_EXT(FEATURE_EXT),
472
       .FEATURE_CMOV(FEATURE_CMOV),
473
       .FEATURE_FFL1(FEATURE_FFL1),
474
       .FEATURE_MSYNC(FEATURE_MSYNC),
475
       .FEATURE_PSYNC(FEATURE_PSYNC),
476
       .FEATURE_CSYNC(FEATURE_CSYNC),
477
       .FEATURE_ATOMIC(FEATURE_ATOMIC),
478
       .FEATURE_CUST1(FEATURE_CUST1),
479
       .FEATURE_CUST2(FEATURE_CUST2),
480
       .FEATURE_CUST3(FEATURE_CUST3),
481
       .FEATURE_CUST4(FEATURE_CUST4),
482
       .FEATURE_CUST5(FEATURE_CUST5),
483
       .FEATURE_CUST6(FEATURE_CUST6),
484
       .FEATURE_CUST7(FEATURE_CUST7),
485
       .FEATURE_CUST8(FEATURE_CUST8)
486
       )
487
     mor1kx_decode
488
     (/*AUTOINST*/
489
      // Outputs
490
      .decode_opc_alu_o                 (decode_opc_alu_o[`OR1K_ALU_OPC_WIDTH-1:0]),
491
      .decode_opc_alu_secondary_o       (decode_opc_alu_secondary_o[`OR1K_ALU_OPC_WIDTH-1:0]),
492
      .decode_imm16_o                   (decode_imm16_o[`OR1K_IMM_WIDTH-1:0]),
493
      .decode_immediate_o               (decode_immediate_o[OPTION_OPERAND_WIDTH-1:0]),
494
      .decode_immediate_sel_o           (decode_immediate_sel_o),
495
      .decode_immjbr_upper_o            (decode_immjbr_upper_o[9:0]),
496
      .decode_rfd_adr_o                 (decode_rfd_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
497
      .decode_rfa_adr_o                 (decode_rfa_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
498
      .decode_rfb_adr_o                 (decode_rfb_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
499
      .decode_rf_wb_o                   (decode_rf_wb_o),
500
      .decode_op_jbr_o                  (decode_op_jbr_o),
501
      .decode_op_jr_o                   (decode_op_jr_o),
502
      .decode_op_jal_o                  (decode_op_jal_o),
503
      .decode_op_bf_o                   (decode_op_bf_o),
504
      .decode_op_bnf_o                  (decode_op_bnf_o),
505
      .decode_op_brcond_o               (decode_op_brcond_o),
506
      .decode_op_branch_o               (decode_op_branch_o),
507
      .decode_op_alu_o                  (decode_op_alu_o),
508
      .decode_op_lsu_load_o             (decode_op_lsu_load_o),
509
      .decode_op_lsu_store_o            (decode_op_lsu_store_o),
510
      .decode_op_lsu_atomic_o           (decode_op_lsu_atomic_o),
511
      .decode_lsu_length_o              (decode_lsu_length_o[1:0]),
512
      .decode_lsu_zext_o                (decode_lsu_zext_o),
513
      .decode_op_mfspr_o                (decode_op_mfspr_o),
514
      .decode_op_mtspr_o                (decode_op_mtspr_o),
515
      .decode_op_rfe_o                  (decode_op_rfe_o),
516
      .decode_op_setflag_o              (decode_op_setflag_o),
517
      .decode_op_add_o                  (decode_op_add_o),
518
      .decode_op_mul_o                  (decode_op_mul_o),
519
      .decode_op_mul_signed_o           (decode_op_mul_signed_o),
520
      .decode_op_mul_unsigned_o         (decode_op_mul_unsigned_o),
521
      .decode_op_div_o                  (decode_op_div_o),
522
      .decode_op_div_signed_o           (decode_op_div_signed_o),
523
      .decode_op_div_unsigned_o         (decode_op_div_unsigned_o),
524
      .decode_op_shift_o                (decode_op_shift_o),
525
      .decode_op_ffl1_o                 (decode_op_ffl1_o),
526
      .decode_op_movhi_o                (decode_op_movhi_o),
527
      .decode_adder_do_sub_o            (decode_adder_do_sub_o),
528
      .decode_adder_do_carry_o          (decode_adder_do_carry_o),
529
      .decode_except_illegal_o          (decode_except_illegal_o),
530
      .decode_except_syscall_o          (decode_except_syscall_o),
531
      .decode_except_trap_o             (decode_except_trap_o),
532
      .decode_opc_insn_o                (decode_opc_insn_o[`OR1K_OPCODE_WIDTH-1:0]),
533
      // Inputs
534
      .clk                              (clk),
535
      .rst                              (rst),
536
      .decode_insn_i                    (insn_fetch_to_decode));         // Templated
537
 
538
   /* mor1kx_decode_execute_cappuccino AUTO_TEMPLATE (
539
      .padv_i                           (padv_decode_o),
540
      .pc_decode_i                      (pc_fetch_to_decode),
541
      .decode_rfb_i                     (decode_rfb_o),
542
      .execute_rfb_i                    (execute_rfb_o),
543
      .predicted_flag_i                 (predicted_flag_o),
544
      .flag_i                           (ctrl_flag_o),
545
      .pc_execute_o                     (pc_decode_to_execute),
546
      .pipeline_flush_i                 (pipeline_flush_o),
547
      .decode_opc_alu_i                 (decode_opc_alu_o),
548
      .decode_opc_alu_secondary_i       (decode_opc_alu_secondary_o),
549
      .decode_imm16_i                   (decode_imm16_o),
550
      .decode_immediate_i               (decode_immediate_o),
551
      .decode_immediate_sel_i           (decode_immediate_sel_o),
552
      .decode_immjbr_upper_i            (decode_immjbr_upper_o),
553
      .decode_adder_do_sub_i            (decode_adder_do_sub_o),
554
      .decode_adder_do_carry_i          (decode_adder_do_carry_o),
555
      .decode_rfd_adr_i                 (decode_rfd_adr_o),
556
      .decode_rfa_adr_i                 (decode_rfa_adr_o),
557
      .decode_rfb_adr_i                 (decode_rfb_adr_o),
558
      .ctrl_rfd_adr_i                   (ctrl_rfd_adr_o),
559
      .ctrl_op_lsu_load_i               (ctrl_op_lsu_load_o),
560
      .ctrl_op_mfspr_i                  (ctrl_op_mfspr_o),
561
      .ctrl_op_mul_i                    (ctrl_op_mul_o),
562
      .decode_rf_wb_i                   (decode_rf_wb_o),
563
      .decode_op_alu_i                  (decode_op_alu_o),
564
      .decode_op_setflag_i              (decode_op_setflag_o),
565
      .decode_op_jbr_i                  (decode_op_jbr_o),
566
      .decode_op_jr_i                   (decode_op_jr_o),
567
      .decode_op_jal_i                  (decode_op_jal_o),
568
      .decode_op_bf_i                   (decode_op_bf_o),
569
      .decode_op_bnf_i                  (decode_op_bnf_o),
570
      .decode_op_brcond_i               (decode_op_brcond_o),
571
      .decode_op_branch_i               (decode_op_branch_o),
572
      .decode_op_lsu_load_i             (decode_op_lsu_load_o),
573
      .decode_op_lsu_store_i            (decode_op_lsu_store_o),
574
      .decode_op_lsu_atomic_i           (decode_op_lsu_atomic_o),
575
      .decode_lsu_length_i              (decode_lsu_length_o[1:0]),
576
      .decode_lsu_zext_i                (decode_lsu_zext_o),
577
      .decode_op_mfspr_i                (decode_op_mfspr_o),
578
      .decode_op_mtspr_i                (decode_op_mtspr_o),
579
      .decode_op_rfe_i                  (decode_op_rfe_o),
580
      .decode_op_add_i                  (decode_op_add_o),
581
      .decode_op_mul_i                  (decode_op_mul_o),
582
      .decode_op_mul_signed_i           (decode_op_mul_signed_o),
583
      .decode_op_mul_unsigned_i         (decode_op_mul_unsigned_o),
584
      .decode_op_div_i                  (decode_op_div_o),
585
      .decode_op_div_signed_i           (decode_op_div_signed_o),
586
      .decode_op_div_unsigned_i         (decode_op_div_unsigned_o),
587
      .decode_op_shift_i                (decode_op_shift_o),
588
      .decode_op_ffl1_i                 (decode_op_ffl1_o),
589
      .decode_op_movhi_i                (decode_op_movhi_o),
590
      .decode_opc_insn_i                (decode_opc_insn_o[`OR1K_OPCODE_WIDTH-1:0]),
591
      .decode_except_ibus_err_i         (decode_except_ibus_err_o),
592
      .decode_except_itlb_miss_i        (decode_except_itlb_miss_o),
593
      .decode_except_ipagefault_i       (decode_except_ipagefault_o),
594
      .decode_except_illegal_i          (decode_except_illegal_o),
595
      .decode_except_syscall_i          (decode_except_syscall_o),
596
      .decode_except_trap_i             (decode_except_trap_o),
597
    ); */
598
   mor1kx_decode_execute_cappuccino
599
     #(
600
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
601
       .OPTION_RESET_PC(OPTION_RESET_PC),
602
       .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
603
       .FEATURE_SYSCALL(FEATURE_SYSCALL),
604
       .FEATURE_TRAP(FEATURE_TRAP),
605
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER)
606
       )
607
     mor1kx_decode_execute_cappuccino
608
     (/*AUTOINST*/
609
      // Outputs
610
      .execute_predicted_flag_o         (execute_predicted_flag_o),
611
      .execute_mispredict_target_o      (execute_mispredict_target_o[OPTION_OPERAND_WIDTH-1:0]),
612
      .execute_opc_alu_o                (execute_opc_alu_o[`OR1K_ALU_OPC_WIDTH-1:0]),
613
      .execute_opc_alu_secondary_o      (execute_opc_alu_secondary_o[`OR1K_ALU_OPC_WIDTH-1:0]),
614
      .execute_imm16_o                  (execute_imm16_o[`OR1K_IMM_WIDTH-1:0]),
615
      .execute_immediate_o              (execute_immediate_o[OPTION_OPERAND_WIDTH-1:0]),
616
      .execute_immediate_sel_o          (execute_immediate_sel_o),
617
      .execute_adder_do_sub_o           (execute_adder_do_sub_o),
618
      .execute_adder_do_carry_o         (execute_adder_do_carry_o),
619
      .execute_immjbr_upper_o           (execute_immjbr_upper_o[9:0]),
620
      .execute_rfd_adr_o                (execute_rfd_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
621
      .execute_rf_wb_o                  (execute_rf_wb_o),
622
      .execute_op_alu_o                 (execute_op_alu_o),
623
      .execute_op_setflag_o             (execute_op_setflag_o),
624
      .execute_op_jbr_o                 (execute_op_jbr_o),
625
      .execute_op_jr_o                  (execute_op_jr_o),
626
      .execute_op_jal_o                 (execute_op_jal_o),
627
      .execute_op_brcond_o              (execute_op_brcond_o),
628
      .execute_op_branch_o              (execute_op_branch_o),
629
      .execute_op_lsu_load_o            (execute_op_lsu_load_o),
630
      .execute_op_lsu_store_o           (execute_op_lsu_store_o),
631
      .execute_op_lsu_atomic_o          (execute_op_lsu_atomic_o),
632
      .execute_lsu_length_o             (execute_lsu_length_o[1:0]),
633
      .execute_lsu_zext_o               (execute_lsu_zext_o),
634
      .execute_op_mfspr_o               (execute_op_mfspr_o),
635
      .execute_op_mtspr_o               (execute_op_mtspr_o),
636
      .execute_op_rfe_o                 (execute_op_rfe_o),
637
      .execute_op_add_o                 (execute_op_add_o),
638
      .execute_op_mul_o                 (execute_op_mul_o),
639
      .execute_op_mul_signed_o          (execute_op_mul_signed_o),
640
      .execute_op_mul_unsigned_o        (execute_op_mul_unsigned_o),
641
      .execute_op_div_o                 (execute_op_div_o),
642
      .execute_op_div_signed_o          (execute_op_div_signed_o),
643
      .execute_op_div_unsigned_o        (execute_op_div_unsigned_o),
644
      .execute_op_shift_o               (execute_op_shift_o),
645
      .execute_op_ffl1_o                (execute_op_ffl1_o),
646
      .execute_op_movhi_o               (execute_op_movhi_o),
647
      .execute_jal_result_o             (execute_jal_result_o[OPTION_OPERAND_WIDTH-1:0]),
648
      .execute_opc_insn_o               (execute_opc_insn_o[`OR1K_OPCODE_WIDTH-1:0]),
649
      .decode_branch_o                  (decode_branch_o),
650
      .decode_branch_target_o           (decode_branch_target_o[OPTION_OPERAND_WIDTH-1:0]),
651
      .execute_except_ibus_err_o        (execute_except_ibus_err_o),
652
      .execute_except_itlb_miss_o       (execute_except_itlb_miss_o),
653
      .execute_except_ipagefault_o      (execute_except_ipagefault_o),
654
      .execute_except_illegal_o         (execute_except_illegal_o),
655
      .execute_except_ibus_align_o      (execute_except_ibus_align_o),
656
      .execute_except_syscall_o         (execute_except_syscall_o),
657
      .execute_except_trap_o            (execute_except_trap_o),
658
      .pc_execute_o                     (pc_decode_to_execute),  // Templated
659
      .decode_valid_o                   (decode_valid_o),
660
      .decode_bubble_o                  (decode_bubble_o),
661
      .execute_bubble_o                 (execute_bubble_o),
662
      // Inputs
663
      .clk                              (clk),
664
      .rst                              (rst),
665
      .padv_i                           (padv_decode_o),         // Templated
666
      .pc_decode_i                      (pc_fetch_to_decode),    // Templated
667
      .decode_rfb_i                     (decode_rfb_o),          // Templated
668
      .execute_rfb_i                    (execute_rfb_o),         // Templated
669
      .predicted_flag_i                 (predicted_flag_o),      // Templated
670
      .pipeline_flush_i                 (pipeline_flush_o),      // Templated
671
      .decode_opc_alu_i                 (decode_opc_alu_o),      // Templated
672
      .decode_opc_alu_secondary_i       (decode_opc_alu_secondary_o), // Templated
673
      .decode_imm16_i                   (decode_imm16_o),        // Templated
674
      .decode_immediate_i               (decode_immediate_o),    // Templated
675
      .decode_immediate_sel_i           (decode_immediate_sel_o), // Templated
676
      .decode_adder_do_sub_i            (decode_adder_do_sub_o), // Templated
677
      .decode_adder_do_carry_i          (decode_adder_do_carry_o), // Templated
678
      .decode_immjbr_upper_i            (decode_immjbr_upper_o), // Templated
679
      .decode_rfd_adr_i                 (decode_rfd_adr_o),      // Templated
680
      .decode_rfa_adr_i                 (decode_rfa_adr_o),      // Templated
681
      .decode_rfb_adr_i                 (decode_rfb_adr_o),      // Templated
682
      .ctrl_rfd_adr_i                   (ctrl_rfd_adr_o),        // Templated
683
      .ctrl_op_lsu_load_i               (ctrl_op_lsu_load_o),    // Templated
684
      .ctrl_op_mfspr_i                  (ctrl_op_mfspr_o),       // Templated
685
      .ctrl_op_mul_i                    (ctrl_op_mul_o),         // Templated
686
      .decode_rf_wb_i                   (decode_rf_wb_o),        // Templated
687
      .decode_op_alu_i                  (decode_op_alu_o),       // Templated
688
      .decode_op_setflag_i              (decode_op_setflag_o),   // Templated
689
      .decode_op_jbr_i                  (decode_op_jbr_o),       // Templated
690
      .decode_op_jr_i                   (decode_op_jr_o),        // Templated
691
      .decode_op_jal_i                  (decode_op_jal_o),       // Templated
692
      .decode_op_bf_i                   (decode_op_bf_o),        // Templated
693
      .decode_op_bnf_i                  (decode_op_bnf_o),       // Templated
694
      .decode_op_brcond_i               (decode_op_brcond_o),    // Templated
695
      .decode_op_branch_i               (decode_op_branch_o),    // Templated
696
      .decode_op_lsu_load_i             (decode_op_lsu_load_o),  // Templated
697
      .decode_op_lsu_store_i            (decode_op_lsu_store_o), // Templated
698
      .decode_op_lsu_atomic_i           (decode_op_lsu_atomic_o), // Templated
699
      .decode_lsu_length_i              (decode_lsu_length_o[1:0]), // Templated
700
      .decode_lsu_zext_i                (decode_lsu_zext_o),     // Templated
701
      .decode_op_mfspr_i                (decode_op_mfspr_o),     // Templated
702
      .decode_op_mtspr_i                (decode_op_mtspr_o),     // Templated
703
      .decode_op_rfe_i                  (decode_op_rfe_o),       // Templated
704
      .decode_op_add_i                  (decode_op_add_o),       // Templated
705
      .decode_op_mul_i                  (decode_op_mul_o),       // Templated
706
      .decode_op_mul_signed_i           (decode_op_mul_signed_o), // Templated
707
      .decode_op_mul_unsigned_i         (decode_op_mul_unsigned_o), // Templated
708
      .decode_op_div_i                  (decode_op_div_o),       // Templated
709
      .decode_op_div_signed_i           (decode_op_div_signed_o), // Templated
710
      .decode_op_div_unsigned_i         (decode_op_div_unsigned_o), // Templated
711
      .decode_op_shift_i                (decode_op_shift_o),     // Templated
712
      .decode_op_ffl1_i                 (decode_op_ffl1_o),      // Templated
713
      .decode_op_movhi_i                (decode_op_movhi_o),     // Templated
714
      .decode_opc_insn_i                (decode_opc_insn_o[`OR1K_OPCODE_WIDTH-1:0]), // Templated
715
      .decode_except_ibus_err_i         (decode_except_ibus_err_o), // Templated
716
      .decode_except_itlb_miss_i        (decode_except_itlb_miss_o), // Templated
717
      .decode_except_ipagefault_i       (decode_except_ipagefault_o), // Templated
718
      .decode_except_illegal_i          (decode_except_illegal_o), // Templated
719
      .decode_except_syscall_i          (decode_except_syscall_o), // Templated
720
      .decode_except_trap_i             (decode_except_trap_o));         // Templated
721
 
722
   /* mor1kx_branch_prediction AUTO_TEMPLATE (
723
      .op_bf_i                          (decode_op_bf_o),
724
      .op_bnf_i                         (decode_op_bnf_o),
725
      .immjbr_upper_i                   (decode_immjbr_upper_o),
726
      .prev_op_brcond_i                 (execute_op_brcond_o),
727
      .prev_predicted_flag_i            (execute_predicted_flag_o),
728
      .flag_i                           (ctrl_flag_o),
729
    );*/
730
   mor1kx_branch_prediction
731
     #(
732
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH)
733
       )
734
   mor1kx_branch_prediction
735
     (/*AUTOINST*/
736
      // Outputs
737
      .predicted_flag_o                 (predicted_flag_o),
738
      .branch_mispredict_o              (branch_mispredict_o),
739
      // Inputs
740
      .clk                              (clk),
741
      .rst                              (rst),
742
      .op_bf_i                          (decode_op_bf_o),        // Templated
743
      .op_bnf_i                         (decode_op_bnf_o),       // Templated
744
      .immjbr_upper_i                   (decode_immjbr_upper_o), // Templated
745
      .prev_op_brcond_i                 (execute_op_brcond_o),   // Templated
746
      .prev_predicted_flag_i            (execute_predicted_flag_o), // Templated
747
      .flag_i                           (ctrl_flag_o));          // Templated
748
 
749
   /* mor1kx_execute_alu AUTO_TEMPLATE (
750
    .padv_decode_i                      (padv_decode_o),
751
    .padv_execute_i                     (padv_execute_o),
752
    .padv_ctrl_i                        (padv_ctrl_o),
753
    .opc_alu_i                          (execute_opc_alu_o),
754
    .opc_alu_secondary_i                (execute_opc_alu_secondary_o),
755
    .imm16_i                            (execute_imm16_o),
756
    .decode_immediate_i                 (decode_immediate_o),
757
    .decode_immediate_sel_i             (decode_immediate_sel_o),
758
    .immediate_i                        (execute_immediate_o),
759
    .immediate_sel_i                    (execute_immediate_sel_o),
760
    .decode_valid_i                     (decode_valid_o),
761
    .decode_op_mul_i                    (decode_op_mul_o),
762
    .op_alu_i                           (execute_op_alu_o),
763
    .op_add_i                           (execute_op_add_o),
764
    .op_mul_i                           (execute_op_mul_o),
765
    .op_mul_signed_i                    (execute_op_mul_signed_o),
766
    .op_mul_unsigned_i                  (execute_op_mul_unsigned_o),
767
    .op_div_i                           (execute_op_div_o),
768
    .op_div_signed_i                    (execute_op_div_signed_o),
769
    .op_div_unsigned_i                  (execute_op_div_unsigned_o),
770
    .op_shift_i                         (execute_op_shift_o),
771
    .op_ffl1_i                          (execute_op_ffl1_o),
772
    .op_setflag_i                       (execute_op_setflag_o),
773
    .op_mtspr_i                         (execute_op_mtspr_o),
774
    .op_mfspr_i                         (execute_op_mfspr_o),
775
    .op_movhi_i                         (execute_op_movhi_o),
776
    .op_jbr_i                           (execute_op_jbr_o),
777
    .op_jr_i                            (execute_op_jr_o),
778
    .immjbr_upper_i                     (execute_immjbr_upper_o),
779
    .pc_execute_i                       (pc_decode_to_execute),
780
    .adder_do_sub_i                     (execute_adder_do_sub_o),
781
    .adder_do_carry_i                   (execute_adder_do_carry_o),
782
    .decode_rfa_i                       (decode_rfa_o),
783
    .decode_rfb_i                       (decode_rfb_o),
784
    .rfa_i                              (execute_rfa_o),
785
    .rfb_i                              (execute_rfb_o),
786
    .flag_i                             (ctrl_flag_o),
787
    .carry_i                            (ctrl_carry_o),
788
    ); */
789
   mor1kx_execute_alu
790
     #(
791
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
792
       .FEATURE_OVERFLOW(FEATURE_OVERFLOW),
793
       .FEATURE_CARRY_FLAG(FEATURE_CARRY_FLAG),
794
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER),
795
       .FEATURE_DIVIDER(FEATURE_DIVIDER),
796
       .FEATURE_ADDC(FEATURE_ADDC),
797
       .FEATURE_SRA(FEATURE_SRA),
798
       .FEATURE_ROR(FEATURE_ROR),
799
       .FEATURE_EXT(FEATURE_EXT),
800
       .FEATURE_CMOV(FEATURE_CMOV),
801
       .FEATURE_FFL1(FEATURE_FFL1),
802
       .FEATURE_CUST1(FEATURE_CUST1),
803
       .FEATURE_CUST2(FEATURE_CUST2),
804
       .FEATURE_CUST3(FEATURE_CUST3),
805
       .FEATURE_CUST4(FEATURE_CUST4),
806
       .FEATURE_CUST5(FEATURE_CUST5),
807
       .FEATURE_CUST6(FEATURE_CUST6),
808
       .FEATURE_CUST7(FEATURE_CUST7),
809
       .FEATURE_CUST8(FEATURE_CUST8),
810
       .OPTION_SHIFTER(OPTION_SHIFTER),
811
       .CALCULATE_BRANCH_DEST("FALSE")
812
       )
813
     mor1kx_execute_alu
814
     (/*AUTOINST*/
815
      // Outputs
816
      .flag_set_o                       (flag_set_o),
817
      .flag_clear_o                     (flag_clear_o),
818
      .carry_set_o                      (carry_set_o),
819
      .carry_clear_o                    (carry_clear_o),
820
      .overflow_set_o                   (overflow_set_o),
821
      .overflow_clear_o                 (overflow_clear_o),
822
      .alu_result_o                     (alu_result_o[OPTION_OPERAND_WIDTH-1:0]),
823
      .alu_valid_o                      (alu_valid_o),
824
      .mul_result_o                     (mul_result_o[OPTION_OPERAND_WIDTH-1:0]),
825
      .adder_result_o                   (adder_result_o[OPTION_OPERAND_WIDTH-1:0]),
826
      // Inputs
827
      .clk                              (clk),
828
      .rst                              (rst),
829
      .padv_decode_i                    (padv_decode_o),         // Templated
830
      .padv_execute_i                   (padv_execute_o),        // Templated
831
      .padv_ctrl_i                      (padv_ctrl_o),           // Templated
832
      .opc_alu_i                        (execute_opc_alu_o),     // Templated
833
      .opc_alu_secondary_i              (execute_opc_alu_secondary_o), // Templated
834
      .imm16_i                          (execute_imm16_o),       // Templated
835
      .immediate_i                      (execute_immediate_o),   // Templated
836
      .immediate_sel_i                  (execute_immediate_sel_o), // Templated
837
      .decode_immediate_i               (decode_immediate_o),    // Templated
838
      .decode_immediate_sel_i           (decode_immediate_sel_o), // Templated
839
      .decode_valid_i                   (decode_valid_o),        // Templated
840
      .decode_op_mul_i                  (decode_op_mul_o),       // Templated
841
      .op_alu_i                         (execute_op_alu_o),      // Templated
842
      .op_add_i                         (execute_op_add_o),      // Templated
843
      .op_mul_i                         (execute_op_mul_o),      // Templated
844
      .op_mul_signed_i                  (execute_op_mul_signed_o), // Templated
845
      .op_mul_unsigned_i                (execute_op_mul_unsigned_o), // Templated
846
      .op_div_i                         (execute_op_div_o),      // Templated
847
      .op_div_signed_i                  (execute_op_div_signed_o), // Templated
848
      .op_div_unsigned_i                (execute_op_div_unsigned_o), // Templated
849
      .op_shift_i                       (execute_op_shift_o),    // Templated
850
      .op_ffl1_i                        (execute_op_ffl1_o),     // Templated
851
      .op_setflag_i                     (execute_op_setflag_o),  // Templated
852
      .op_mtspr_i                       (execute_op_mtspr_o),    // Templated
853
      .op_mfspr_i                       (execute_op_mfspr_o),    // Templated
854
      .op_movhi_i                       (execute_op_movhi_o),    // Templated
855
      .op_jbr_i                         (execute_op_jbr_o),      // Templated
856
      .op_jr_i                          (execute_op_jr_o),       // Templated
857
      .immjbr_upper_i                   (execute_immjbr_upper_o), // Templated
858
      .pc_execute_i                     (pc_decode_to_execute),  // Templated
859
      .adder_do_sub_i                   (execute_adder_do_sub_o), // Templated
860
      .adder_do_carry_i                 (execute_adder_do_carry_o), // Templated
861
      .decode_rfa_i                     (decode_rfa_o),          // Templated
862
      .decode_rfb_i                     (decode_rfb_o),          // Templated
863
      .rfa_i                            (execute_rfa_o),         // Templated
864
      .rfb_i                            (execute_rfb_o),         // Templated
865
      .flag_i                           (ctrl_flag_o),           // Templated
866
      .carry_i                          (ctrl_carry_o));                 // Templated
867
 
868
 
869
   /* mor1kx_lsu_cappuccino AUTO_TEMPLATE (
870
    .padv_execute_i                     (padv_execute_o),
871
    .padv_ctrl_i                        (padv_ctrl_o),
872
    .decode_valid_i                     (decode_valid_o),
873
    .exec_lsu_adr_i                     (adder_result_o),
874
    .ctrl_lsu_adr_i                     (ctrl_lsu_adr_o),
875
    .ctrl_rfb_i                         (ctrl_rfb_o),
876
    .exec_op_lsu_load_i                 (execute_op_lsu_load_o),
877
    .exec_op_lsu_store_i                (execute_op_lsu_store_o),
878
    .exec_op_lsu_atomic_i               (execute_op_lsu_atomic_o),
879
    .ctrl_op_lsu_load_i                 (ctrl_op_lsu_load_o),
880
    .ctrl_op_lsu_store_i                (ctrl_op_lsu_store_o),
881
    .ctrl_op_lsu_atomic_i               (ctrl_op_lsu_atomic_o),
882
    .ctrl_lsu_length_i                  (ctrl_lsu_length_o),
883
    .ctrl_lsu_zext_i                    (ctrl_lsu_zext_o),
884
    .ctrl_epcr_i                        (ctrl_epcr_o),
885
    .pipeline_flush_i                   (pipeline_flush_o),
886
    .dc_enable_i                        (spr_sr_o[`OR1K_SPR_SR_DCE]),
887
    .dmmu_enable_i                      (spr_sr_o[`OR1K_SPR_SR_DME]),
888
    .supervisor_mode_i                  (spr_sr_o[`OR1K_SPR_SR_SM]),
889
    .spr_bus_dat_dc_o                   (spr_bus_dat_dc_i[OPTION_OPERAND_WIDTH-1:0]),
890
    .spr_bus_ack_dc_o                   (spr_bus_ack_dc_i),
891
    .spr_bus_dat_dmmu_o                 (spr_bus_dat_dmmu_i[OPTION_OPERAND_WIDTH-1:0]),
892
    .spr_bus_ack_dmmu_o                 (spr_bus_ack_dmmu_i),
893
    .spr_bus_addr_i                     (spr_bus_addr_o[15:0]),
894
    .spr_bus_we_i                       (spr_bus_we_o),
895
    .spr_bus_stb_i                      (spr_bus_stb_o),
896
    .spr_bus_dat_i                      (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
897
    ); */
898
   mor1kx_lsu_cappuccino
899
     #(
900
       .FEATURE_DATACACHE(FEATURE_DATACACHE),
901
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
902
       .OPTION_DCACHE_BLOCK_WIDTH(OPTION_DCACHE_BLOCK_WIDTH),
903
       .OPTION_DCACHE_SET_WIDTH(OPTION_DCACHE_SET_WIDTH),
904
       .OPTION_DCACHE_WAYS(OPTION_DCACHE_WAYS),
905
       .OPTION_DCACHE_LIMIT_WIDTH(OPTION_DCACHE_LIMIT_WIDTH),
906
       .OPTION_DCACHE_SNOOP(OPTION_DCACHE_SNOOP),
907
       .FEATURE_DMMU(FEATURE_DMMU),
908
       .FEATURE_DMMU_HW_TLB_RELOAD(FEATURE_DMMU_HW_TLB_RELOAD),
909
       .OPTION_DMMU_SET_WIDTH(OPTION_DMMU_SET_WIDTH),
910
       .OPTION_DMMU_WAYS(OPTION_DMMU_WAYS),
911
       .FEATURE_STORE_BUFFER(FEATURE_STORE_BUFFER),
912
       .OPTION_STORE_BUFFER_DEPTH_WIDTH(OPTION_STORE_BUFFER_DEPTH_WIDTH),
913
       .FEATURE_ATOMIC(FEATURE_ATOMIC)
914
       )
915
     mor1kx_lsu_cappuccino
916
     (/*AUTOINST*/
917
      // Outputs
918
      .store_buffer_epcr_o              (store_buffer_epcr_o[OPTION_OPERAND_WIDTH-1:0]),
919
      .lsu_result_o                     (lsu_result_o[OPTION_OPERAND_WIDTH-1:0]),
920
      .lsu_valid_o                      (lsu_valid_o),
921
      .lsu_except_dbus_o                (lsu_except_dbus_o),
922
      .lsu_except_align_o               (lsu_except_align_o),
923
      .lsu_except_dtlb_miss_o           (lsu_except_dtlb_miss_o),
924
      .lsu_except_dpagefault_o          (lsu_except_dpagefault_o),
925
      .store_buffer_err_o               (store_buffer_err_o),
926
      .atomic_flag_set_o                (atomic_flag_set_o),
927
      .atomic_flag_clear_o              (atomic_flag_clear_o),
928
      .spr_bus_dat_dc_o                 (spr_bus_dat_dc_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
929
      .spr_bus_ack_dc_o                 (spr_bus_ack_dc_i),      // Templated
930
      .spr_bus_dat_dmmu_o               (spr_bus_dat_dmmu_i[OPTION_OPERAND_WIDTH-1:0]), // Templated
931
      .spr_bus_ack_dmmu_o               (spr_bus_ack_dmmu_i),    // Templated
932
      .dbus_adr_o                       (dbus_adr_o[OPTION_OPERAND_WIDTH-1:0]),
933
      .dbus_req_o                       (dbus_req_o),
934
      .dbus_dat_o                       (dbus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
935
      .dbus_bsel_o                      (dbus_bsel_o[3:0]),
936
      .dbus_we_o                        (dbus_we_o),
937
      .dbus_burst_o                     (dbus_burst_o),
938
      // Inputs
939
      .clk                              (clk),
940
      .rst                              (rst),
941
      .padv_execute_i                   (padv_execute_o),        // Templated
942
      .padv_ctrl_i                      (padv_ctrl_o),           // Templated
943
      .decode_valid_i                   (decode_valid_o),        // Templated
944
      .exec_lsu_adr_i                   (adder_result_o),        // Templated
945
      .ctrl_lsu_adr_i                   (ctrl_lsu_adr_o),        // Templated
946
      .ctrl_rfb_i                       (ctrl_rfb_o),            // Templated
947
      .exec_op_lsu_load_i               (execute_op_lsu_load_o), // Templated
948
      .exec_op_lsu_store_i              (execute_op_lsu_store_o), // Templated
949
      .exec_op_lsu_atomic_i             (execute_op_lsu_atomic_o), // Templated
950
      .ctrl_op_lsu_load_i               (ctrl_op_lsu_load_o),    // Templated
951
      .ctrl_op_lsu_store_i              (ctrl_op_lsu_store_o),   // Templated
952
      .ctrl_op_lsu_atomic_i             (ctrl_op_lsu_atomic_o),  // Templated
953
      .ctrl_lsu_length_i                (ctrl_lsu_length_o),     // Templated
954
      .ctrl_lsu_zext_i                  (ctrl_lsu_zext_o),       // Templated
955
      .ctrl_epcr_i                      (ctrl_epcr_o),           // Templated
956
      .spr_bus_addr_i                   (spr_bus_addr_o[15:0]),   // Templated
957
      .spr_bus_we_i                     (spr_bus_we_o),          // Templated
958
      .spr_bus_stb_i                    (spr_bus_stb_o),         // Templated
959
      .spr_bus_dat_i                    (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]), // Templated
960
      .dc_enable_i                      (spr_sr_o[`OR1K_SPR_SR_DCE]), // Templated
961
      .dmmu_enable_i                    (spr_sr_o[`OR1K_SPR_SR_DME]), // Templated
962
      .supervisor_mode_i                (spr_sr_o[`OR1K_SPR_SR_SM]), // Templated
963
      .dbus_err_i                       (dbus_err_i),
964
      .dbus_ack_i                       (dbus_ack_i),
965
      .dbus_dat_i                       (dbus_dat_i[OPTION_OPERAND_WIDTH-1:0]),
966
      .pipeline_flush_i                 (pipeline_flush_o),      // Templated
967
      .snoop_adr_i                      (snoop_adr_i[31:0]),
968
      .snoop_en_i                       (snoop_en_i));
969
 
970
 
971
   /* mor1kx_wb_mux_cappuccino AUTO_TEMPLATE (
972
    .alu_result_i                       (ctrl_alu_result_o),
973
    .lsu_result_i                       (lsu_result_o),
974
    .mul_result_i                       (mul_result_o),
975
    .spr_i                              (mfspr_dat_o),
976
    .op_mul_i                           (ctrl_op_mul_o),
977
    .op_lsu_load_i                      (ctrl_op_lsu_load_o),
978
    .pc_i                               (pc_execute_to_ctrl),
979
    .op_mfspr_i                         (ctrl_op_mfspr_o),
980
    ); */
981
   mor1kx_wb_mux_cappuccino
982
     #(
983
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH)
984
       )
985
     mor1kx_wb_mux_cappuccino
986
     (/*AUTOINST*/
987
      // Outputs
988
      .rf_result_o                      (rf_result_o[OPTION_OPERAND_WIDTH-1:0]),
989
      // Inputs
990
      .clk                              (clk),
991
      .rst                              (rst),
992
      .alu_result_i                     (ctrl_alu_result_o),     // Templated
993
      .lsu_result_i                     (lsu_result_o),          // Templated
994
      .mul_result_i                     (mul_result_o),          // Templated
995
      .spr_i                            (mfspr_dat_o),           // Templated
996
      .op_mul_i                         (ctrl_op_mul_o),         // Templated
997
      .op_lsu_load_i                    (ctrl_op_lsu_load_o),    // Templated
998
      .op_mfspr_i                       (ctrl_op_mfspr_o));      // Templated
999
 
1000
 
1001
   /* mor1kx_rf_cappuccino AUTO_TEMPLATE (
1002
    .padv_decode_i                      (padv_decode_o),
1003
    .padv_execute_i                     (padv_execute_o),
1004
    .padv_ctrl_i                        (padv_ctrl_o),
1005
    .fetch_rf_adr_valid_i               (fetch_rf_adr_valid_o),
1006
    .fetch_rfa_adr_i                    (fetch_rfa_adr_o),
1007
    .fetch_rfb_adr_i                    (fetch_rfb_adr_o),
1008
    .decode_valid_i                     (decode_valid_o),
1009
    .decode_rfa_adr_i                   (decode_rfa_adr_o),
1010
    .decode_rfb_adr_i                   (decode_rfb_adr_o),
1011
    .execute_rfd_adr_i                  (execute_rfd_adr_o),
1012
    .ctrl_rfd_adr_i                     (ctrl_rfd_adr_o),
1013
    .wb_rfd_adr_i                       (wb_rfd_adr_o),
1014
    .spr_bus_addr_i                     (spr_bus_addr_o[15:0]),
1015
    .spr_bus_stb_i                      (spr_bus_stb_o),
1016
    .spr_bus_we_i                       (spr_bus_we_o),
1017
    .spr_bus_dat_i                      (spr_bus_dat_o),
1018
    .execute_rf_wb_i                    (execute_rf_wb_o),
1019
    .ctrl_rf_wb_i                       (ctrl_rf_wb_o),
1020
    .wb_rf_wb_i                         (wb_rf_wb_o),
1021
    .result_i                           (rf_result_o),
1022
    .ctrl_alu_result_i                  (ctrl_alu_result_o),
1023
    .pipeline_flush_i                   (pipeline_flush_o),
1024
    ); */
1025
   mor1kx_rf_cappuccino
1026
     #(
1027
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
1028
       .FEATURE_FASTCONTEXTS(FEATURE_FASTCONTEXTS),
1029
       .OPTION_RF_NUM_SHADOW_GPR(OPTION_RF_NUM_SHADOW_GPR),
1030
       .OPTION_RF_ADDR_WIDTH(OPTION_RF_ADDR_WIDTH),
1031
       .OPTION_RF_WORDS(OPTION_RF_WORDS),
1032
       .FEATURE_DEBUGUNIT(FEATURE_DEBUGUNIT)
1033
       )
1034
     mor1kx_rf_cappuccino
1035
     (/*AUTOINST*/
1036
      // Outputs
1037
      .spr_gpr_ack_o                    (spr_gpr_ack_o),
1038
      .spr_gpr_dat_o                    (spr_gpr_dat_o[OPTION_OPERAND_WIDTH-1:0]),
1039
      .decode_rfa_o                     (decode_rfa_o[OPTION_OPERAND_WIDTH-1:0]),
1040
      .decode_rfb_o                     (decode_rfb_o[OPTION_OPERAND_WIDTH-1:0]),
1041
      .execute_rfa_o                    (execute_rfa_o[OPTION_OPERAND_WIDTH-1:0]),
1042
      .execute_rfb_o                    (execute_rfb_o[OPTION_OPERAND_WIDTH-1:0]),
1043
      // Inputs
1044
      .clk                              (clk),
1045
      .rst                              (rst),
1046
      .padv_decode_i                    (padv_decode_o),         // Templated
1047
      .padv_execute_i                   (padv_execute_o),        // Templated
1048
      .padv_ctrl_i                      (padv_ctrl_o),           // Templated
1049
      .decode_valid_i                   (decode_valid_o),        // Templated
1050
      .fetch_rf_adr_valid_i             (fetch_rf_adr_valid_o),  // Templated
1051
      .fetch_rfa_adr_i                  (fetch_rfa_adr_o),       // Templated
1052
      .fetch_rfb_adr_i                  (fetch_rfb_adr_o),       // Templated
1053
      .decode_rfa_adr_i                 (decode_rfa_adr_o),      // Templated
1054
      .decode_rfb_adr_i                 (decode_rfb_adr_o),      // Templated
1055
      .execute_rfd_adr_i                (execute_rfd_adr_o),     // Templated
1056
      .ctrl_rfd_adr_i                   (ctrl_rfd_adr_o),        // Templated
1057
      .wb_rfd_adr_i                     (wb_rfd_adr_o),          // Templated
1058
      .spr_bus_addr_i                   (spr_bus_addr_o[15:0]),   // Templated
1059
      .spr_bus_stb_i                    (spr_bus_stb_o),         // Templated
1060
      .spr_bus_we_i                     (spr_bus_we_o),          // Templated
1061
      .spr_bus_dat_i                    (spr_bus_dat_o),         // Templated
1062
      .execute_rf_wb_i                  (execute_rf_wb_o),       // Templated
1063
      .ctrl_rf_wb_i                     (ctrl_rf_wb_o),          // Templated
1064
      .wb_rf_wb_i                       (wb_rf_wb_o),            // Templated
1065
      .result_i                         (rf_result_o),           // Templated
1066
      .ctrl_alu_result_i                (ctrl_alu_result_o),     // Templated
1067
      .pipeline_flush_i                 (pipeline_flush_o));     // Templated
1068
 
1069
 
1070
`ifndef SYNTHESIS
1071
// synthesis translate_off
1072
   /* Debug signals required for the debug monitor */
1073
   function [OPTION_OPERAND_WIDTH-1:0] get_gpr;
1074
      // verilator public
1075
      input [4:0]                   gpr_num;
1076
      begin
1077
         // TODO: handle load ops
1078
         if ((mor1kx_rf_cappuccino.execute_rfd_adr_i == gpr_num) &
1079
             mor1kx_rf_cappuccino.execute_rf_wb_i)
1080
           get_gpr = alu_result_o;
1081
         else if ((mor1kx_rf_cappuccino.ctrl_rfd_adr_i == gpr_num) &
1082
                  mor1kx_rf_cappuccino.ctrl_rf_wb_i)
1083
           get_gpr = ctrl_alu_result_o;
1084
         else if ((mor1kx_rf_cappuccino.wb_rfd_adr_i == gpr_num) &
1085
                  mor1kx_rf_cappuccino.wb_rf_wb_i)
1086
           get_gpr = mor1kx_rf_cappuccino.result_i;
1087
         else
1088
           get_gpr = mor1kx_rf_cappuccino.rfa.mem[gpr_num];
1089
      end
1090
   endfunction //
1091
 
1092
 
1093
   task set_gpr;
1094
      // verilator public
1095
      input [4:0] gpr_num;
1096
      input [OPTION_OPERAND_WIDTH-1:0] gpr_value;
1097
      begin
1098
         mor1kx_rf_cappuccino.rfa.mem[gpr_num] = gpr_value;
1099
         mor1kx_rf_cappuccino.rfb.mem[gpr_num] = gpr_value;
1100
      end
1101
   endtask
1102
// synthesis translate_on
1103
`endif
1104
 
1105
 
1106
   /* mor1kx_execute_ctrl_cappuccino AUTO_TEMPLATE (
1107
    .padv_i                             (padv_execute_o),
1108
    .padv_ctrl_i                        (padv_ctrl_o),
1109
    .execute_except_ibus_err_i          (execute_except_ibus_err_o),
1110
    .execute_except_itlb_miss_i         (execute_except_itlb_miss_o),
1111
    .execute_except_ipagefault_i        (execute_except_ipagefault_o),
1112
    .execute_except_illegal_i           (execute_except_illegal_o),
1113
    .execute_except_ibus_align_i        (execute_except_ibus_align_o),
1114
    .execute_except_syscall_i           (execute_except_syscall_o),
1115
    .execute_except_trap_i              (execute_except_trap_o),
1116
    .lsu_except_dbus_i                  (lsu_except_dbus_o),
1117
    .lsu_except_align_i                 (lsu_except_align_o),
1118
    .lsu_except_dtlb_miss_i             (lsu_except_dtlb_miss_o),
1119
    .lsu_except_dpagefault_i            (lsu_except_dpagefault_o),
1120
    .op_mul_i                           (execute_op_mul_o),
1121
    .op_lsu_load_i                      (execute_op_lsu_load_o),
1122
    .op_lsu_store_i                     (execute_op_lsu_store_o),
1123
    .op_lsu_atomic_i                    (execute_op_lsu_atomic_o),
1124
    .lsu_length_i                       (execute_lsu_length_o),
1125
    .lsu_zext_i                         (execute_lsu_zext_o),
1126
    .op_mfspr_i                         (execute_op_mfspr_o),
1127
    .op_mtspr_i                         (execute_op_mtspr_o),
1128
    .alu_valid_i                        (alu_valid_o),
1129
    .lsu_valid_i                        (lsu_valid_o),
1130
    .alu_result_i                       (alu_result_o),
1131
    .adder_result_i                     (adder_result_o),
1132
    .execute_jal_result_i               (execute_jal_result_o),
1133
    .op_jr_i                            (execute_op_jr_o),
1134
    .op_jal_i                           (execute_op_jal_o),
1135
    .op_rfe_i                           (execute_op_rfe_o),
1136
    .rfb_i                              (execute_rfb_o),
1137
    .flag_set_i                         (flag_set_o),
1138
    .flag_clear_i                       (flag_clear_o),
1139
    .pc_execute_i                       (pc_decode_to_execute),
1140
    .execute_rf_wb_i                    (execute_rf_wb_o),
1141
    .execute_rfd_adr_i                  (execute_rfd_adr_o),
1142
    .ctrl_mfspr_ack_i                   (ctrl_mfspr_ack_o),
1143
    .ctrl_mtspr_ack_i                   (ctrl_mtspr_ack_o),
1144
    .pipeline_flush_i                   (pipeline_flush_o),
1145
    .pc_ctrl_o                          (pc_execute_to_ctrl),
1146
    .execute_bubble_i                   (execute_bubble_o),
1147
    .carry_set_i                        (carry_set_o),
1148
    .carry_clear_i                      (carry_clear_o),
1149
    .overflow_set_i                     (overflow_set_o),
1150
    .overflow_clear_i                   (overflow_clear_o),
1151
    ); */
1152
   mor1kx_execute_ctrl_cappuccino
1153
     #(
1154
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
1155
       .OPTION_RESET_PC(OPTION_RESET_PC),
1156
       .FEATURE_MULTIPLIER(FEATURE_MULTIPLIER)
1157
       )
1158
     mor1kx_execute_ctrl_cappuccino
1159
     (/*AUTOINST*/
1160
      // Outputs
1161
      .ctrl_rf_wb_o                     (ctrl_rf_wb_o),
1162
      .wb_rf_wb_o                       (wb_rf_wb_o),
1163
      .ctrl_rfd_adr_o                   (ctrl_rfd_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
1164
      .wb_rfd_adr_o                     (wb_rfd_adr_o[OPTION_RF_ADDR_WIDTH-1:0]),
1165
      .ctrl_alu_result_o                (ctrl_alu_result_o[OPTION_OPERAND_WIDTH-1:0]),
1166
      .ctrl_lsu_adr_o                   (ctrl_lsu_adr_o[OPTION_OPERAND_WIDTH-1:0]),
1167
      .ctrl_rfb_o                       (ctrl_rfb_o[OPTION_OPERAND_WIDTH-1:0]),
1168
      .ctrl_flag_set_o                  (ctrl_flag_set_o),
1169
      .ctrl_flag_clear_o                (ctrl_flag_clear_o),
1170
      .ctrl_carry_set_o                 (ctrl_carry_set_o),
1171
      .ctrl_carry_clear_o               (ctrl_carry_clear_o),
1172
      .ctrl_overflow_set_o              (ctrl_overflow_set_o),
1173
      .ctrl_overflow_clear_o            (ctrl_overflow_clear_o),
1174
      .pc_ctrl_o                        (pc_execute_to_ctrl),    // Templated
1175
      .ctrl_op_mul_o                    (ctrl_op_mul_o),
1176
      .ctrl_op_lsu_load_o               (ctrl_op_lsu_load_o),
1177
      .ctrl_op_lsu_store_o              (ctrl_op_lsu_store_o),
1178
      .ctrl_op_lsu_atomic_o             (ctrl_op_lsu_atomic_o),
1179
      .ctrl_lsu_length_o                (ctrl_lsu_length_o[1:0]),
1180
      .ctrl_lsu_zext_o                  (ctrl_lsu_zext_o),
1181
      .ctrl_op_mfspr_o                  (ctrl_op_mfspr_o),
1182
      .ctrl_op_mtspr_o                  (ctrl_op_mtspr_o),
1183
      .ctrl_op_rfe_o                    (ctrl_op_rfe_o),
1184
      .ctrl_except_ibus_err_o           (ctrl_except_ibus_err_o),
1185
      .ctrl_except_itlb_miss_o          (ctrl_except_itlb_miss_o),
1186
      .ctrl_except_ipagefault_o         (ctrl_except_ipagefault_o),
1187
      .ctrl_except_ibus_align_o         (ctrl_except_ibus_align_o),
1188
      .ctrl_except_illegal_o            (ctrl_except_illegal_o),
1189
      .ctrl_except_syscall_o            (ctrl_except_syscall_o),
1190
      .ctrl_except_dbus_o               (ctrl_except_dbus_o),
1191
      .ctrl_except_dtlb_miss_o          (ctrl_except_dtlb_miss_o),
1192
      .ctrl_except_dpagefault_o         (ctrl_except_dpagefault_o),
1193
      .ctrl_except_align_o              (ctrl_except_align_o),
1194
      .ctrl_except_trap_o               (ctrl_except_trap_o),
1195
      .execute_valid_o                  (execute_valid_o),
1196
      .ctrl_valid_o                     (ctrl_valid_o),
1197
      // Inputs
1198
      .clk                              (clk),
1199
      .rst                              (rst),
1200
      .padv_i                           (padv_execute_o),        // Templated
1201
      .padv_ctrl_i                      (padv_ctrl_o),           // Templated
1202
      .execute_except_ibus_err_i        (execute_except_ibus_err_o), // Templated
1203
      .execute_except_itlb_miss_i       (execute_except_itlb_miss_o), // Templated
1204
      .execute_except_ipagefault_i      (execute_except_ipagefault_o), // Templated
1205
      .execute_except_illegal_i         (execute_except_illegal_o), // Templated
1206
      .execute_except_ibus_align_i      (execute_except_ibus_align_o), // Templated
1207
      .execute_except_syscall_i         (execute_except_syscall_o), // Templated
1208
      .lsu_except_dbus_i                (lsu_except_dbus_o),     // Templated
1209
      .lsu_except_align_i               (lsu_except_align_o),    // Templated
1210
      .lsu_except_dtlb_miss_i           (lsu_except_dtlb_miss_o), // Templated
1211
      .lsu_except_dpagefault_i          (lsu_except_dpagefault_o), // Templated
1212
      .execute_except_trap_i            (execute_except_trap_o), // Templated
1213
      .pipeline_flush_i                 (pipeline_flush_o),      // Templated
1214
      .op_mul_i                         (execute_op_mul_o),      // Templated
1215
      .op_lsu_load_i                    (execute_op_lsu_load_o), // Templated
1216
      .op_lsu_store_i                   (execute_op_lsu_store_o), // Templated
1217
      .op_lsu_atomic_i                  (execute_op_lsu_atomic_o), // Templated
1218
      .lsu_length_i                     (execute_lsu_length_o),  // Templated
1219
      .lsu_zext_i                       (execute_lsu_zext_o),    // Templated
1220
      .op_mfspr_i                       (execute_op_mfspr_o),    // Templated
1221
      .op_mtspr_i                       (execute_op_mtspr_o),    // Templated
1222
      .alu_valid_i                      (alu_valid_o),           // Templated
1223
      .lsu_valid_i                      (lsu_valid_o),           // Templated
1224
      .op_jr_i                          (execute_op_jr_o),       // Templated
1225
      .op_jal_i                         (execute_op_jal_o),      // Templated
1226
      .op_rfe_i                         (execute_op_rfe_o),      // Templated
1227
      .alu_result_i                     (alu_result_o),          // Templated
1228
      .adder_result_i                   (adder_result_o),        // Templated
1229
      .rfb_i                            (execute_rfb_o),         // Templated
1230
      .execute_jal_result_i             (execute_jal_result_o),  // Templated
1231
      .flag_set_i                       (flag_set_o),            // Templated
1232
      .flag_clear_i                     (flag_clear_o),          // Templated
1233
      .carry_set_i                      (carry_set_o),           // Templated
1234
      .carry_clear_i                    (carry_clear_o),         // Templated
1235
      .overflow_set_i                   (overflow_set_o),        // Templated
1236
      .overflow_clear_i                 (overflow_clear_o),      // Templated
1237
      .pc_execute_i                     (pc_decode_to_execute),  // Templated
1238
      .execute_rf_wb_i                  (execute_rf_wb_o),       // Templated
1239
      .execute_rfd_adr_i                (execute_rfd_adr_o),     // Templated
1240
      .execute_bubble_i                 (execute_bubble_o),      // Templated
1241
      .ctrl_mfspr_ack_i                 (ctrl_mfspr_ack_o),      // Templated
1242
      .ctrl_mtspr_ack_i                 (ctrl_mtspr_ack_o));     // Templated
1243
 
1244
   /* mor1kx_ctrl_cappuccino AUTO_TEMPLATE (
1245
    .ctrl_alu_result_i          (ctrl_alu_result_o),
1246
    .ctrl_lsu_adr_i             (ctrl_lsu_adr_o),
1247
    .ctrl_rfb_i                 (ctrl_rfb_o),
1248
    .ctrl_flag_set_i            (ctrl_flag_set_o),
1249
    .ctrl_flag_clear_i          (ctrl_flag_clear_o),
1250
    .atomic_flag_set_i          (atomic_flag_set_o),
1251
    .atomic_flag_clear_i        (atomic_flag_clear_o),
1252
    .pc_ctrl_i                  (pc_execute_to_ctrl),
1253
    .pc_execute_i               (pc_decode_to_execute),
1254
    .execute_op_branch_i        (execute_op_branch_o),
1255
    .ctrl_op_mfspr_i            (ctrl_op_mfspr_o),
1256
    .ctrl_op_mtspr_i            (ctrl_op_mtspr_o),
1257
    .ctrl_op_rfe_i              (ctrl_op_rfe_o),
1258
    .decode_branch_i            (decode_branch_o),
1259
    .decode_branch_target_i     (decode_branch_target_o),
1260
    .branch_mispredict_i        (branch_mispredict_o),
1261
    .execute_mispredict_target_i        (execute_mispredict_target_o),
1262
    .except_ibus_err_i          (ctrl_except_ibus_err_o),
1263
    .except_itlb_miss_i         (ctrl_except_itlb_miss_o),
1264
    .except_ipagefault_i        (ctrl_except_ipagefault_o),
1265
    .except_ibus_align_i        (ctrl_except_ibus_align_o),
1266
    .except_illegal_i           (ctrl_except_illegal_o),
1267
    .except_syscall_i           (ctrl_except_syscall_o),
1268
    .except_dbus_i              (ctrl_except_dbus_o),
1269
    .except_dtlb_miss_i         (ctrl_except_dtlb_miss_o),
1270
    .except_dpagefault_i        (ctrl_except_dpagefault_o),
1271
    .except_trap_i              (ctrl_except_trap_o),
1272
    .except_align_i             (ctrl_except_align_o),
1273
    .fetch_valid_i              (fetch_valid_o),
1274
    .decode_valid_i             (decode_valid_o),
1275
    .execute_valid_i            (execute_valid_o),
1276
    .ctrl_valid_i               (ctrl_valid_o),
1277
    .fetch_exception_taken_i    (fetch_exception_taken_o),
1278
    .decode_bubble_i            (decode_bubble_o),
1279
    .execute_bubble_i           (execute_bubble_o),
1280
    .store_buffer_epcr_i        (store_buffer_epcr_o),
1281
    .store_buffer_err_i         (store_buffer_err_o),
1282
    .ctrl_carry_set_i           (ctrl_carry_set_o),
1283
    .ctrl_carry_clear_i         (ctrl_carry_clear_o),
1284
    .ctrl_overflow_set_i       (ctrl_overflow_set_o),
1285
    .ctrl_overflow_clear_i      (ctrl_overflow_clear_o),
1286
    .spr_gpr_ack_i              (spr_gpr_ack_o),
1287
    .spr_gpr_dat_i              (spr_gpr_dat_o),
1288
    ) */
1289
   mor1kx_ctrl_cappuccino
1290
     #(
1291
       .OPTION_OPERAND_WIDTH(OPTION_OPERAND_WIDTH),
1292
       .OPTION_RESET_PC(OPTION_RESET_PC),
1293
       .FEATURE_PIC(FEATURE_PIC),
1294
       .FEATURE_TIMER(FEATURE_TIMER),
1295
       .OPTION_PIC_TRIGGER(OPTION_PIC_TRIGGER),
1296
       .OPTION_PIC_NMI_WIDTH(OPTION_PIC_NMI_WIDTH),
1297
       .FEATURE_DATACACHE(FEATURE_DATACACHE),
1298
       .OPTION_DCACHE_BLOCK_WIDTH(OPTION_DCACHE_BLOCK_WIDTH),
1299
       .OPTION_DCACHE_SET_WIDTH(OPTION_DCACHE_SET_WIDTH),
1300
       .OPTION_DCACHE_WAYS(OPTION_DCACHE_WAYS),
1301
       .FEATURE_DMMU(FEATURE_DMMU),
1302
       .OPTION_DMMU_SET_WIDTH(OPTION_DMMU_SET_WIDTH),
1303
       .OPTION_DMMU_WAYS(OPTION_DMMU_WAYS),
1304
       .FEATURE_INSTRUCTIONCACHE(FEATURE_INSTRUCTIONCACHE),
1305
       .OPTION_ICACHE_BLOCK_WIDTH(OPTION_ICACHE_BLOCK_WIDTH),
1306
       .OPTION_ICACHE_SET_WIDTH(OPTION_ICACHE_SET_WIDTH),
1307
       .OPTION_ICACHE_WAYS(OPTION_ICACHE_WAYS),
1308
       .FEATURE_IMMU(FEATURE_IMMU),
1309
       .OPTION_IMMU_SET_WIDTH(OPTION_IMMU_SET_WIDTH),
1310
       .OPTION_IMMU_WAYS(OPTION_IMMU_WAYS),
1311
       .FEATURE_DEBUGUNIT(FEATURE_DEBUGUNIT),
1312
       .FEATURE_PERFCOUNTERS(FEATURE_PERFCOUNTERS),
1313
       .FEATURE_MAC(FEATURE_MAC),
1314
       .FEATURE_MULTICORE(FEATURE_MULTICORE),
1315
       .FEATURE_SYSCALL(FEATURE_SYSCALL),
1316
       .FEATURE_TRAP(FEATURE_TRAP),
1317
       .FEATURE_RANGE(FEATURE_RANGE),
1318
       .FEATURE_DSX(FEATURE_DSX),
1319
       .FEATURE_FASTCONTEXTS(FEATURE_FASTCONTEXTS),
1320
       .OPTION_RF_NUM_SHADOW_GPR(OPTION_RF_NUM_SHADOW_GPR),
1321
       .FEATURE_OVERFLOW(FEATURE_OVERFLOW),
1322
       .FEATURE_CARRY_FLAG(FEATURE_CARRY_FLAG)
1323
       )
1324
     mor1kx_ctrl_cappuccino
1325
     (/*AUTOINST*/
1326
      // Outputs
1327
      .ctrl_epcr_o                      (ctrl_epcr_o[OPTION_OPERAND_WIDTH-1:0]),
1328
      .mfspr_dat_o                      (mfspr_dat_o[OPTION_OPERAND_WIDTH-1:0]),
1329
      .ctrl_mfspr_ack_o                 (ctrl_mfspr_ack_o),
1330
      .ctrl_mtspr_ack_o                 (ctrl_mtspr_ack_o),
1331
      .ctrl_flag_o                      (ctrl_flag_o),
1332
      .ctrl_carry_o                     (ctrl_carry_o),
1333
      .ctrl_branch_exception_o          (ctrl_branch_exception_o),
1334
      .ctrl_branch_except_pc_o          (ctrl_branch_except_pc_o[OPTION_OPERAND_WIDTH-1:0]),
1335
      .pipeline_flush_o                 (pipeline_flush_o),
1336
      .doing_rfe_o                      (doing_rfe_o),
1337
      .padv_fetch_o                     (padv_fetch_o),
1338
      .padv_decode_o                    (padv_decode_o),
1339
      .padv_execute_o                   (padv_execute_o),
1340
      .padv_ctrl_o                      (padv_ctrl_o),
1341
      .du_dat_o                         (du_dat_o[OPTION_OPERAND_WIDTH-1:0]),
1342
      .du_ack_o                         (du_ack_o),
1343
      .du_stall_o                       (du_stall_o),
1344
      .du_restart_pc_o                  (du_restart_pc_o[OPTION_OPERAND_WIDTH-1:0]),
1345
      .du_restart_o                     (du_restart_o),
1346
      .spr_bus_addr_o                   (spr_bus_addr_o[15:0]),
1347
      .spr_bus_we_o                     (spr_bus_we_o),
1348
      .spr_bus_stb_o                    (spr_bus_stb_o),
1349
      .spr_bus_dat_o                    (spr_bus_dat_o[OPTION_OPERAND_WIDTH-1:0]),
1350
      .spr_sr_o                         (spr_sr_o[15:0]),
1351
      .ctrl_bubble_o                    (ctrl_bubble_o),
1352
      // Inputs
1353
      .clk                              (clk),
1354
      .rst                              (rst),
1355
      .ctrl_alu_result_i                (ctrl_alu_result_o),     // Templated
1356
      .ctrl_lsu_adr_i                   (ctrl_lsu_adr_o),        // Templated
1357
      .ctrl_rfb_i                       (ctrl_rfb_o),            // Templated
1358
      .ctrl_flag_set_i                  (ctrl_flag_set_o),       // Templated
1359
      .ctrl_flag_clear_i                (ctrl_flag_clear_o),     // Templated
1360
      .atomic_flag_set_i                (atomic_flag_set_o),     // Templated
1361
      .atomic_flag_clear_i              (atomic_flag_clear_o),   // Templated
1362
      .pc_ctrl_i                        (pc_execute_to_ctrl),    // Templated
1363
      .ctrl_op_mfspr_i                  (ctrl_op_mfspr_o),       // Templated
1364
      .ctrl_op_mtspr_i                  (ctrl_op_mtspr_o),       // Templated
1365
      .ctrl_op_rfe_i                    (ctrl_op_rfe_o),         // Templated
1366
      .decode_branch_i                  (decode_branch_o),       // Templated
1367
      .decode_branch_target_i           (decode_branch_target_o), // Templated
1368
      .branch_mispredict_i              (branch_mispredict_o),   // Templated
1369
      .execute_mispredict_target_i      (execute_mispredict_target_o), // Templated
1370
      .pc_execute_i                     (pc_decode_to_execute),  // Templated
1371
      .execute_op_branch_i              (execute_op_branch_o),   // Templated
1372
      .except_ibus_err_i                (ctrl_except_ibus_err_o), // Templated
1373
      .except_itlb_miss_i               (ctrl_except_itlb_miss_o), // Templated
1374
      .except_ipagefault_i              (ctrl_except_ipagefault_o), // Templated
1375
      .except_ibus_align_i              (ctrl_except_ibus_align_o), // Templated
1376
      .except_illegal_i                 (ctrl_except_illegal_o), // Templated
1377
      .except_syscall_i                 (ctrl_except_syscall_o), // Templated
1378
      .except_dbus_i                    (ctrl_except_dbus_o),    // Templated
1379
      .except_dtlb_miss_i               (ctrl_except_dtlb_miss_o), // Templated
1380
      .except_dpagefault_i              (ctrl_except_dpagefault_o), // Templated
1381
      .except_trap_i                    (ctrl_except_trap_o),    // Templated
1382
      .except_align_i                   (ctrl_except_align_o),   // Templated
1383
      .fetch_valid_i                    (fetch_valid_o),         // Templated
1384
      .decode_valid_i                   (decode_valid_o),        // Templated
1385
      .execute_valid_i                  (execute_valid_o),       // Templated
1386
      .ctrl_valid_i                     (ctrl_valid_o),          // Templated
1387
      .fetch_exception_taken_i          (fetch_exception_taken_o), // Templated
1388
      .decode_bubble_i                  (decode_bubble_o),       // Templated
1389
      .execute_bubble_i                 (execute_bubble_o),      // Templated
1390
      .irq_i                            (irq_i[31:0]),
1391
      .store_buffer_epcr_i              (store_buffer_epcr_o),   // Templated
1392
      .store_buffer_err_i               (store_buffer_err_o),    // Templated
1393
      .ctrl_carry_set_i                 (ctrl_carry_set_o),      // Templated
1394
      .ctrl_carry_clear_i               (ctrl_carry_clear_o),    // Templated
1395
      .ctrl_overflow_set_i              (ctrl_overflow_set_o),   // Templated
1396
      .ctrl_overflow_clear_i            (ctrl_overflow_clear_o), // Templated
1397
      .du_addr_i                        (du_addr_i[15:0]),
1398
      .du_stb_i                         (du_stb_i),
1399
      .du_dat_i                         (du_dat_i[OPTION_OPERAND_WIDTH-1:0]),
1400
      .du_we_i                          (du_we_i),
1401
      .du_stall_i                       (du_stall_i),
1402
      .spr_bus_dat_dc_i                 (spr_bus_dat_dc_i[OPTION_OPERAND_WIDTH-1:0]),
1403
      .spr_bus_ack_dc_i                 (spr_bus_ack_dc_i),
1404
      .spr_bus_dat_ic_i                 (spr_bus_dat_ic_i[OPTION_OPERAND_WIDTH-1:0]),
1405
      .spr_bus_ack_ic_i                 (spr_bus_ack_ic_i),
1406
      .spr_bus_dat_dmmu_i               (spr_bus_dat_dmmu_i[OPTION_OPERAND_WIDTH-1:0]),
1407
      .spr_bus_ack_dmmu_i               (spr_bus_ack_dmmu_i),
1408
      .spr_bus_dat_immu_i               (spr_bus_dat_immu_i[OPTION_OPERAND_WIDTH-1:0]),
1409
      .spr_bus_ack_immu_i               (spr_bus_ack_immu_i),
1410
      .spr_bus_dat_mac_i                (spr_bus_dat_mac_i[OPTION_OPERAND_WIDTH-1:0]),
1411
      .spr_bus_ack_mac_i                (spr_bus_ack_mac_i),
1412
      .spr_bus_dat_pmu_i                (spr_bus_dat_pmu_i[OPTION_OPERAND_WIDTH-1:0]),
1413
      .spr_bus_ack_pmu_i                (spr_bus_ack_pmu_i),
1414
      .spr_bus_dat_pcu_i                (spr_bus_dat_pcu_i[OPTION_OPERAND_WIDTH-1:0]),
1415
      .spr_bus_ack_pcu_i                (spr_bus_ack_pcu_i),
1416
      .spr_bus_dat_fpu_i                (spr_bus_dat_fpu_i[OPTION_OPERAND_WIDTH-1:0]),
1417
      .spr_bus_ack_fpu_i                (spr_bus_ack_fpu_i),
1418
      .spr_gpr_dat_i                    (spr_gpr_dat_o),         // Templated
1419
      .spr_gpr_ack_i                    (spr_gpr_ack_o),         // Templated
1420
      .multicore_coreid_i               (multicore_coreid_i[OPTION_OPERAND_WIDTH-1:0]),
1421
      .multicore_numcores_i             (multicore_numcores_i[OPTION_OPERAND_WIDTH-1:0]));
1422
 
1423
   reg [`OR1K_INSN_WIDTH-1:0] traceport_stage_decode_insn;
1424
   reg [`OR1K_INSN_WIDTH-1:0] traceport_stage_exec_insn;
1425
 
1426
   reg                        traceport_waitexec;
1427
 
1428
   always @(posedge clk) begin
1429
      if (FEATURE_TRACEPORT_EXEC != "NONE") begin
1430
         if (rst) begin
1431
            traceport_waitexec <= 0;
1432
         end else begin
1433
            if (padv_decode_o) begin
1434
               traceport_stage_decode_insn <= insn_fetch_to_decode;
1435
            end
1436
 
1437
            if (padv_execute_o) begin
1438
               traceport_stage_exec_insn <= traceport_stage_decode_insn;
1439
            end
1440
 
1441
            if (padv_ctrl_o) begin
1442
               traceport_exec_insn_o <= traceport_stage_exec_insn;
1443
            end
1444
 
1445
            traceport_exec_pc_o <= pc_execute_to_ctrl;
1446
            if (!traceport_waitexec) begin
1447
               if (padv_ctrl_o & !ctrl_bubble_o) begin
1448
                  if (execute_valid_o) begin
1449
                     traceport_exec_valid_o <= 1'b1;
1450
                  end else begin
1451
                     traceport_exec_valid_o <= 1'b0;
1452
                     traceport_waitexec <= 1'b1;
1453
                  end
1454
               end else begin
1455
                  traceport_exec_valid_o <= 1'b0;
1456
               end
1457
            end else begin
1458
               if (execute_valid_o) begin
1459
                  traceport_exec_valid_o <= 1'b1;
1460
                  traceport_waitexec <= 1'b0;
1461
               end else begin
1462
                  traceport_exec_valid_o <= 1'b0;
1463
               end
1464
            end // else: !if(!traceport_waitexec)
1465
         end // else: !if(rst)
1466
      end else begin // if (FEATURE_TRACEPORT_EXEC != "NONE")
1467
         traceport_stage_decode_insn <= {`OR1K_INSN_WIDTH{1'b0}};
1468
         traceport_stage_exec_insn <= {`OR1K_INSN_WIDTH{1'b0}};
1469
         traceport_exec_insn_o <= {`OR1K_INSN_WIDTH{1'b0}};
1470
         traceport_exec_pc_o <= 32'h0;
1471
         traceport_exec_valid_o <= 1'b0;
1472
      end
1473
   end
1474
 
1475
   generate
1476
      if (FEATURE_TRACEPORT_EXEC != "NONE") begin
1477
         assign traceport_exec_wbreg_o = wb_rfd_adr_o;
1478
         assign traceport_exec_wben_o = wb_rf_wb_o;
1479
         assign traceport_exec_wbdata_o = rf_result_o;
1480
      end else begin
1481
         assign traceport_exec_wbreg_o = {OPTION_RF_ADDR_WIDTH{1'b0}};
1482
         assign traceport_exec_wben_o = 1'b0;
1483
         assign traceport_exec_wbdata_o = {OPTION_OPERAND_WIDTH{1'b0}};
1484
      end
1485
   endgenerate
1486
 
1487
endmodule // mor1kx_cpu_cappuccino

powered by: WebSVN 2.1.0

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