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

Subversion Repositories or1200_hp

[/] [or1200_hp/] [trunk/] [rtl/] [rtl_cm2/] [verilog/] [or1200_ctrl.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tobil
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  OR1200's Instruction decode                                 ////
4
////                                                              ////
5
////  This file is part of the OpenRISC 1200 project              ////
6
////  http://www.opencores.org/cores/or1k/                        ////
7
////                                                              ////
8
////  Description                                                 ////
9
////  Majority of instruction decoding is performed here.         ////
10
////                                                              ////
11
////  To Do:                                                      ////
12
////   - make it smaller and faster                               ////
13
////                                                              ////
14
////  Author(s):                                                  ////
15
////      - Damjan Lampret, lampret@opencores.org                 ////
16
////                                                              ////
17
//////////////////////////////////////////////////////////////////////
18
////                                                              ////
19
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
20
////                                                              ////
21
//// This source file may be used and distributed without         ////
22
//// restriction provided that this copyright statement is not    ////
23
//// removed from the file and that any derivative work contains  ////
24
//// the original copyright notice and the associated disclaimer. ////
25
////                                                              ////
26
//// This source file is free software; you can redistribute it   ////
27
//// and/or modify it under the terms of the GNU Lesser General   ////
28
//// Public License as published by the Free Software Foundation; ////
29
//// either version 2.1 of the License, or (at your option) any   ////
30
//// later version.                                               ////
31
////                                                              ////
32
//// This source is distributed in the hope that it will be       ////
33
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
34
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
35
//// PURPOSE.  See the GNU Lesser General Public License for more ////
36
//// details.                                                     ////
37
////                                                              ////
38
//// You should have received a copy of the GNU Lesser General    ////
39
//// Public License along with this source; if not, download it   ////
40
//// from http://www.opencores.org/lgpl.shtml                     ////
41
////                                                              ////
42
//////////////////////////////////////////////////////////////////////
43
//
44
// CVS Revision History
45
//
46
// $Log: not supported by cvs2svn $
47
// Revision 1.12  2005/01/07 09:31:07  andreje
48
// sign/zero extension for l.sfxxi instructions corrected
49
//
50
// Revision 1.11  2004/06/08 18:17:36  lampret
51
// Non-functional changes. Coding style fixes.
52
//
53
// Revision 1.10  2004/05/09 19:49:04  lampret
54
// Added some l.cust5 custom instructions as example
55
//
56
// Revision 1.9  2004/04/05 08:29:57  lampret
57
// Merged branch_qmem into main tree.
58
//
59
// Revision 1.8.4.1  2004/02/11 01:40:11  lampret
60
// preliminary HW breakpoints support in debug unit (by default disabled). To enable define OR1200_DU_HWBKPTS.
61
//
62
// Revision 1.8  2003/04/24 00:16:07  lampret
63
// No functional changes. Added defines to disable implementation of multiplier/MAC
64
//
65
// Revision 1.7  2002/09/07 05:42:02  lampret
66
// Added optional SR[CY]. Added define to enable additional (compare) flag modifiers. Defines are OR1200_IMPL_ADDC and OR1200_ADDITIONAL_FLAG_MODIFIERS.
67
//
68
// Revision 1.6  2002/03/29 15:16:54  lampret
69
// Some of the warnings fixed.
70
//
71
// Revision 1.5  2002/02/01 19:56:54  lampret
72
// Fixed combinational loops.
73
//
74
// Revision 1.4  2002/01/28 01:15:59  lampret
75
// Changed 'void' nop-ops instead of insn[0] to use insn[16]. Debug unit stalls the tick timer. Prepared new flag generation for add and and insns. Blocked DC/IC while they are turned off. Fixed I/D MMU SPRs layout except WAYs. TODO: smart IC invalidate, l.j 2 and TLB ways.
76
//
77
// Revision 1.3  2002/01/18 14:21:43  lampret
78
// Fixed 'the NPC single-step fix'.
79
//
80
// Revision 1.2  2002/01/14 06:18:22  lampret
81
// Fixed mem2reg bug in FAST implementation. Updated debug unit to work with new genpc/if.
82
//
83
// Revision 1.1  2002/01/03 08:16:15  lampret
84
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
85
//
86
// Revision 1.14  2001/11/30 18:59:17  simons
87
// force_dslot_fetch does not work -  allways zero.
88
//
89
// Revision 1.13  2001/11/20 18:46:15  simons
90
// Break point bug fixed
91
//
92
// Revision 1.12  2001/11/18 08:36:28  lampret
93
// For GDB changed single stepping and disabled trap exception.
94
//
95
// Revision 1.11  2001/11/13 10:02:21  lampret
96
// Added 'setpc'. Renamed some signals (except_flushpipe into flushpipe etc)
97
//
98
// Revision 1.10  2001/11/12 01:45:40  lampret
99
// Moved flag bit into SR. Changed RF enable from constant enable to dynamic enable for read ports.
100
//
101
// Revision 1.9  2001/11/10 03:43:57  lampret
102
// Fixed exceptions.
103
//
104
// Revision 1.8  2001/10/21 17:57:16  lampret
105
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
106
//
107
// Revision 1.7  2001/10/14 13:12:09  lampret
108
// MP3 version.
109
//
110
// Revision 1.1.1.1  2001/10/06 10:18:36  igorm
111
// no message
112
//
113
// Revision 1.2  2001/08/13 03:36:20  lampret
114
// Added cfg regs. Moved all defines into one defines.v file. More cleanup.
115
//
116
// Revision 1.1  2001/08/09 13:39:33  lampret
117
// Major clean-up.
118
//
119
//
120
 
121
// synopsys translate_off
122
`include "timescale.v"
123
// synopsys translate_on
124
`include "or1200_defines.v"
125
 
126
module or1200_ctrl_cm2(
127
                clk_i_cml_1,
128
 
129
        // Clock and reset
130
        clk, rst,
131
 
132
        // Internal i/f
133
        id_freeze, ex_freeze, wb_freeze, flushpipe, if_insn, ex_insn, branch_op, branch_taken,
134
        rf_addra, rf_addrb, rf_rda, rf_rdb, alu_op, mac_op, shrot_op, comp_op, rf_addrw, rfwb_op,
135
        wb_insn, simm, branch_addrofs, lsu_addrofs, sel_a, sel_b, lsu_op,
136
        cust5_op, cust5_limm,
137
        multicycle, spr_addrimm, wbforw_valid, du_hwbkpt, sig_syscall, sig_trap,
138
        force_dslot_fetch, no_more_dslot, ex_void, id_macrc_op, ex_macrc_op, rfe, except_illegal
139
);
140
 
141
 
142
input clk_i_cml_1;
143
reg [ 31 : 0 ] ex_insn_cml_1;
144
reg [ 3 - 1 : 0 ] branch_op_cml_1;
145
reg [ 5 - 1 : 0 ] rf_addrw_cml_1;
146
reg [ 4 - 1 : 0 ] alu_op_cml_1;
147
reg [ 2 - 1 : 0 ] mac_op_cml_1;
148
reg [ 2 - 1 : 0 ] shrot_op_cml_1;
149
reg [ 3 - 1 : 0 ] rfwb_op_cml_1;
150
reg [ 31 : 0 ] wb_insn_cml_1;
151
reg [ 4 - 1 : 0 ] lsu_op_cml_1;
152
reg [ 4 - 1 : 0 ] comp_op_cml_1;
153
reg [ 15 : 0 ] spr_addrimm_cml_1;
154
reg  wbforw_valid_cml_1;
155
reg  sig_syscall_cml_1;
156
reg  sig_trap_cml_1;
157
reg  ex_macrc_op_cml_1;
158
reg  except_illegal_cml_1;
159
reg [ 3 - 1 : 0 ] pre_branch_op_cml_1;
160
reg [ 31 : 0 ] id_insn_cml_1;
161
reg [ 5 - 1 : 0 ] wb_rfaddrw_cml_1;
162
reg  sel_imm_cml_1;
163
 
164
 
165
 
166
//
167
// I/O
168
//
169
input                                   clk;
170
input                                   rst;
171
input                                   id_freeze;
172
input                                   ex_freeze;
173
input                                   wb_freeze;
174
input                                   flushpipe;
175
input   [31:0]                           if_insn;
176
output  [31:0]                           ex_insn;
177
output  [`OR1200_BRANCHOP_WIDTH-1:0]             branch_op;
178
input                                           branch_taken;
179
output  [`OR1200_REGFILE_ADDR_WIDTH-1:0] rf_addrw;
180
output  [`OR1200_REGFILE_ADDR_WIDTH-1:0] rf_addra;
181
output  [`OR1200_REGFILE_ADDR_WIDTH-1:0] rf_addrb;
182
output                                  rf_rda;
183
output                                  rf_rdb;
184
output  [`OR1200_ALUOP_WIDTH-1:0]                alu_op;
185
output  [`OR1200_MACOP_WIDTH-1:0]                mac_op;
186
output  [`OR1200_SHROTOP_WIDTH-1:0]              shrot_op;
187
output  [`OR1200_RFWBOP_WIDTH-1:0]               rfwb_op;
188
output  [31:0]                           wb_insn;
189
output  [31:0]                           simm;
190
output  [31:2]                          branch_addrofs;
191
output  [31:0]                           lsu_addrofs;
192
output  [`OR1200_SEL_WIDTH-1:0]          sel_a;
193
output  [`OR1200_SEL_WIDTH-1:0]          sel_b;
194
output  [`OR1200_LSUOP_WIDTH-1:0]                lsu_op;
195
output  [`OR1200_COMPOP_WIDTH-1:0]               comp_op;
196
output  [`OR1200_MULTICYCLE_WIDTH-1:0]           multicycle;
197
output  [4:0]                            cust5_op;
198
output  [5:0]                            cust5_limm;
199
output  [15:0]                           spr_addrimm;
200
input                                   wbforw_valid;
201
input                                   du_hwbkpt;
202
output                                  sig_syscall;
203
output                                  sig_trap;
204
output                                  force_dslot_fetch;
205
output                                  no_more_dslot;
206
output                                  ex_void;
207
output                                  id_macrc_op;
208
output                                  ex_macrc_op;
209
output                                  rfe;
210
output                                  except_illegal;
211
 
212
//
213
// Internal wires and regs
214
//
215
reg     [`OR1200_BRANCHOP_WIDTH-1:0]             pre_branch_op;
216
reg     [`OR1200_BRANCHOP_WIDTH-1:0]             branch_op;
217
reg     [`OR1200_ALUOP_WIDTH-1:0]                alu_op;
218
`ifdef OR1200_MAC_IMPLEMENTED
219
reg     [`OR1200_MACOP_WIDTH-1:0]                mac_op;
220
reg                                     ex_macrc_op;
221
`else
222
wire    [`OR1200_MACOP_WIDTH-1:0]                mac_op;
223
wire                                    ex_macrc_op;
224
`endif
225
reg     [`OR1200_SHROTOP_WIDTH-1:0]              shrot_op;
226
reg     [31:0]                           id_insn;
227
reg     [31:0]                           ex_insn;
228
reg     [31:0]                           wb_insn;
229
reg     [`OR1200_REGFILE_ADDR_WIDTH-1:0] rf_addrw;
230
reg     [`OR1200_REGFILE_ADDR_WIDTH-1:0] wb_rfaddrw;
231
reg     [`OR1200_RFWBOP_WIDTH-1:0]               rfwb_op;
232
reg     [31:0]                           lsu_addrofs;
233
reg     [`OR1200_SEL_WIDTH-1:0]          sel_a;
234
reg     [`OR1200_SEL_WIDTH-1:0]          sel_b;
235
reg                                     sel_imm;
236
reg     [`OR1200_LSUOP_WIDTH-1:0]                lsu_op;
237
reg     [`OR1200_COMPOP_WIDTH-1:0]               comp_op;
238
reg     [`OR1200_MULTICYCLE_WIDTH-1:0]           multicycle;
239
reg                                     imm_signextend;
240
reg     [15:0]                           spr_addrimm;
241
reg                                     sig_syscall;
242
reg                                     sig_trap;
243
reg                                     except_illegal;
244
wire                                    id_void;
245
 
246
//
247
// Register file read addresses
248
//
249
assign rf_addra = if_insn[20:16];
250
assign rf_addrb = if_insn[15:11];
251
assign rf_rda = if_insn[31];
252
assign rf_rdb = if_insn[30];
253
 
254
//
255
// Force fetch of delay slot instruction when jump/branch is preceeded by load/store
256
// instructions
257
//
258
// SIMON
259
// assign force_dslot_fetch = ((|pre_branch_op) & (|lsu_op));
260
assign force_dslot_fetch = 1'b0;
261
assign no_more_dslot = |branch_op & !id_void & branch_taken | (branch_op == `OR1200_BRANCHOP_RFE);
262
assign id_void = (id_insn[31:26] == `OR1200_OR32_NOP) & id_insn[16];
263
 
264
// SynEDA CoreMultiplier
265
// assignment(s): ex_void
266
// replace(s): ex_insn
267
assign ex_void = (ex_insn_cml_1[31:26] == `OR1200_OR32_NOP) & ex_insn_cml_1[16];
268
 
269
//
270
// Sign/Zero extension of immediates
271
//
272
 
273
// SynEDA CoreMultiplier
274
// assignment(s): simm
275
// replace(s): id_insn
276
assign simm = (imm_signextend == 1'b1) ? {{16{id_insn_cml_1[15]}}, id_insn_cml_1[15:0]} : {{16'b0}, id_insn_cml_1[15:0]};
277
 
278
//
279
// Sign extension of branch offset
280
//
281
assign branch_addrofs = {{4{ex_insn[25]}}, ex_insn[25:0]};
282
 
283
//
284
// l.macrc in ID stage
285
//
286
`ifdef OR1200_MAC_IMPLEMENTED
287
 
288
// SynEDA CoreMultiplier
289
// assignment(s): id_macrc_op
290
// replace(s): id_insn
291
assign id_macrc_op = (id_insn_cml_1[31:26] == `OR1200_OR32_MOVHI) & id_insn_cml_1[16];
292
`else
293
assign id_macrc_op = 1'b0;
294
`endif
295
 
296
//
297
// cust5_op, cust5_limm (L immediate)
298
//
299
assign cust5_op = ex_insn[4:0];
300
assign cust5_limm = ex_insn[10:5];
301
 
302
//
303
//
304
//
305
 
306
// SynEDA CoreMultiplier
307
// assignment(s): rfe
308
// replace(s): branch_op, pre_branch_op
309
assign rfe = (pre_branch_op_cml_1 == `OR1200_BRANCHOP_RFE) | (branch_op_cml_1 == `OR1200_BRANCHOP_RFE);
310
 
311
//
312
// Generation of sel_a
313
//
314
 
315
// SynEDA CoreMultiplier
316
// assignment(s): sel_a
317
// replace(s): rf_addrw, rfwb_op, wbforw_valid, id_insn, wb_rfaddrw
318
always @(rf_addrw_cml_1 or id_insn_cml_1 or rfwb_op_cml_1 or wbforw_valid_cml_1 or wb_rfaddrw_cml_1)
319
        if ((id_insn_cml_1[20:16] == rf_addrw_cml_1) && rfwb_op_cml_1[0])
320
                sel_a = `OR1200_SEL_EX_FORW;
321
        else if ((id_insn_cml_1[20:16] == wb_rfaddrw_cml_1) && wbforw_valid_cml_1)
322
                sel_a = `OR1200_SEL_WB_FORW;
323
        else
324
                sel_a = `OR1200_SEL_RF;
325
 
326
//
327
// Generation of sel_b
328
//
329
 
330
// SynEDA CoreMultiplier
331
// assignment(s): sel_b
332
// replace(s): rf_addrw, rfwb_op, wbforw_valid, id_insn, wb_rfaddrw, sel_imm
333
always @(rf_addrw_cml_1 or sel_imm_cml_1 or id_insn_cml_1 or rfwb_op_cml_1 or wbforw_valid_cml_1 or wb_rfaddrw_cml_1)
334
        if (sel_imm_cml_1)
335
                sel_b = `OR1200_SEL_IMM;
336
        else if ((id_insn_cml_1[15:11] == rf_addrw_cml_1) && rfwb_op_cml_1[0])
337
                sel_b = `OR1200_SEL_EX_FORW;
338
        else if ((id_insn_cml_1[15:11] == wb_rfaddrw_cml_1) && wbforw_valid_cml_1)
339
                sel_b = `OR1200_SEL_WB_FORW;
340
        else
341
                sel_b = `OR1200_SEL_RF;
342
 
343
//
344
// l.macrc in EX stage
345
//
346
`ifdef OR1200_MAC_IMPLEMENTED
347
 
348
// SynEDA CoreMultiplier
349
// assignment(s): ex_macrc_op
350
// replace(s): ex_macrc_op
351
always @(posedge clk or posedge rst) begin
352
        if (rst)
353
                ex_macrc_op <= #1 1'b0;
354
        else begin  ex_macrc_op <= ex_macrc_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
355
                ex_macrc_op <= #1 1'b0;
356
        else if (!ex_freeze)
357
                ex_macrc_op <= #1 id_macrc_op; end
358
end
359
`else
360
assign ex_macrc_op = 1'b0;
361
`endif
362
 
363
//
364
// Decode of spr_addrimm
365
//
366
 
367
// SynEDA CoreMultiplier
368
// assignment(s): spr_addrimm
369
// replace(s): spr_addrimm, id_insn
370
always @(posedge clk or posedge rst) begin
371
        if (rst)
372
                spr_addrimm <= #1 16'h0000;
373
        else begin  spr_addrimm <= spr_addrimm_cml_1; if (!ex_freeze & id_freeze | flushpipe)
374
                spr_addrimm <= #1 16'h0000;
375
        else if (!ex_freeze) begin
376
                case (id_insn_cml_1[31:26])     // synopsys parallel_case
377
                        // l.mfspr
378
                        `OR1200_OR32_MFSPR:
379
                                spr_addrimm <= #1 id_insn_cml_1[15:0];
380
                        // l.mtspr
381
                        default:
382
                                spr_addrimm <= #1 {id_insn_cml_1[25:21], id_insn_cml_1[10:0]};
383
                endcase
384
        end end
385
end
386
 
387
//
388
// Decode of multicycle
389
//
390
 
391
// SynEDA CoreMultiplier
392
// assignment(s): multicycle
393
// replace(s): id_insn
394
always @(id_insn_cml_1) begin
395
  case (id_insn_cml_1[31:26])           // synopsys parallel_case
396
`ifdef UNUSED
397
    // l.lwz
398
    `OR1200_OR32_LWZ:
399
      multicycle = `OR1200_TWO_CYCLES;
400
 
401
    // l.lbz
402
    `OR1200_OR32_LBZ:
403
      multicycle = `OR1200_TWO_CYCLES;
404
 
405
    // l.lbs
406
    `OR1200_OR32_LBS:
407
      multicycle = `OR1200_TWO_CYCLES;
408
 
409
    // l.lhz
410
    `OR1200_OR32_LHZ:
411
      multicycle = `OR1200_TWO_CYCLES;
412
 
413
    // l.lhs
414
    `OR1200_OR32_LHS:
415
      multicycle = `OR1200_TWO_CYCLES;
416
 
417
    // l.sw
418
    `OR1200_OR32_SW:
419
      multicycle = `OR1200_TWO_CYCLES;
420
 
421
    // l.sb
422
    `OR1200_OR32_SB:
423
      multicycle = `OR1200_TWO_CYCLES;
424
 
425
    // l.sh
426
    `OR1200_OR32_SH:
427
      multicycle = `OR1200_TWO_CYCLES;
428
`endif
429
    // ALU instructions except the one with immediate
430
    `OR1200_OR32_ALU:
431
      multicycle = id_insn_cml_1[`OR1200_ALUMCYC_POS];
432
 
433
    // Single cycle instructions
434
    default: begin
435
      multicycle = `OR1200_ONE_CYCLE;
436
    end
437
 
438
  endcase
439
 
440
end
441
 
442
//
443
// Decode of imm_signextend
444
//
445
 
446
// SynEDA CoreMultiplier
447
// assignment(s): imm_signextend
448
// replace(s): id_insn
449
always @(id_insn_cml_1) begin
450
  case (id_insn_cml_1[31:26])           // synopsys parallel_case
451
 
452
        // l.addi
453
        `OR1200_OR32_ADDI:
454
                imm_signextend = 1'b1;
455
 
456
        // l.addic
457
        `OR1200_OR32_ADDIC:
458
                imm_signextend = 1'b1;
459
 
460
        // l.xori
461
        `OR1200_OR32_XORI:
462
                imm_signextend = 1'b1;
463
 
464
        // l.muli
465
`ifdef OR1200_MULT_IMPLEMENTED
466
        `OR1200_OR32_MULI:
467
                imm_signextend = 1'b1;
468
`endif
469
 
470
        // l.maci
471
`ifdef OR1200_MAC_IMPLEMENTED
472
        `OR1200_OR32_MACI:
473
                imm_signextend = 1'b1;
474
`endif
475
 
476
        // SFXX insns with immediate
477
        `OR1200_OR32_SFXXI:
478
                imm_signextend = 1'b1;
479
 
480
        // Instructions with no or zero extended immediate
481
        default: begin
482
                imm_signextend = 1'b0;
483
        end
484
 
485
endcase
486
 
487
end
488
 
489
//
490
// LSU addr offset
491
//
492
always @(lsu_op or ex_insn) begin
493
        lsu_addrofs[10:0] = ex_insn[10:0];
494
        case(lsu_op)    // synopsys parallel_case
495
                `OR1200_LSUOP_SW, `OR1200_LSUOP_SH, `OR1200_LSUOP_SB :
496
                        lsu_addrofs[31:11] = {{16{ex_insn[25]}}, ex_insn[25:21]};
497
                default :
498
                        lsu_addrofs[31:11] = {{16{ex_insn[15]}}, ex_insn[15:11]};
499
        endcase
500
end
501
 
502
//
503
// Register file write address
504
//
505
 
506
// SynEDA CoreMultiplier
507
// assignment(s): rf_addrw
508
// replace(s): rf_addrw, pre_branch_op, id_insn
509
always @(posedge clk or posedge rst) begin
510
        if (rst)
511
                rf_addrw <= #1 5'd0;
512
        else begin  rf_addrw <= rf_addrw_cml_1; if (!ex_freeze & id_freeze)
513
                rf_addrw <= #1 5'd00;
514
        else if (!ex_freeze)
515
                case (pre_branch_op_cml_1)      // synopsys parallel_case
516
                        `OR1200_BRANCHOP_JR, `OR1200_BRANCHOP_BAL:
517
                                rf_addrw <= #1 5'd09;   // link register r9
518
                        default:
519
                                rf_addrw <= #1 id_insn_cml_1[25:21];
520
                endcase end
521
end
522
 
523
//
524
// rf_addrw in wb stage (used in forwarding logic)
525
//
526
 
527
// SynEDA CoreMultiplier
528
// assignment(s): wb_rfaddrw
529
// replace(s): rf_addrw, wb_rfaddrw
530
always @(posedge clk or posedge rst) begin
531
        if (rst)
532
                wb_rfaddrw <= #1 5'd0;
533
        else begin  wb_rfaddrw <= wb_rfaddrw_cml_1; if (!wb_freeze)
534
                wb_rfaddrw <= #1 rf_addrw_cml_1; end
535
end
536
 
537
//
538
// Instruction latch in id_insn
539
//
540
 
541
// SynEDA CoreMultiplier
542
// assignment(s): id_insn
543
// replace(s): id_insn
544
always @(posedge clk or posedge rst) begin
545
        if (rst)
546
                id_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000};
547
        else begin  id_insn <= id_insn_cml_1; if (flushpipe)
548
                id_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000};        // id_insn[16] must be 1
549
        else if (!id_freeze) begin
550
                id_insn <= #1 if_insn;
551
`ifdef OR1200_VERBOSE
552
// synopsys translate_off
553
                $display("%t: id_insn <= %h", $time, if_insn);
554
// synopsys translate_on
555
`endif
556
        end end
557
end
558
 
559
//
560
// Instruction latch in ex_insn
561
//
562
 
563
// SynEDA CoreMultiplier
564
// assignment(s): ex_insn
565
// replace(s): ex_insn, id_insn
566
always @(posedge clk or posedge rst) begin
567
        if (rst)
568
                ex_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000};
569
        else begin  ex_insn <= ex_insn_cml_1; if (!ex_freeze & id_freeze | flushpipe)
570
                ex_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000}; // ex_insn[16] must be 1
571
        else if (!ex_freeze) begin
572
                ex_insn <= #1 id_insn_cml_1;
573
`ifdef OR1200_VERBOSE
574
// synopsys translate_off
575
                $display("%t: ex_insn <= %h", $time, id_insn);
576
// synopsys translate_on
577
`endif
578
        end end
579
end
580
 
581
//
582
// Instruction latch in wb_insn
583
//
584
 
585
// SynEDA CoreMultiplier
586
// assignment(s): wb_insn
587
// replace(s): ex_insn, wb_insn
588
always @(posedge clk or posedge rst) begin
589
        if (rst)
590
                wb_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000};
591
        else begin  wb_insn <= wb_insn_cml_1; if (flushpipe)
592
                wb_insn <= #1 {`OR1200_OR32_NOP, 26'h041_0000}; // wb_insn[16] must be 1
593
        else if (!wb_freeze) begin
594
                wb_insn <= #1 ex_insn_cml_1;
595
        end end
596
end
597
 
598
//
599
// Decode of sel_imm
600
//
601
 
602
// SynEDA CoreMultiplier
603
// assignment(s): sel_imm
604
// replace(s): sel_imm
605
always @(posedge clk or posedge rst) begin
606
        if (rst)
607
                sel_imm <= #1 1'b0;
608
        else begin  sel_imm <= sel_imm_cml_1; if (!id_freeze) begin
609
          case (if_insn[31:26])         // synopsys parallel_case
610
 
611
            // j.jalr
612
            `OR1200_OR32_JALR:
613
              sel_imm <= #1 1'b0;
614
 
615
            // l.jr
616
            `OR1200_OR32_JR:
617
              sel_imm <= #1 1'b0;
618
 
619
            // l.rfe
620
            `OR1200_OR32_RFE:
621
              sel_imm <= #1 1'b0;
622
 
623
            // l.mfspr
624
            `OR1200_OR32_MFSPR:
625
              sel_imm <= #1 1'b0;
626
 
627
            // l.mtspr
628
            `OR1200_OR32_MTSPR:
629
              sel_imm <= #1 1'b0;
630
 
631
            // l.sys, l.brk and all three sync insns
632
            `OR1200_OR32_XSYNC:
633
              sel_imm <= #1 1'b0;
634
 
635
            // l.mac/l.msb
636
`ifdef OR1200_MAC_IMPLEMENTED
637
            `OR1200_OR32_MACMSB:
638
              sel_imm <= #1 1'b0;
639
`endif
640
 
641
            // l.sw
642
            `OR1200_OR32_SW:
643
              sel_imm <= #1 1'b0;
644
 
645
            // l.sb
646
            `OR1200_OR32_SB:
647
              sel_imm <= #1 1'b0;
648
 
649
            // l.sh
650
            `OR1200_OR32_SH:
651
              sel_imm <= #1 1'b0;
652
 
653
            // ALU instructions except the one with immediate
654
            `OR1200_OR32_ALU:
655
              sel_imm <= #1 1'b0;
656
 
657
            // SFXX instructions
658
            `OR1200_OR32_SFXX:
659
              sel_imm <= #1 1'b0;
660
 
661
`ifdef OR1200_OR32_CUST5
662
            // l.cust5 instructions
663
            `OR1200_OR32_CUST5:
664
              sel_imm <= #1 1'b0;
665
`endif
666
 
667
            // l.nop
668
            `OR1200_OR32_NOP:
669
              sel_imm <= #1 1'b0;
670
 
671
            // All instructions with immediates
672
            default: begin
673
              sel_imm <= #1 1'b1;
674
            end
675
 
676
          endcase
677
 
678
        end end
679
end
680
 
681
//
682
// Decode of except_illegal
683
//
684
 
685
// SynEDA CoreMultiplier
686
// assignment(s): except_illegal
687
// replace(s): except_illegal, id_insn
688
always @(posedge clk or posedge rst) begin
689
        if (rst)
690
                except_illegal <= #1 1'b0;
691
        else begin  except_illegal <= except_illegal_cml_1; if (!ex_freeze & id_freeze | flushpipe)
692
                except_illegal <= #1 1'b0;
693
        else if (!ex_freeze) begin
694
          case (id_insn_cml_1[31:26])           // synopsys parallel_case
695
 
696
            `OR1200_OR32_J,
697
            `OR1200_OR32_JAL,
698
            `OR1200_OR32_JALR,
699
            `OR1200_OR32_JR,
700
            `OR1200_OR32_BNF,
701
            `OR1200_OR32_BF,
702
            `OR1200_OR32_RFE,
703
            `OR1200_OR32_MOVHI,
704
            `OR1200_OR32_MFSPR,
705
            `OR1200_OR32_XSYNC,
706
`ifdef OR1200_MAC_IMPLEMENTED
707
            `OR1200_OR32_MACI,
708
`endif
709
            `OR1200_OR32_LWZ,
710
            `OR1200_OR32_LBZ,
711
            `OR1200_OR32_LBS,
712
            `OR1200_OR32_LHZ,
713
            `OR1200_OR32_LHS,
714
            `OR1200_OR32_ADDI,
715
            `OR1200_OR32_ADDIC,
716
            `OR1200_OR32_ANDI,
717
            `OR1200_OR32_ORI,
718
            `OR1200_OR32_XORI,
719
`ifdef OR1200_MULT_IMPLEMENTED
720
            `OR1200_OR32_MULI,
721
`endif
722
            `OR1200_OR32_SH_ROTI,
723
            `OR1200_OR32_SFXXI,
724
            `OR1200_OR32_MTSPR,
725
`ifdef OR1200_MAC_IMPLEMENTED
726
            `OR1200_OR32_MACMSB,
727
`endif
728
            `OR1200_OR32_SW,
729
            `OR1200_OR32_SB,
730
            `OR1200_OR32_SH,
731
            `OR1200_OR32_ALU,
732
            `OR1200_OR32_SFXX,
733
`ifdef OR1200_OR32_CUST5
734
            `OR1200_OR32_CUST5,
735
`endif
736
            `OR1200_OR32_NOP:
737
                except_illegal <= #1 1'b0;
738
 
739
            // Illegal and OR1200 unsupported instructions
740
            default:
741
              except_illegal <= #1 1'b1;
742
 
743
          endcase
744
 
745
        end end
746
end
747
 
748
//
749
// Decode of alu_op
750
//
751
 
752
// SynEDA CoreMultiplier
753
// assignment(s): alu_op
754
// replace(s): alu_op, id_insn
755
always @(posedge clk or posedge rst) begin
756
        if (rst)
757
                alu_op <= #1 `OR1200_ALUOP_NOP;
758
        else begin  alu_op <= alu_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
759
                alu_op <= #1 `OR1200_ALUOP_NOP;
760
        else if (!ex_freeze) begin
761
          case (id_insn_cml_1[31:26])           // synopsys parallel_case
762
 
763
            // l.j
764
            `OR1200_OR32_J:
765
              alu_op <= #1 `OR1200_ALUOP_IMM;
766
 
767
            // j.jal
768
            `OR1200_OR32_JAL:
769
              alu_op <= #1 `OR1200_ALUOP_IMM;
770
 
771
            // l.bnf
772
            `OR1200_OR32_BNF:
773
              alu_op <= #1 `OR1200_ALUOP_NOP;
774
 
775
            // l.bf
776
            `OR1200_OR32_BF:
777
              alu_op <= #1 `OR1200_ALUOP_NOP;
778
 
779
            // l.movhi
780
            `OR1200_OR32_MOVHI:
781
              alu_op <= #1 `OR1200_ALUOP_MOVHI;
782
 
783
            // l.mfspr
784
            `OR1200_OR32_MFSPR:
785
              alu_op <= #1 `OR1200_ALUOP_MFSR;
786
 
787
            // l.mtspr
788
            `OR1200_OR32_MTSPR:
789
              alu_op <= #1 `OR1200_ALUOP_MTSR;
790
 
791
            // l.addi
792
            `OR1200_OR32_ADDI:
793
              alu_op <= #1 `OR1200_ALUOP_ADD;
794
 
795
            // l.addic
796
            `OR1200_OR32_ADDIC:
797
              alu_op <= #1 `OR1200_ALUOP_ADDC;
798
 
799
            // l.andi
800
            `OR1200_OR32_ANDI:
801
              alu_op <= #1 `OR1200_ALUOP_AND;
802
 
803
            // l.ori
804
            `OR1200_OR32_ORI:
805
              alu_op <= #1 `OR1200_ALUOP_OR;
806
 
807
            // l.xori
808
            `OR1200_OR32_XORI:
809
              alu_op <= #1 `OR1200_ALUOP_XOR;
810
 
811
            // l.muli
812
`ifdef OR1200_MULT_IMPLEMENTED
813
            `OR1200_OR32_MULI:
814
              alu_op <= #1 `OR1200_ALUOP_MUL;
815
`endif
816
 
817
            // Shift and rotate insns with immediate
818
            `OR1200_OR32_SH_ROTI:
819
              alu_op <= #1 `OR1200_ALUOP_SHROT;
820
 
821
            // SFXX insns with immediate
822
            `OR1200_OR32_SFXXI:
823
              alu_op <= #1 `OR1200_ALUOP_COMP;
824
 
825
            // ALU instructions except the one with immediate
826
            `OR1200_OR32_ALU:
827
              alu_op <= #1 id_insn_cml_1[3:0];
828
 
829
            // SFXX instructions
830
            `OR1200_OR32_SFXX:
831
              alu_op <= #1 `OR1200_ALUOP_COMP;
832
 
833
`ifdef OR1200_OR32_CUST5
834
            // l.cust5 instructions
835
            `OR1200_OR32_CUST5:
836
              alu_op <= #1 `OR1200_ALUOP_CUST5;
837
`endif
838
 
839
            // Default
840
            default: begin
841
              alu_op <= #1 `OR1200_ALUOP_NOP;
842
            end
843
 
844
          endcase
845
 
846
        end end
847
end
848
 
849
//
850
// Decode of mac_op
851
//
852
`ifdef OR1200_MAC_IMPLEMENTED
853
 
854
// SynEDA CoreMultiplier
855
// assignment(s): mac_op
856
// replace(s): mac_op, id_insn
857
always @(posedge clk or posedge rst) begin
858
        if (rst)
859
                mac_op <= #1 `OR1200_MACOP_NOP;
860
        else begin  mac_op <= mac_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
861
                mac_op <= #1 `OR1200_MACOP_NOP;
862
        else if (!ex_freeze)
863
          case (id_insn_cml_1[31:26])           // synopsys parallel_case
864
 
865
            // l.maci
866
            `OR1200_OR32_MACI:
867
              mac_op <= #1 `OR1200_MACOP_MAC;
868
 
869
            // l.nop
870
            `OR1200_OR32_MACMSB:
871
              mac_op <= #1 id_insn_cml_1[1:0];
872
 
873
            // Illegal and OR1200 unsupported instructions
874
            default: begin
875
              mac_op <= #1 `OR1200_MACOP_NOP;
876
            end
877
 
878
          endcase
879
        else
880
                mac_op <= #1 `OR1200_MACOP_NOP; end
881
end
882
`else
883
assign mac_op = `OR1200_MACOP_NOP;
884
`endif
885
 
886
//
887
// Decode of shrot_op
888
//
889
 
890
// SynEDA CoreMultiplier
891
// assignment(s): shrot_op
892
// replace(s): shrot_op, id_insn
893
always @(posedge clk or posedge rst) begin
894
        if (rst)
895
                shrot_op <= #1 `OR1200_SHROTOP_NOP;
896
        else begin  shrot_op <= shrot_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
897
                shrot_op <= #1 `OR1200_SHROTOP_NOP;
898
        else if (!ex_freeze) begin
899
                shrot_op <= #1 id_insn_cml_1[`OR1200_SHROTOP_POS];
900
        end end
901
end
902
 
903
//
904
// Decode of rfwb_op
905
//
906
 
907
// SynEDA CoreMultiplier
908
// assignment(s): rfwb_op
909
// replace(s): rfwb_op, id_insn
910
always @(posedge clk or posedge rst) begin
911
        if (rst)
912
                rfwb_op <= #1 `OR1200_RFWBOP_NOP;
913
        else begin  rfwb_op <= rfwb_op_cml_1;  if (!ex_freeze & id_freeze | flushpipe)
914
                rfwb_op <= #1 `OR1200_RFWBOP_NOP;
915
        else  if (!ex_freeze) begin
916
                case (id_insn_cml_1[31:26])             // synopsys parallel_case
917
 
918
                  // j.jal
919
                  `OR1200_OR32_JAL:
920
                    rfwb_op <= #1 `OR1200_RFWBOP_LR;
921
 
922
                  // j.jalr
923
                  `OR1200_OR32_JALR:
924
                    rfwb_op <= #1 `OR1200_RFWBOP_LR;
925
 
926
                  // l.movhi
927
                  `OR1200_OR32_MOVHI:
928
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
929
 
930
                  // l.mfspr
931
                  `OR1200_OR32_MFSPR:
932
                    rfwb_op <= #1 `OR1200_RFWBOP_SPRS;
933
 
934
                  // l.lwz
935
                  `OR1200_OR32_LWZ:
936
                    rfwb_op <= #1 `OR1200_RFWBOP_LSU;
937
 
938
                  // l.lbz
939
                  `OR1200_OR32_LBZ:
940
                    rfwb_op <= #1 `OR1200_RFWBOP_LSU;
941
 
942
                  // l.lbs
943
                  `OR1200_OR32_LBS:
944
                    rfwb_op <= #1 `OR1200_RFWBOP_LSU;
945
 
946
                  // l.lhz
947
                  `OR1200_OR32_LHZ:
948
                    rfwb_op <= #1 `OR1200_RFWBOP_LSU;
949
 
950
                  // l.lhs
951
                  `OR1200_OR32_LHS:
952
                    rfwb_op <= #1 `OR1200_RFWBOP_LSU;
953
 
954
                  // l.addi
955
                  `OR1200_OR32_ADDI:
956
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
957
 
958
                  // l.addic
959
                  `OR1200_OR32_ADDIC:
960
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
961
 
962
                  // l.andi
963
                  `OR1200_OR32_ANDI:
964
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
965
 
966
                  // l.ori
967
                  `OR1200_OR32_ORI:
968
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
969
 
970
                  // l.xori
971
                  `OR1200_OR32_XORI:
972
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
973
 
974
                  // l.muli
975
`ifdef OR1200_MULT_IMPLEMENTED
976
                  `OR1200_OR32_MULI:
977
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
978
`endif
979
 
980
                  // Shift and rotate insns with immediate
981
                  `OR1200_OR32_SH_ROTI:
982
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
983
 
984
                  // ALU instructions except the one with immediate
985
                  `OR1200_OR32_ALU:
986
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
987
 
988
`ifdef OR1200_OR32_CUST5
989
                  // l.cust5 instructions
990
                  `OR1200_OR32_CUST5:
991
                    rfwb_op <= #1 `OR1200_RFWBOP_ALU;
992
`endif
993
 
994
                  // Instructions w/o register-file write-back
995
                  default: begin
996
                    rfwb_op <= #1 `OR1200_RFWBOP_NOP;
997
                  end
998
 
999
                endcase
1000
        end end
1001
end
1002
 
1003
//
1004
// Decode of pre_branch_op
1005
//
1006
 
1007
// SynEDA CoreMultiplier
1008
// assignment(s): pre_branch_op
1009
// replace(s): pre_branch_op
1010
always @(posedge clk or posedge rst) begin
1011
        if (rst)
1012
                pre_branch_op <= #1 `OR1200_BRANCHOP_NOP;
1013
        else begin  pre_branch_op <= pre_branch_op_cml_1; if (flushpipe)
1014
                pre_branch_op <= #1 `OR1200_BRANCHOP_NOP;
1015
        else if (!id_freeze) begin
1016
                case (if_insn[31:26])           // synopsys parallel_case
1017
 
1018
                  // l.j
1019
                  `OR1200_OR32_J:
1020
                    pre_branch_op <= #1 `OR1200_BRANCHOP_BAL;
1021
 
1022
                  // j.jal
1023
                  `OR1200_OR32_JAL:
1024
                    pre_branch_op <= #1 `OR1200_BRANCHOP_BAL;
1025
 
1026
                  // j.jalr
1027
                  `OR1200_OR32_JALR:
1028
                    pre_branch_op <= #1 `OR1200_BRANCHOP_JR;
1029
 
1030
                  // l.jr
1031
                  `OR1200_OR32_JR:
1032
                    pre_branch_op <= #1 `OR1200_BRANCHOP_JR;
1033
 
1034
                  // l.bnf
1035
                  `OR1200_OR32_BNF:
1036
                    pre_branch_op <= #1 `OR1200_BRANCHOP_BNF;
1037
 
1038
                  // l.bf
1039
                  `OR1200_OR32_BF:
1040
                    pre_branch_op <= #1 `OR1200_BRANCHOP_BF;
1041
 
1042
                  // l.rfe
1043
                  `OR1200_OR32_RFE:
1044
                    pre_branch_op <= #1 `OR1200_BRANCHOP_RFE;
1045
 
1046
                  // Non branch instructions
1047
                  default: begin
1048
                    pre_branch_op <= #1 `OR1200_BRANCHOP_NOP;
1049
                  end
1050
                endcase
1051
        end end
1052
end
1053
 
1054
//
1055
// Generation of branch_op
1056
//
1057
 
1058
// SynEDA CoreMultiplier
1059
// assignment(s): branch_op
1060
// replace(s): branch_op, pre_branch_op
1061
always @(posedge clk or posedge rst)
1062
        if (rst)
1063
                branch_op <= #1 `OR1200_BRANCHOP_NOP;
1064
        else begin  branch_op <= branch_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
1065
                branch_op <= #1 `OR1200_BRANCHOP_NOP;
1066
        else if (!ex_freeze)
1067
                branch_op <= #1 pre_branch_op_cml_1; end
1068
 
1069
//
1070
// Decode of lsu_op
1071
//
1072
 
1073
// SynEDA CoreMultiplier
1074
// assignment(s): lsu_op
1075
// replace(s): lsu_op, id_insn
1076
always @(posedge clk or posedge rst) begin
1077
        if (rst)
1078
                lsu_op <= #1 `OR1200_LSUOP_NOP;
1079
        else begin  lsu_op <= lsu_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
1080
                lsu_op <= #1 `OR1200_LSUOP_NOP;
1081
        else if (!ex_freeze)  begin
1082
          case (id_insn_cml_1[31:26])           // synopsys parallel_case
1083
 
1084
            // l.lwz
1085
            `OR1200_OR32_LWZ:
1086
              lsu_op <= #1 `OR1200_LSUOP_LWZ;
1087
 
1088
            // l.lbz
1089
            `OR1200_OR32_LBZ:
1090
              lsu_op <= #1 `OR1200_LSUOP_LBZ;
1091
 
1092
            // l.lbs
1093
            `OR1200_OR32_LBS:
1094
              lsu_op <= #1 `OR1200_LSUOP_LBS;
1095
 
1096
            // l.lhz
1097
            `OR1200_OR32_LHZ:
1098
              lsu_op <= #1 `OR1200_LSUOP_LHZ;
1099
 
1100
            // l.lhs
1101
            `OR1200_OR32_LHS:
1102
              lsu_op <= #1 `OR1200_LSUOP_LHS;
1103
 
1104
            // l.sw
1105
            `OR1200_OR32_SW:
1106
              lsu_op <= #1 `OR1200_LSUOP_SW;
1107
 
1108
            // l.sb
1109
            `OR1200_OR32_SB:
1110
              lsu_op <= #1 `OR1200_LSUOP_SB;
1111
 
1112
            // l.sh
1113
            `OR1200_OR32_SH:
1114
              lsu_op <= #1 `OR1200_LSUOP_SH;
1115
 
1116
            // Non load/store instructions
1117
            default: begin
1118
              lsu_op <= #1 `OR1200_LSUOP_NOP;
1119
            end
1120
          endcase
1121
        end end
1122
end
1123
 
1124
//
1125
// Decode of comp_op
1126
//
1127
 
1128
// SynEDA CoreMultiplier
1129
// assignment(s): comp_op
1130
// replace(s): comp_op, id_insn
1131
always @(posedge clk or posedge rst) begin
1132
        if (rst) begin
1133
                comp_op <= #1 4'd0;
1134
        end else begin  comp_op <= comp_op_cml_1; if (!ex_freeze & id_freeze | flushpipe)
1135
                comp_op <= #1 4'd0;
1136
        else if (!ex_freeze)
1137
                comp_op <= #1 id_insn_cml_1[24:21]; end
1138
end
1139
 
1140
//
1141
// Decode of l.sys
1142
//
1143
 
1144
// SynEDA CoreMultiplier
1145
// assignment(s): sig_syscall
1146
// replace(s): sig_syscall, id_insn
1147
always @(posedge clk or posedge rst) begin
1148
        if (rst)
1149
                sig_syscall <= #1 1'b0;
1150
        else begin  sig_syscall <= sig_syscall_cml_1; if (!ex_freeze & id_freeze | flushpipe)
1151
                sig_syscall <= #1 1'b0;
1152
        else if (!ex_freeze) begin
1153
`ifdef OR1200_VERBOSE
1154
// synopsys translate_off
1155
                if (id_insn_cml_1[31:23] == {`OR1200_OR32_XSYNC, 3'b000})
1156
                        $display("Generating sig_syscall");
1157
// synopsys translate_on
1158
`endif
1159
                sig_syscall <= #1 (id_insn_cml_1[31:23] == {`OR1200_OR32_XSYNC, 3'b000});
1160
        end end
1161
end
1162
 
1163
//
1164
// Decode of l.trap
1165
//
1166
 
1167
// SynEDA CoreMultiplier
1168
// assignment(s): sig_trap
1169
// replace(s): sig_trap, id_insn
1170
always @(posedge clk or posedge rst) begin
1171
        if (rst)
1172
                sig_trap <= #1 1'b0;
1173
        else begin  sig_trap <= sig_trap_cml_1; if (!ex_freeze & id_freeze | flushpipe)
1174
                sig_trap <= #1 1'b0;
1175
        else if (!ex_freeze) begin
1176
`ifdef OR1200_VERBOSE
1177
// synopsys translate_off
1178
                if (id_insn_cml_1[31:23] == {`OR1200_OR32_XSYNC, 3'b010})
1179
                        $display("Generating sig_trap");
1180
// synopsys translate_on
1181
`endif
1182
                sig_trap <= #1 (id_insn_cml_1[31:23] == {`OR1200_OR32_XSYNC, 3'b010})
1183
                        | du_hwbkpt;
1184
        end end
1185
end
1186
 
1187
 
1188
always @ (posedge clk_i_cml_1) begin
1189
ex_insn_cml_1 <= ex_insn;
1190
branch_op_cml_1 <= branch_op;
1191
rf_addrw_cml_1 <= rf_addrw;
1192
alu_op_cml_1 <= alu_op;
1193
mac_op_cml_1 <= mac_op;
1194
shrot_op_cml_1 <= shrot_op;
1195
rfwb_op_cml_1 <= rfwb_op;
1196
wb_insn_cml_1 <= wb_insn;
1197
lsu_op_cml_1 <= lsu_op;
1198
comp_op_cml_1 <= comp_op;
1199
spr_addrimm_cml_1 <= spr_addrimm;
1200
wbforw_valid_cml_1 <= wbforw_valid;
1201
sig_syscall_cml_1 <= sig_syscall;
1202
sig_trap_cml_1 <= sig_trap;
1203
ex_macrc_op_cml_1 <= ex_macrc_op;
1204
except_illegal_cml_1 <= except_illegal;
1205
pre_branch_op_cml_1 <= pre_branch_op;
1206
id_insn_cml_1 <= id_insn;
1207
wb_rfaddrw_cml_1 <= wb_rfaddrw;
1208
sel_imm_cml_1 <= sel_imm;
1209
end
1210
endmodule
1211
 

powered by: WebSVN 2.1.0

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