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

Subversion Repositories y80e

[/] [y80e/] [trunk/] [rtl/] [control.v] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 bsa
/*******************************************************************************************/
2
/**                                                                                       **/
3 6 bsa
/** ORIGINAL COPYRIGHT (C) 2011, SYSTEMYDE INTERNATIONAL CORPORATION, ALL RIGHTS RESERVED **/
4
/** COPYRIGHT (C) 2012, SERGEY BELYASHOV                                                  **/
5 2 bsa
/**                                                                                       **/
6 8 bsa
/** control module                                                   Rev  0.0  06/18/2012 **/
7 2 bsa
/**                                                                                       **/
8
/*******************************************************************************************/
9
module control (add_sel, alua_sel, alub_sel, aluop_sel, cflg_en, di_ctl, do_ctl, ex_af_pls,
10
                ex_bank_pls, ex_dehl_inst, halt_nxt, hflg_ctl, ief_ctl, if_frst, inta_frst,
11
                imd_ctl, ld_dmaa, ld_inst, ld_inta, ld_page, ld_wait, nflg_ctl, output_inh,
12 4 bsa
                page_sel, pc_sel, pflg_ctl, rd_frst, rd_nxt, reti_nxt, rreg_en, sflg_en, state_nxt,
13 2 bsa
                tflg_ctl, tran_sel, wr_addr, wr_frst, zflg_en, carry_bit, dmar_reg, inst_reg,
14
                intr_reg, page_reg, par_bit, sign_bit, state_reg, tflg_reg, vector_int,
15 6 bsa
                xhlt_reg, zero_bit, int_req);
16 2 bsa
 
17
  input         carry_bit;     /* carry flag                                               */
18
  input         dmar_reg;      /* latched dma request                                      */
19
  input         intr_reg;      /* latched interrupt request                                */
20 6 bsa
  input         int_req;       /* interrupt request (for SLP)                              */
21 2 bsa
  input         par_bit;       /* parity flag                                              */
22
  input         sign_bit;      /* sign flag                                                */
23
  input         tflg_reg;      /* temporary flag                                           */
24
  input         vector_int;    /* int vector enable                                        */
25
  input         xhlt_reg;      /* halt exit                                                */
26
  input         zero_bit;      /* zero flag                                                */
27
  input   [3:0] page_reg;      /* instruction decode "page"                                */
28
  input   [7:0] inst_reg;      /* instruction register                                     */
29
  input   [`STATE_IDX:0] state_reg;     /* current processor state                         */
30
  output        cflg_en;       /* carry flag control                                       */
31
  output        ex_af_pls;     /* exchange af,af'                                          */
32
  output        ex_bank_pls;   /* exchange register bank                                   */
33
  output        ex_dehl_inst;  /* exchange de,hl                                           */
34
  output        halt_nxt;      /* halt cycle next                                          */
35
  output        if_frst;       /* ifetch first cycle                                       */
36
  output        inta_frst;     /* intack first cycle                                       */
37
  output        ld_dmaa;       /* load dma request                                         */
38
  output        ld_inst;       /* load instruction register                                */
39
  output        ld_inta;       /* load interrupt request                                   */
40
  output        ld_page;       /* load page register                                       */
41
  output        ld_wait;       /* load wait request                                        */
42
  output        output_inh;    /* disable cpu outputs                                      */
43
  output        rd_frst;       /* read first cycle                                         */
44
  output        rd_nxt;        /* read cycle identifier                                    */
45
  output        reti_nxt;      /* reti identifier                                          */
46 6 bsa
  output        rreg_en;       /* update refresh register                                  */
47 2 bsa
  output        sflg_en;       /* sign flag control                                        */
48
  output        wr_frst;       /* write first cycle                                        */
49
  output        zflg_en;       /* zero flag control                                        */
50
  output  [3:0] page_sel;      /* instruction decode "page" control                        */
51
  output [`ADCTL_IDX:0] add_sel;     /* address output mux control                         */
52
  output  [`ALUA_IDX:0] alua_sel;    /* alu input a mux control                            */
53
  output  [`ALUB_IDX:0] alub_sel;    /* alu input b mux control                            */
54
  output [`ALUOP_IDX:0] aluop_sel;   /* alu operation control                              */
55
  output    [`DI_IDX:0] di_ctl;      /* data input control                                 */
56
  output    [`DO_IDX:0] do_ctl;      /* data output control                                */
57
  output  [`HFLG_IDX:0] hflg_ctl;    /* half-carry flag control                            */
58
  output   [`IEF_IDX:0] ief_ctl;     /* interrupt enable control                           */
59
  output   [`IMD_IDX:0] imd_ctl;     /* interrupt mode control                             */
60
  output  [`NFLG_IDX:0] nflg_ctl;    /* negate flag control                                */
61
  output [`PCCTL_IDX:0] pc_sel;      /* program counter source control                     */
62
  output  [`PFLG_IDX:0] pflg_ctl;    /* parity/overflow flag control                       */
63
  output [`STATE_IDX:0] state_nxt;   /* next processor state                               */
64
  output  [`TFLG_IDX:0] tflg_ctl;    /* temp flag control                                  */
65
  output [`TTYPE_IDX:0] tran_sel;    /* transaction type select                            */
66
  output  [`WREG_IDX:0] wr_addr;     /* register write address bus                         */
67
 
68
  /*****************************************************************************************/
69
  /*                                                                                       */
70
  /* signal declarations                                                                   */
71
  /*                                                                                       */
72
  /*****************************************************************************************/
73
  reg           cflg_en;                                   /* carry flag control           */
74
  reg           ex_af_pls;                                 /* exchange af,af'              */
75
  reg           ex_bank_pls;                               /* exchange register bank       */
76
  reg           ex_dehl_inst;                              /* exchange de,hl               */
77
  reg           halt_nxt;                                  /* halt transaction             */
78
  reg           if_frst;                                   /* first clock if ifetch        */
79
  reg           inta_frst;                                 /* first clock of intack        */
80
  reg           ld_inst;                                   /* load instruction register    */
81
  reg           ld_inta;                                   /* sample latched int           */
82
  reg           ld_dmaa;                                   /* sample latched dma           */
83
  reg           ld_page;                                   /* load page register           */
84
  reg           ld_wait;                                   /* sample wait input            */
85
  reg           output_inh;                                /* disable cpu outputs          */
86
  reg           rd_frst;                                   /* first clock of read          */
87
  reg           rd_nxt;                                    /* read trans next              */
88 6 bsa
  reg           reti_nxt;                                  /* reti trans next              */
89
`ifdef RREG_EMU
90
  reg           rreg_en;                                   /* update refresh register      */
91 4 bsa
`endif
92 2 bsa
  reg           sflg_en;                                   /* sign flag control            */
93
  reg           wr_frst;                                   /* first clock of write         */
94
  reg           zflg_en;                                   /* zero flag control            */
95
  reg     [3:0] page_sel;                                  /* inst decode page control     */
96
  reg   [`ADCTL_IDX:0] add_sel;                            /* address output mux control   */
97
  reg    [`ALUA_IDX:0] alua_sel;                           /* alu input a mux control      */
98
  reg    [`ALUB_IDX:0] alub_sel;                           /* alu input b mux control      */
99
  reg   [`ALUOP_IDX:0] aluop_sel;                          /* alu operation control        */
100
  reg      [`DI_IDX:0] di_ctl;                             /* data input control           */
101
  reg      [`DO_IDX:0] do_ctl;                             /* data output control          */
102
  reg    [`HFLG_IDX:0] hflg_ctl;                           /* half-carry flag control      */
103
  reg     [`IEF_IDX:0] ief_ctl;                            /* interrupt enable control     */
104
  reg     [`IMD_IDX:0] imd_ctl;                            /* interrupt mode control       */
105
  reg    [`NFLG_IDX:0] nflg_ctl;                           /* negate flag control          */
106
  reg   [`PCCTL_IDX:0] pc_sel;                             /* pc source control            */
107
  reg    [`PFLG_IDX:0] pflg_ctl;                           /* parity/overflow flag control */
108
  reg   [`STATE_IDX:0] state_nxt;                          /* machine state                */
109
  reg    [`TFLG_IDX:0] tflg_ctl;                           /* temp flag control            */
110
  reg   [`TTYPE_IDX:0] tran_sel;                           /* transaction type             */
111
  reg    [`WREG_IDX:0] wr_addr;                            /* register write address bus   */
112 8 bsa
 
113 2 bsa
  /*****************************************************************************************/
114
  /*                                                                                       */
115 6 bsa
  /* refresh register control                                                              */
116
  /*                                                                                       */
117
  /*****************************************************************************************/
118
`ifdef RREG_EMU
119
  always @ (inst_reg or page_reg or state_reg or dmar_reg) begin
120
    casex (state_reg) //sysnopsys parallel_case
121
      `IF1B,
122
      `IF2B,
123
      `IF3B:                rreg_en = 1'b1;
124
      `WR1B,
125
      `WR2B: begin
126
        casex ({page_reg, inst_reg}) //sysnopsys parallel_case
127
          12'b1xxx10111001,
128
          12'b1xxx10110001,
129
          12'b1xxx10111010,
130
          12'b1xxx10110010,
131
          12'b1xxx10111000,
132
          12'b1xxx10110000,
133
          12'b1xxx10111011,
134
          12'b1xxx10110011,
135
          12'b0001xxxxxxxx: rreg_en = 1'b1;
136
          default:          rreg_en = 1'b0;
137
        endcase
138
      end
139
      default:              rreg_en = 1'b0;
140
    endcase
141
  end
142
`endif
143
 
144
  /*****************************************************************************************/
145
  /*                                                                                       */
146 2 bsa
  /* exchange instruction control                                                          */
147
  /*                                                                                       */
148
  /*****************************************************************************************/
149
  always @ (inst_reg or page_reg or state_reg) begin
150
    casex (state_reg)
151
      `IF1B: begin
152
        case ({page_reg, inst_reg})
153
          12'b000000001000: ex_af_pls = 1'b1;
154
          default:          ex_af_pls = 1'b0;
155
          endcase
156
        end
157
      default:              ex_af_pls = 1'b0;
158
      endcase
159
    end
160
 
161
  always @ (inst_reg or page_reg or state_reg) begin
162
    casex (state_reg)
163
      `IF1B: begin
164
        case ({page_reg, inst_reg})
165
          12'b000011011001: ex_bank_pls = 1'b1;
166
          default:          ex_bank_pls = 1'b0;
167
          endcase
168
        end
169
      default:              ex_bank_pls = 1'b0;
170
      endcase
171
    end
172
 
173
  always @ (inst_reg or page_reg or state_reg) begin
174
    casex (state_reg)
175
      `DEC1: begin
176
        case (inst_reg)
177
          8'b11101011:      ex_dehl_inst = 1'b1;
178
          default:          ex_dehl_inst = 1'b0;
179
          endcase
180
        end
181
      default:              ex_dehl_inst = 1'b0;
182
      endcase
183
    end
184
 
185
  /*****************************************************************************************/
186
  /*                                                                                       */
187
  /* interrupt control                                                                     */
188
  /*                                                                                       */
189
  /*****************************************************************************************/
190
  always @ (inst_reg or page_reg or state_reg) begin
191
    casex (state_reg)
192
      `IF1B: begin
193
        casex ({page_reg, inst_reg})
194
          12'b000011110011: ief_ctl = `IEF_0;
195
          12'b000011111011: ief_ctl = `IEF_1;
196
          12'b0001xxxxxxxx: ief_ctl = `IEF_NMI;
197
          12'b1xxx01000101: ief_ctl = `IEF_RTN;
198
          default:          ief_ctl = `IEF_NUL;
199
          endcase
200
        end
201
      default:              ief_ctl = `IEF_NUL;
202
      endcase
203
    end
204
 
205
  always @ (inst_reg or page_reg or state_reg) begin
206
    casex (state_reg)
207
      `IF1B: begin
208
        casex ({page_reg, inst_reg})
209
          12'b1xxx01000110: imd_ctl = `IMD_0;
210
          12'b1xxx01010110: imd_ctl = `IMD_1;
211
          12'b1xxx01011110: imd_ctl = `IMD_2;
212
          default:          imd_ctl = `IMD_NUL;
213
          endcase
214
        end
215
      default:              imd_ctl = `IMD_NUL;
216
      endcase
217
    end
218
 
219
  /*****************************************************************************************/
220
  /*                                                                                       */
221
  /* identifiers to create timing signals                                                  */
222
  /*                                                                                       */
223
  /*****************************************************************************************/
224
  always @ (state_reg) begin
225
    casex (state_reg) //synopsys parallel_case
226
      `DEC1,
227
      `DEC2,
228
      `OF2A,
229
      `IF3A,
230
      `IF1A:                if_frst = 1'b1;
231
      default:              if_frst = 1'b0;
232
      endcase
233
    end
234
 
235
  always @ (state_reg) begin
236
    casex (state_reg) //synopsys parallel_case
237
      `INTA,
238
      `RSTE:                inta_frst = 1'b1;
239
      default:              inta_frst = 1'b0;
240
      endcase
241
    end
242
 
243
  always @ (inst_reg or page_reg or state_nxt) begin
244
    casex (state_nxt) //synopsys parallel_case
245
      `RD1A,
246
      `RD2A:                rd_nxt = 1'b1;
247
      default:              rd_nxt = 1'b0;
248
      endcase
249
    end
250
 
251
  always @ (inst_reg or page_reg or state_reg) begin
252
    casex (state_reg) //synopsys parallel_case
253
      `RD1A,
254
      `RD2A:                rd_frst = 1'b1;
255
      default:              rd_frst = 1'b0;
256
      endcase
257
    end
258
 
259
  always @ (state_reg) begin
260
    casex (state_reg) //synopsys parallel_case
261
      `WR1A,
262
      `WR2A:                wr_frst = 1'b1;
263
      default:              wr_frst = 1'b0;
264
      endcase
265
    end
266
 
267
  /*****************************************************************************************/
268
  /*                                                                                       */
269
  /* wait sample                                                                           */
270
  /*                                                                                       */
271
  /*****************************************************************************************/
272
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or
273
            sign_bit or zero_bit) begin
274
    casex (state_reg) //synopsys parallel_case
275
      `DEC1: begin
276
        casex (inst_reg) //synopsys parallel_case
277
          8'b00000010,
278
          8'b00001010,
279
          8'b00010010,
280
          8'b00011010,
281
          8'b00110100,
282
          8'b00110101,
283
          8'b011100xx,
284
          8'b0111010x,
285
          8'b01110111,
286
          8'b010xx110,
287
          8'b0110x110,
288
          8'b01111110,
289
          8'b10000110,
290
          8'b10001110,
291
          8'b10010110,
292
          8'b10011110,
293
          8'b10100110,
294
          8'b10101110,
295
          8'b10110110,
296
          8'b10111110,
297
          8'b11001001,
298
          8'b11100011,
299
          8'b11xx0001,
300
          8'b11xx0101,
301
          8'b11xxx111,
302
          8'b01110110,
303
          8'b11101001:      ld_wait = 1'b0;
304
          8'b11000000:      ld_wait =   zero_bit;
305
          8'b11001000:      ld_wait =  !zero_bit;
306
          8'b11010000:      ld_wait =  carry_bit;
307
          8'b11011000:      ld_wait = !carry_bit;
308
          8'b11100000:      ld_wait =    par_bit;
309
          8'b11101000:      ld_wait =   !par_bit;
310
          8'b11110000:      ld_wait =   sign_bit;
311
          8'b11111000:      ld_wait =  !sign_bit;
312
          default:          ld_wait = 1'b1;
313
          endcase
314
        end
315
      `DEC2: begin
316
        casex ({page_reg, inst_reg}) //synopsys parallel_case
317
          12'b0010xxxxx110,
318
          12'b010x11100001,
319
          12'b010x11100011,
320
          12'b010x11100101,
321 6 bsa
          12'b1xxx00xxx11x, //ld (hl),rr; ld (hl),ii; ld rr,(hl); ld ii,(hl)
322 2 bsa
          12'b1xxx0100x101,
323
          12'b1xxx0110x111,
324
          12'b1xxx01xxx00x,
325 6 bsa
          12'b1xxx01110110, //slp
326
          12'b1xxx100xx01x, //indm,indmr,inim,inimr, otdm,otdmr,otim,otimr
327 2 bsa
          12'b1xxx101xx0xx,
328 6 bsa
          12'b1xxx10xxx100, //ind2,ind2r,ini2,ini2r, outd2,otd2r,outi2,oti2r
329
          12'b1xxx1100x01x, //indrx,inirx, otdrx,otirx
330 2 bsa
          12'b010x11101001: ld_wait = 1'b0;
331
          default:          ld_wait = 1'b1;
332
          endcase
333
        end
334
      `OF2A,
335
      `IF3A,
336
      `RD1A,
337
      `RD2A,
338
      `WR1A,
339
      `WR2A,
340
      `IF1A,
341
      `INTA:                ld_wait = 1'b1;
342
      default:              ld_wait = 1'b0;
343
      endcase
344
    end
345
 
346
  /*****************************************************************************************/
347
  /*                                                                                       */
348
  /* instruction register and page register control                                        */
349
  /*                                                                                       */
350
  /*****************************************************************************************/
351
  always @ (inst_reg or page_reg or state_reg) begin
352
    casex (state_reg) //synopsys parallel_case
353
      `IF2B,
354
      `IF3B,
355
      `IF1B:                ld_inst = 1'b1;
356
      default:              ld_inst = 1'b0;
357
      endcase
358
    end
359
 
360
  always @ (inst_reg or page_reg or state_reg) begin
361
    casex (state_reg)
362
      `DEC1: begin
363
        case (inst_reg)
364
          8'b11001011:      page_sel = `CB_PAGE;
365
          8'b11011101:      page_sel = `DD_PAGE;
366
          8'b11101101:      page_sel = `ED_PAGE;
367
          8'b11111101:      page_sel = `FD_PAGE;
368
          default:          page_sel = `MAIN_PG;
369
          endcase
370
        end
371
      `DEC2: begin
372
        casex ({page_reg, inst_reg})
373
          12'bx10011001011: page_sel = `DDCB_PG;
374
          12'bx10111001011: page_sel = `FDCB_PG;
375
          default:          page_sel = `MAIN_PG;
376
          endcase
377
        end
378
      `INTA:                page_sel = `INTR_PG;
379
      `DMA1:                page_sel = `DMA_PG;
380
      default:              page_sel = `MAIN_PG;
381
      endcase
382
    end
383
 
384
  always @ (inst_reg or page_reg or state_reg) begin
385
    casex (state_reg) //synopsys parallel_case
386
      `DEC1:                ld_page = 1'b1;
387
      `DEC2: begin
388
        casex ({page_reg, inst_reg})
389
          12'bx10x11001011: ld_page = 1'b1;
390
          default:          ld_page = 1'b0;
391
          endcase
392
        end
393
      `INTA,
394
      `DMA1:                ld_page = 1'b1;
395
      default:              ld_page = 1'b0;
396
      endcase
397
    end
398
 
399
  /*****************************************************************************************/
400
  /*                                                                                       */
401
  /*  next state control                                                                   */
402
  /*                                                                                       */
403
  /*****************************************************************************************/
404
  always @ (inst_reg or page_reg or state_reg or carry_bit or dmar_reg or intr_reg or
405
            par_bit or sign_bit or tflg_reg or vector_int or xhlt_reg or zero_bit) begin
406
    casex (state_reg) //synopsys parallel_case
407
      `DEC1: begin
408
        casex (inst_reg) //synopsys parallel_case
409
          8'b00000010,
410
          8'b00001010,
411
          8'b00010010,
412
          8'b00011010,
413
          8'b00110100,
414
          8'b00110101,
415
          8'b011100xx,
416
          8'b0111010x,
417
          8'b01110111,
418
          8'b010xx110,
419
          8'b0110x110,
420
          8'b01111110,
421
          8'b10000110,
422
          8'b10001110,
423
          8'b10010110,
424
          8'b10011110,
425
          8'b10100110,
426
          8'b10101110,
427
          8'b10110110,
428
          8'b10111110,
429
          8'b11001001,
430
          8'b11100011,
431
          8'b11xx0001,
432
          8'b11xx0101,
433
          8'b11xxx111:      state_nxt = `sADR2;
434
          8'b11000000:      state_nxt = ( !zero_bit) ? `sADR2 : `sIF1B;
435
          8'b11001000:      state_nxt = (  zero_bit) ? `sADR2 : `sIF1B;
436
          8'b11010000:      state_nxt = (!carry_bit) ? `sADR2 : `sIF1B;
437
          8'b11011000:      state_nxt = ( carry_bit) ? `sADR2 : `sIF1B;
438
          8'b11100000:      state_nxt = (  !par_bit) ? `sADR2 : `sIF1B;
439
          8'b11101000:      state_nxt = (   par_bit) ? `sADR2 : `sIF1B;
440
          8'b11110000:      state_nxt = ( !sign_bit) ? `sADR2 : `sIF1B;
441
          8'b11111000:      state_nxt = (  sign_bit) ? `sADR2 : `sIF1B;
442
          8'b11001011,
443
          8'b11011101,
444
          8'b11101101,
445
          8'b11111101:      state_nxt = `sIF2B;
446
          8'b00010000,
447
          8'b00011000,
448
          8'b00100010,
449
          8'b00101010,
450
          8'b00110010,
451
          8'b00111010,
452
          8'b001xx000,
453
          8'b00xx0001,
454
          8'b00xxx110,
455
          8'b11000011,
456
          8'b11000110,
457
          8'b11001101,
458
          8'b11001110,
459
          8'b11010011,
460
          8'b11010110,
461
          8'b11011011,
462
          8'b11011110,
463
          8'b11100110,
464
          8'b11101110,
465
          8'b11110110,
466
          8'b11111110,
467
          8'b11xxx010,
468
          8'b11xxx100:      state_nxt = `sOF1B;
469
          8'b01110110,
470
          8'b11101001:      state_nxt = `sPCO;
471
          default:          state_nxt = `sIF1B;
472
          endcase
473
        end
474
      `IF2B:                state_nxt = `sDEC2;
475
      `DEC2: begin
476 6 bsa
        casex ({page_reg, inst_reg}) //synopsys parallel_case
477 8 bsa
          12'b001000000110,
478
          12'b001000001110,
479
          12'b001000010110,
480
          12'b001000011110,
481
          12'b001000100110,
482
          12'b001000101110,
483
          12'b001000110110,
484
          12'b001000111110,
485
          12'b001001xxx110,
486
          12'b001010xxx110,
487
          12'b001011xxx110,
488
          12'b010011100001,
489
          12'b010011100011,
490
          12'b010011100101,
491
          12'b010111100001,
492
          12'b010111100011,
493
          12'b010111100101,
494
          12'b1xxx00110100,
495
          12'b1xxx00110110,
496
          12'b1xxx00110111,
497
          12'b1xxx00111110,
498
          12'b1xxx00111111,
499
          12'b1xxx00xx0111,
500
          12'b1xxx00xx1111,
501
          12'b1xxx01000101,
502
          12'b1xxx01001101,
503
          12'b1xxx01100111,
504
          12'b1xxx01101111,
505
          12'b1xxx01xxx000,
506
          12'b1xxx01xxx001,
507
          12'b1xxx10000010,
508
          12'b1xxx10000011,
509
          12'b1xxx10000100,
510
          12'b1xxx10001010,
511
          12'b1xxx10001011,
512
          12'b1xxx10001100,
513
          12'b1xxx10010010,
514
          12'b1xxx10010011,
515
          12'b1xxx10010100,
516
          12'b1xxx10011010,
517
          12'b1xxx10011011,
518
          12'b1xxx10011100,
519
          12'b1xxx10100000,
520
          12'b1xxx10100001,
521
          12'b1xxx10100010,
522
          12'b1xxx10100011,
523
          12'b1xxx10100100,
524
          12'b1xxx10101000,
525
          12'b1xxx10101001,
526
          12'b1xxx10101010,
527
          12'b1xxx10101011,
528
          12'b1xxx10101100,
529
          12'b1xxx10110000,
530
          12'b1xxx10110001,
531
          12'b1xxx10110010,
532
          12'b1xxx10110011,
533
          12'b1xxx10110100,
534
          12'b1xxx10111000,
535
          12'b1xxx10111001,
536
          12'b1xxx10111010,
537
          12'b1xxx10111011,
538
          12'b1xxx10111100,
539
          12'b1xxx11000010,
540
          12'b1xxx11000011,
541
          12'b1xxx11001010,
542
          12'b1xxx11001011: state_nxt = `sADR2;
543
          12'b001000000xxx,
544
          12'b001000001xxx,
545
          12'b001000010xxx,
546
          12'b001000011xxx,
547
          12'b001000100xxx,
548
          12'b001000101xxx,
549
          12'b001000110xxx,
550
          12'b001000111xxx,
551
          12'b001001xxxxxx,
552
          12'b001010xxxxxx,
553
          12'b001011xxxxxx,
554
          12'b010000100011,
555
          12'b010000100100,
556
          12'b010000100101,
557
          12'b010000101011,
558
          12'b010000101100,
559
          12'b010000101101,
560
          12'b010000xx1001,
561
          12'b01000110x0xx,12'b01000110x10x,12'b01000110x111,
562
          12'b0100010xx10x,12'b01000110x10x,12'b01000111110x,
563
          12'b010010000100,
564
          12'b010010000101,
565
          12'b010010001100,
566
          12'b010010001101,
567
          12'b010010010100,
568
          12'b010010010101,
569
          12'b010010011100,
570
          12'b010010011101,
571
          12'b010010100100,
572
          12'b010010100101,
573
          12'b010010101100,
574
          12'b010010101101,
575
          12'b010010110100,
576
          12'b010010110101,
577
          12'b010010111100,
578
          12'b010010111101,
579
          12'b010011111001,
580
          12'b010100100011,
581
          12'b010100100100,
582
          12'b010100100101,
583
          12'b010100101011,
584
          12'b010100101100,
585
          12'b010100101101,
586
          12'b010100xx1001,
587
          12'b01010110x0xx,12'b01010110x10x,12'b01010110x111,
588
          12'b0101010xx10x,12'b01010110x10x,12'b01010111110x,
589
          12'b010110000100,
590
          12'b010110000101,
591
          12'b010110001100,
592
          12'b010110001101,
593
          12'b010110010100,
594
          12'b010110010101,
595
          12'b010110011100,
596
          12'b010110011101,
597
          12'b010110100100,
598
          12'b010110100101,
599
          12'b010110101100,
600
          12'b010110101101,
601
          12'b010110110100,
602
          12'b010110110101,
603
          12'b010110111100,
604
          12'b010110111101,
605
          12'b010111111001,
606
          12'b1xxx00xxx100,
607
          12'b1xxx01000100,
608
          12'b1xxx01000110,
609
          12'b1xxx01000111,
610
          12'b1xxx01001111,
611
          12'b1xxx01010110,
612
          12'b1xxx01010111,
613
          12'b1xxx01011110,
614
          12'b1xxx01011111,
615
          12'b1xxx01xx1100,
616
          12'b1xxx01xx0010,
617
          12'b1xxx01xx1010: state_nxt = `sIF1B;
618 2 bsa
          12'b010011101001,
619 6 bsa
          12'b010111101001,
620
          12'b1xxx01110110: state_nxt = `sPCO;
621 2 bsa
          default:          state_nxt = `sOF1B;
622
        endcase
623
      end
624
      `OF1B: begin
625
        casex ({page_reg, inst_reg}) //synopsys parallel_case
626 8 bsa
          12'b0000000xx110,12'b00000010x110,12'b000000111110,
627
          12'b000011000110,
628
          12'b000011001110,
629
          12'b000011010110,
630
          12'b000011011110,
631
          12'b000011100110,
632
          12'b000011101110,
633
          12'b000011110110,
634
          12'b000011111110,
635
          12'b010000100110,
636
          12'b010000101110,
637
          12'b010100100110,
638
          12'b010100101110,
639
          12'b1xxx00110010,
640
          12'b1xxx00110011,
641
          12'b1xxx00xx0010,
642
          12'b1xxx00xx0011,
643
          12'b1xxx01010100,
644
          12'b1xxx01010101,
645 6 bsa
          12'b1xxx01100100: state_nxt = `sIF1A;
646 2 bsa
          12'b000000100000: state_nxt = ( !zero_bit) ? `sPCA : `sIF1A;
647
          12'b000000101000: state_nxt = (  zero_bit) ? `sPCA : `sIF1A;
648
          12'b000000110000: state_nxt = (!carry_bit) ? `sPCA : `sIF1A;
649
          12'b000000111000: state_nxt = ( carry_bit) ? `sPCA : `sIF1A;
650 8 bsa
          12'b011xxxxxxxxx: state_nxt = `sIF3A; //DD/FD + CB
651
          12'b000000100010,
652
          12'b000000101010,
653
          12'b000000110010,
654
          12'b000000111010,
655
          12'b000000xx0001,
656
          12'b000011000011,
657
          12'b000011001101,
658
          12'b000011xxx010,
659
          12'b000011xxx100,
660
          12'b010000100001,
661
          12'b010000100010,
662
          12'b010000101010,
663
          12'b010000110110,
664
          12'b010100100001,
665
          12'b010100100010,
666
          12'b010100101010,
667
          12'b010100110110,
668
          12'b1xxx01xx0011,
669 2 bsa
          12'b1xxx01xx1011: state_nxt = `sOF2A;
670
          12'b000000010000,
671
          12'b000000011000: state_nxt = `sPCA;
672
          12'b000000110110: state_nxt = `sWR2A;
673 8 bsa
          default:          state_nxt = `sADR1;
674 2 bsa
        endcase
675
      end
676
      `OF2A:                state_nxt = `sOF2B;
677
      `OF2B: begin
678
        casex ({page_reg, inst_reg}) //synopsys parallel_case
679
          12'b000000xx0001,
680
          12'b010000100001,
681
          12'b010100100001: state_nxt = `sIF1A;
682
          12'b000011000010: state_nxt = ( !zero_bit) ? `sPCA : `sIF1A;
683
          12'b000011001010: state_nxt = (  zero_bit) ? `sPCA : `sIF1A;
684
          12'b000011010010: state_nxt = (!carry_bit) ? `sPCA : `sIF1A;
685
          12'b000011011010: state_nxt = ( carry_bit) ? `sPCA : `sIF1A;
686
          12'b000011100010: state_nxt = (  !par_bit) ? `sPCA : `sIF1A;
687
          12'b000011101010: state_nxt = (   par_bit) ? `sPCA : `sIF1A;
688
          12'b000011110010: state_nxt = ( !sign_bit) ? `sPCA : `sIF1A;
689
          12'b000011111010: state_nxt = (  sign_bit) ? `sPCA : `sIF1A;
690
          12'b000011000100: state_nxt = ( !zero_bit) ? `sWR1A : `sIF1A;
691
          12'b000011001100: state_nxt = (  zero_bit) ? `sWR1A : `sIF1A;
692
          12'b000011010100: state_nxt = (!carry_bit) ? `sWR1A : `sIF1A;
693
          12'b000011011100: state_nxt = ( carry_bit) ? `sWR1A : `sIF1A;
694
          12'b000011100100: state_nxt = (  !par_bit) ? `sWR1A : `sIF1A;
695
          12'b000011101100: state_nxt = (   par_bit) ? `sWR1A : `sIF1A;
696
          12'b000011110100: state_nxt = ( !sign_bit) ? `sWR1A : `sIF1A;
697
          12'b000011111100: state_nxt = (  sign_bit) ? `sWR1A : `sIF1A;
698
          12'b000011000011: state_nxt = `sPCA;
699
          12'b000011001101: state_nxt = `sWR1A;
700
          12'b010000110110,
701
          12'b010100110110: state_nxt = `sWR2A;
702
          default:          state_nxt = `sADR1;
703
        endcase
704
      end
705
      `IF3A:                state_nxt = `sIF3B;
706
      `IF3B:                state_nxt = `sRD2A;
707
      `ADR1:                state_nxt = `sADR2;
708
      `ADR2: begin
709
        casex ({page_reg, inst_reg}) //synopsys parallel_case
710 8 bsa
          12'b000000101010,
711
          12'b000011001001,
712
          12'b000011100011,
713
          12'b000011xxx000,
714
          12'b000011xx0001,
715
          12'b0001xxxxxxxx,
716
          12'b010000101010,
717
          12'b010000110001,
718
          12'b010000110111,
719
          12'b010000xx0111,
720
          12'b010011100001,
721
          12'b010011100011,
722
          12'b010100101010,
723
          12'b010100110001,
724
          12'b010100110111,
725
          12'b010100xx0111,
726
          12'b010111100001,
727
          12'b010111100011,
728
          12'b1xxx00110110,
729
          12'b1xxx00110111,
730
          12'b1xxx00xx0111,
731
          12'b1xxx01000101,
732
          12'b1xxx01001101,
733
          12'b1xxx01xx1011,
734
          12'b1xxx10000010,
735
          12'b1xxx10000011,
736
          12'b1xxx10000100,
737
          12'b1xxx10001010,
738
          12'b1xxx10001011,
739
          12'b1xxx10001100,
740
          12'b1xxx10010010,
741
          12'b1xxx10010011,
742
          12'b1xxx10010100,
743
          12'b1xxx10011010,
744
          12'b1xxx10011011,
745
          12'b1xxx10011100,
746
          12'b1xxx10100000,
747
          12'b1xxx10100001,
748
          12'b1xxx10100010,
749
          12'b1xxx10100011,
750
          12'b1xxx10100100,
751
          12'b1xxx10101000,
752
          12'b1xxx10101001,
753
          12'b1xxx10101010,
754
          12'b1xxx10101011,
755
          12'b1xxx10101100,
756
          12'b1xxx10110000,
757
          12'b1xxx10110001,
758
          12'b1xxx10110010,
759
          12'b1xxx10110011,
760
          12'b1xxx10110100,
761
          12'b1xxx10111000,
762
          12'b1xxx10111001,
763
          12'b1xxx10111010,
764
          12'b1xxx10111011,
765
          12'b1xxx10111100,
766
          12'b1xxx11000010,
767
          12'b1xxx11000011,
768
          12'b1xxx11001010,
769
          12'b1xxx11001011: state_nxt = `sRD1A;
770
          12'b000000100010,
771
          12'b000011xxx111,
772
          12'b000011xx0101,
773
          12'b010000100010,
774
          12'b010000111110,
775
          12'b010000111111,
776
          12'b010000xx1111,
777
          12'b010011100101,
778
          12'b010100100010,
779
          12'b010100111110,
780
          12'b010100111111,
781
          12'b010100xx1111,
782
          12'b010111100101,
783
          12'b1xxx00111110,
784
          12'b1xxx00111111,
785
          12'b1xxx00xx1111,
786
          12'b1xxx01100101,
787
          12'b1xxx01100110,
788 2 bsa
          12'b1xxx01xx0011: state_nxt = `sWR1A;
789
          12'b000000000010,
790
          12'b000000010010,
791
          12'b000000110010,
792
          12'b000001110xxx,
793
          12'b000011010011,
794
          12'b010001110xxx,
795
          12'b010101110xxx,
796 6 bsa
          12'b1xxx00xxx001,
797 2 bsa
          12'b1xxx01xxx001: state_nxt = `sWR2A;
798
          default:          state_nxt = `sRD2A;
799
        endcase
800
      end
801
      `RD1A:                state_nxt = `sRD1B;
802
      `RD1B: begin
803
        casex ({page_reg, inst_reg}) //synopsys parallel_case
804
          12'b1xxx10100001,
805
          12'b1xxx10101001,
806
          12'b1xxx10110001,
807
          12'b1xxx10111001: state_nxt = `sBLK1;
808 8 bsa
          12'b1xxx10000010,
809
          12'b1xxx10000011,
810
          12'b1xxx10000100,
811
          12'b1xxx10001010,
812
          12'b1xxx10001011,
813
          12'b1xxx10001100,
814
          12'b1xxx10010010,
815
          12'b1xxx10010011,
816
          12'b1xxx10010100,
817
          12'b1xxx10011010,
818
          12'b1xxx10011011,
819
          12'b1xxx10011100,
820
          12'b1xxx10100000,
821
          12'b1xxx10100010,
822
          12'b1xxx10100011,
823
          12'b1xxx10100100,
824
          12'b1xxx10101000,
825
          12'b1xxx10101010,
826
          12'b1xxx10101011,
827
          12'b1xxx10101100,
828
          12'b1xxx10110000,
829
          12'b1xxx10110010,
830
          12'b1xxx10110011,
831
          12'b1xxx10110100,
832
          12'b1xxx10111000,
833
          12'b1xxx10111010,
834
          12'b1xxx10111011,
835
          12'b1xxx10111100,
836
          12'b1xxx11000010,
837
          12'b1xxx11000011,
838
          12'b1xxx11001010,
839
          12'b1xxx11001011: state_nxt = `sWR1A;
840 2 bsa
          default:          state_nxt = `sRD2A;
841
        endcase
842
      end
843
      `RD2A:                state_nxt = `sRD2B;
844
      `RD2B: begin
845
        casex ({page_reg, inst_reg}) //synopsys parallel_case
846
          12'b1xxx10100001,
847
          12'b1xxx10101001,
848
          12'b1xxx10110001,
849
          12'b1xxx10111001: state_nxt = `sBLK1;
850 8 bsa
          12'b000000001010,
851
          12'b000000011010,
852
          12'b000000101010,
853
          12'b000000111010,
854
          12'b000001xxxxxx,
855
          12'b000001xxx110,
856
          12'b000010000110,
857
          12'b000010000xxx,
858
          12'b000010001110,
859
          12'b000010001xxx,
860
          12'b000010010110,
861
          12'b000010011110,
862
          12'b000010100110,
863
          12'b000010100xxx,
864
          12'b000010101110,
865
          12'b000010110110,
866
          12'b000010110xxx,
867
          12'b000010111110,
868
          12'b000010111xxx,
869
          12'b000011011011,
870
          12'b000011xx0001,
871
          12'b001001xxx110,
872
          12'b001001xxxxxx,
873
          12'b010000101010,
874
          12'b010000110001,
875
          12'b010000110111,
876
          12'b010000xx0111,
877
          12'b010001xxx110,
878
          12'b010010000110,
879
          12'b010010001110,
880
          12'b010010010110,
881
          12'b010010011110,
882
          12'b010010100110,
883
          12'b010010101110,
884
          12'b010010110110,
885
          12'b010010111110,
886
          12'b010011100001,
887
          12'b010100101010,
888
          12'b010100110001,
889
          12'b010100110111,
890
          12'b010100xx0111,
891
          12'b010101xxx110,
892
          12'b010110000110,
893
          12'b010110001110,
894
          12'b010110010110,
895
          12'b010110011110,
896
          12'b010110100110,
897
          12'b010110101110,
898
          12'b010110110110,
899
          12'b010110111110,
900
          12'b010111100001,
901
          12'b011001xxx110,
902
          12'b011101xxx110,
903
          12'b1xxx00110100,
904
          12'b1xxx00110110,
905
          12'b1xxx00110111,
906
          12'b1xxx00xx0111,
907
          12'b1xxx00xxx000,
908
          12'b1xxx00xxx100,
909
          12'b1xxx01110100,
910
          12'b1xxx01xxx000,
911 2 bsa
          12'b1xxx01xx1011: state_nxt = `sIF1A;
912
          12'b000011001001,
913
          12'b000011xxx000,
914
          12'b1xxx01000101,
915
          12'b1xxx01001101: state_nxt = `sPCA;
916
          12'b000011100011,
917
          12'b0001xxxxxxxx,
918
          12'b010011100011,
919
          12'b010111100011: state_nxt = `sWR1A;
920
          default:          state_nxt = `sWR2A;
921
        endcase
922
      end
923
      `WR1A:                state_nxt = `sWR1B;
924
      `WR1B: begin
925
        casex ({page_reg, inst_reg}) //synopsys parallel_case
926 8 bsa
          12'b1xxx10000010,
927
          12'b1xxx10000011,
928
          12'b1xxx10000100,
929
          12'b1xxx10001010,
930
          12'b1xxx10001011,
931
          12'b1xxx10001100,
932
          12'b1xxx10100000,
933
          12'b1xxx10100010,
934
          12'b1xxx10100011,
935
          12'b1xxx10100100,
936
          12'b1xxx10101000,
937
          12'b1xxx10101010,
938
          12'b1xxx10101011,
939
          12'b1xxx10101100: state_nxt = `sIF1A;
940
          12'b1xxx10010010,
941
          12'b1xxx10010011,
942
          12'b1xxx10010100,
943
          12'b1xxx10011010,
944
          12'b1xxx10011011,
945
          12'b1xxx10011100,
946
          12'b1xxx10110000,
947
          12'b1xxx10110010,
948
          12'b1xxx10110011,
949
          12'b1xxx10110100,
950
          12'b1xxx10111000,
951
          12'b1xxx10111010,
952
          12'b1xxx10111011,
953
          12'b1xxx10111100,
954
          12'b1xxx11000010,
955
          12'b1xxx11000011,
956
          12'b1xxx11001010,
957
          12'b1xxx11001011: state_nxt = (tflg_reg || intr_reg || dmar_reg) ? `sPCA : `sRD2A;
958 2 bsa
          default:          state_nxt = `sWR2A;
959
        endcase
960
      end
961
      `WR2A:                state_nxt = `sWR2B;
962
      `WR2B: begin
963
        casex ({page_reg, inst_reg}) //synopsys parallel_case
964 8 bsa
          12'b1xxx10010010,
965
          12'b1xxx10010011,
966
          12'b1xxx10010100,
967
          12'b1xxx10011010,
968
          12'b1xxx10011011,
969
          12'b1xxx10011100,
970
          12'b1xxx10100000,
971
          12'b1xxx10100010,
972
          12'b1xxx10100011,
973
          12'b1xxx10101000,
974
          12'b1xxx10101010,
975
          12'b1xxx10101011,
976
          12'b1xxx10110000,
977
          12'b1xxx10110010,
978
          12'b1xxx10110011,
979
          12'b1xxx10110100,
980
          12'b1xxx10111000,
981
          12'b1xxx10111010,
982
          12'b1xxx10111011,
983
          12'b1xxx10111100,
984
          12'b1xxx11000010,
985
          12'b1xxx11000011,
986
          12'b1xxx11001010,
987
          12'b1xxx11001011: state_nxt = (tflg_reg || intr_reg || dmar_reg) ? `sPCA : `sRD2A;
988 2 bsa
          default:          state_nxt = `sIF1A;
989
        endcase
990
      end
991
      `BLK1:                state_nxt = `sBLK2;
992
      `BLK2: begin
993
        casex ({page_reg, inst_reg}) //synopsys parallel_case
994
          12'b1xxx10110001,
995
          12'b1xxx10111001: state_nxt = (tflg_reg || intr_reg || dmar_reg) ? `sPCA : `sRD2A;
996
          default:          state_nxt = `sIF1A;
997
        endcase
998
      end
999
      `PCA:                 state_nxt = `sPCO;
1000
      `PCO: begin
1001
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1002 8 bsa
          12'b000001110110,
1003 6 bsa
          12'b1xxx01110110: state_nxt = `sHLTA;
1004 2 bsa
          default:          state_nxt = `sIF1A;
1005
          endcase
1006
        end
1007
      `HLTA:                state_nxt = `sHLTB;
1008 6 bsa
      `HLTB:                state_nxt = (xhlt_reg || (int_req && page_reg[3])) ? `sIF1A : `sHLTA;
1009 2 bsa
      `IF1A:                state_nxt = `sIF1B;
1010
      `IF1B:                state_nxt = `sDEC1;
1011
      `INTA:                state_nxt = `sINTB;
1012
      `INTB:                state_nxt = (vector_int) ? `sADR1 : `sWR1A;
1013
      `DMA1:                state_nxt = `sDMA2;
1014
      `DMA2:                state_nxt = (dmar_reg) ? `sDMA1 : `sIF1A;
1015
      `RSTE:                state_nxt = `sIF1A;
1016
      default:              state_nxt = `sRSTE;
1017
      endcase
1018
    end
1019
 
1020
  /*****************************************************************************************/
1021
  /*                                                                                       */
1022
  /*  transaction type control                                                             */
1023
  /*                                                                                       */
1024
  /*****************************************************************************************/
1025
  always @ (inst_reg or page_reg or state_reg or carry_bit or dmar_reg or intr_reg or
1026
            par_bit or sign_bit or tflg_reg or vector_int or xhlt_reg or zero_bit) begin
1027
    casex (state_reg) //synopsys parallel_case
1028
      `IF2B:                tran_sel = `TRAN_IF;
1029
      `OF1B: begin
1030
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1031 8 bsa
          12'b000000010000,
1032
          12'b000000011000,
1033
          12'b000011010011,
1034
          12'b000011011011,
1035
          12'b010000110001,
1036
          12'b010000110100,
1037
          12'b010000110101,
1038
          12'b010000110111,
1039
          12'b010000111110,
1040
          12'b010000111111,
1041
          12'b010000xx0111,
1042
          12'b010000xx1111,
1043
          12'b010001110xxx,
1044
          12'b010001xxx110,
1045
          12'b010010000110,
1046
          12'b010010001110,
1047
          12'b010010010110,
1048
          12'b010010011110,
1049
          12'b010010100110,
1050
          12'b010010101110,
1051
          12'b010010110110,
1052
          12'b010010111110,
1053
          12'b010100110001,
1054
          12'b010100110100,
1055
          12'b010100110101,
1056
          12'b010100110111,
1057
          12'b010100111110,
1058
          12'b010100111111,
1059
          12'b010100xx0111,
1060
          12'b010100xx1111,
1061
          12'b010101110xxx,
1062
          12'b010101xxx110,
1063
          12'b010110000110,
1064
          12'b010110001110,
1065
          12'b010110010110,
1066
          12'b010110011110,
1067
          12'b010110100110,
1068
          12'b010110101110,
1069
          12'b010110110110,
1070
          12'b010110111110,
1071
          12'b1xxx00110010,
1072
          12'b1xxx00110011,
1073
          12'b1xxx00xx0010,
1074
          12'b1xxx00xx0011,
1075
          12'b1xxx01010100,
1076
          12'b1xxx01010101,
1077
          12'b1xxx01100101,
1078
          12'b1xxx01100110: tran_sel = `TRAN_IDL;
1079 2 bsa
          12'b000000100000: tran_sel = (  zero_bit) ? `TRAN_IF : `TRAN_IDL;
1080
          12'b000000101000: tran_sel = ( !zero_bit) ? `TRAN_IF : `TRAN_IDL;
1081
          12'b000000110000: tran_sel = ( carry_bit) ? `TRAN_IF : `TRAN_IDL;
1082
          12'b000000111000: tran_sel = (!carry_bit) ? `TRAN_IF : `TRAN_IDL;
1083
          12'b000000110110: tran_sel = `TRAN_MEM;
1084
          default:          tran_sel = `TRAN_IF;
1085
          endcase
1086
        end
1087
      `OF2B: begin
1088
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1089
          12'b000000xx0001,
1090
          12'b010000100001,
1091
          12'b010100100001: tran_sel = `TRAN_IF;
1092
          12'b010000110110,
1093
          12'b010100110110: tran_sel = `TRAN_MEM;
1094
          12'b000011001101: tran_sel = `TRAN_STK;
1095
          12'b000011000010: tran_sel = ( !zero_bit) ? `TRAN_IDL : `TRAN_IF;
1096
          12'b000011001010: tran_sel = (  zero_bit) ? `TRAN_IDL : `TRAN_IF;
1097
          12'b000011010010: tran_sel = (!carry_bit) ? `TRAN_IDL : `TRAN_IF;
1098
          12'b000011011010: tran_sel = ( carry_bit) ? `TRAN_IDL : `TRAN_IF;
1099
          12'b000011100010: tran_sel = (  !par_bit) ? `TRAN_IDL : `TRAN_IF;
1100
          12'b000011101010: tran_sel = (   par_bit) ? `TRAN_IDL : `TRAN_IF;
1101
          12'b000011110010: tran_sel = ( !sign_bit) ? `TRAN_IDL : `TRAN_IF;
1102
          12'b000011111010: tran_sel = (  sign_bit) ? `TRAN_IDL : `TRAN_IF;
1103
          12'b000011000100: tran_sel = ( !zero_bit) ? `TRAN_STK : `TRAN_IF;
1104
          12'b000011001100: tran_sel = (  zero_bit) ? `TRAN_STK : `TRAN_IF;
1105
          12'b000011010100: tran_sel = (!carry_bit) ? `TRAN_STK : `TRAN_IF;
1106
          12'b000011011100: tran_sel = ( carry_bit) ? `TRAN_STK : `TRAN_IF;
1107
          12'b000011100100: tran_sel = (  !par_bit) ? `TRAN_STK : `TRAN_IF;
1108
          12'b000011101100: tran_sel = (   par_bit) ? `TRAN_STK : `TRAN_IF;
1109
          12'b000011110100: tran_sel = ( !sign_bit) ? `TRAN_STK : `TRAN_IF;
1110
          12'b000011111100: tran_sel = (  sign_bit) ? `TRAN_STK : `TRAN_IF;
1111
          default:          tran_sel = `TRAN_IDL;
1112
        endcase
1113
      end
1114
      `IF3B:                tran_sel = `TRAN_MEM;
1115
      `ADR2: begin
1116
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1117 8 bsa
          12'b000011010011,
1118
          12'b000011011011,
1119
          12'b1xxx00xxx000,
1120
          12'b1xxx00xxx001,
1121
          12'b1xxx01110100,
1122
          12'b1xxx01xxx000,
1123
          12'b1xxx01xxx001,
1124
          12'b1xxx10000010,
1125
          12'b1xxx10000100,
1126
          12'b1xxx10001010,
1127
          12'b1xxx10001100,
1128
          12'b1xxx10010010,
1129
          12'b1xxx10010100,
1130
          12'b1xxx10011010,
1131
          12'b1xxx10011100,
1132
          12'b1xxx10100010,
1133
          12'b1xxx10101010,
1134
          12'b1xxx10110010,
1135
          12'b1xxx10111010,
1136
          12'b1xxx11000010,
1137
          12'b1xxx11001010: tran_sel = `TRAN_IO;
1138
          12'b000011001001,
1139
          12'b000011xxx000,
1140
          12'b000011xxx111,
1141
          12'b000011xx0001,
1142
          12'b000011xx0101,
1143
          12'b010011100001,
1144
          12'b010011100101,
1145
          12'b010111100001,
1146
          12'b010111100101,
1147
          12'b1xxx01000101,
1148
          12'b1xxx01001101,
1149
          12'b1xxx01100101,
1150
          12'b1xxx01100110: tran_sel = `TRAN_STK;
1151 2 bsa
          default:          tran_sel = `TRAN_MEM;
1152
        endcase
1153
      end
1154
      `RD1B: begin
1155
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1156
          12'b1xxx10100001,
1157
          12'b1xxx10101001,
1158
          12'b1xxx10110001,
1159
          12'b1xxx10111001: tran_sel = `TRAN_IDL;
1160 8 bsa
          12'b1xxx10000011,
1161
          12'b1xxx10001011,
1162
          12'b1xxx10010011,
1163
          12'b1xxx10011011,
1164
          12'b1xxx10100011,
1165
          12'b1xxx10100100,
1166
          12'b1xxx10101011,
1167
          12'b1xxx10101100,
1168
          12'b1xxx10110011,
1169
          12'b1xxx10110100,
1170
          12'b1xxx10111011,
1171
          12'b1xxx10111100,
1172
          12'b1xxx11000011,
1173
          12'b1xxx11001011: tran_sel = `TRAN_IO;
1174
          12'b000011001001,
1175
          12'b000011xxx000,
1176
          12'b000011xx0001,
1177
          12'b010011100001,
1178
          12'b010111100001,
1179
          12'b1xxx01000101,
1180 2 bsa
          12'b1xxx01001101: tran_sel = `TRAN_STK;
1181
          default:          tran_sel = `TRAN_MEM;
1182
        endcase
1183
      end
1184
      `RD2B: begin
1185
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1186
          12'b000011001001,
1187
          12'b000011xxx000,
1188
          12'b1xxx01000101,
1189
          12'b1xxx01001101,
1190
          12'b1xxx10100001,
1191
          12'b1xxx10101001,
1192
          12'b1xxx10110001,
1193
          12'b1xxx10111001: tran_sel = `TRAN_IDL;
1194 8 bsa
          12'b000000001010,
1195
          12'b000000011010,
1196
          12'b000000101010,
1197
          12'b000000111010,
1198
          12'b000001xxx110,
1199
          12'b000010000110,
1200
          12'b000010001110,
1201
          12'b000010010110,
1202
          12'b000010011110,
1203
          12'b000010100110,
1204
          12'b000010101110,
1205
          12'b000010110110,
1206
          12'b000010111110,
1207
          12'b000011011011,
1208
          12'b000011xx0001,
1209
          12'b001001xxx110,
1210
          12'b010000101010,
1211
          12'b010000110001,
1212
          12'b010000110111,
1213
          12'b010000xx0111,
1214
          12'b010001xxx110,
1215
          12'b010010000110,
1216
          12'b010010001110,
1217
          12'b010010010110,
1218
          12'b010010011110,
1219
          12'b010010100110,
1220
          12'b010010101110,
1221
          12'b010010110110,
1222
          12'b010010111110,
1223
          12'b010011100001,
1224
          12'b010100101010,
1225
          12'b010100110001,
1226
          12'b010100110111,
1227
          12'b010100xx0111,
1228
          12'b010101xxx110,
1229
          12'b010110000110,
1230
          12'b010110001110,
1231
          12'b010110010110,
1232
          12'b010110011110,
1233
          12'b010110100110,
1234
          12'b010110101110,
1235
          12'b010110110110,
1236
          12'b010110111110,
1237
          12'b010111100001,
1238
          12'b011001xxx110,
1239
          12'b011101xxx110,
1240
          12'b1xxx00110100,
1241
          12'b1xxx00110110,
1242
          12'b1xxx00110111,
1243
          12'b1xxx00xx0111,
1244
          12'b1xxx00xxx000,
1245
          12'b1xxx01xxx000,
1246 2 bsa
          12'b1xxx01xx1011: tran_sel = `TRAN_IF;
1247 8 bsa
          12'b1xxx10000011,
1248
          12'b1xxx10001011,
1249
          12'b1xxx10010011,
1250
          12'b1xxx10011011,
1251
          12'b1xxx10100011,
1252
          12'b1xxx10100100,
1253
          12'b1xxx10101011,
1254
          12'b1xxx10101100,
1255
          12'b1xxx10110011,
1256
          12'b1xxx10110100,
1257
          12'b1xxx10111011,
1258
          12'b1xxx10111100,
1259
          12'b1xxx11000011,
1260
          12'b1xxx11001011: tran_sel = `TRAN_IO;
1261 2 bsa
          12'b000011100011,
1262
          12'b0001xxxxxxxx,
1263
          12'b010011100011,
1264
          12'b010111100011: tran_sel = `TRAN_STK;
1265
          default:          tran_sel = `TRAN_MEM;
1266
        endcase
1267
      end
1268
      `WR1B: begin
1269
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1270 8 bsa
          12'b1xxx10010010,
1271
          12'b1xxx10010100,
1272
          12'b1xxx10011010,
1273
          12'b1xxx10011100,
1274
          12'b1xxx10110010,
1275
          12'b1xxx10111010,
1276
          12'b1xxx11000010,
1277
          12'b1xxx11001010: tran_sel = (tflg_reg || intr_reg || dmar_reg) ? `TRAN_IDL : `TRAN_IO;
1278
          12'b1xxx10010011,
1279
          12'b1xxx10011011,
1280
          12'b1xxx10110000,
1281
          12'b1xxx10110011,
1282
          12'b1xxx10110100,
1283
          12'b1xxx10111000,
1284
          12'b1xxx10111011,
1285
          12'b1xxx10111100,
1286
          12'b1xxx11000011,
1287
          12'b1xxx11001011: tran_sel = (tflg_reg || intr_reg || dmar_reg) ? `TRAN_IDL : `TRAN_MEM;
1288
          12'b000000100010,
1289
          12'b010000100010,
1290
          12'b010000111110,
1291
          12'b010000111111,
1292
          12'b010000xx1111,
1293
          12'b010100100010,
1294
          12'b010100111110,
1295
          12'b010100111111,
1296
          12'b010100xx1111,
1297
          12'b1xxx00111110,
1298
          12'b1xxx00111111,
1299
          12'b1xxx00xx1111,
1300 2 bsa
          12'b1xxx01xx0011: tran_sel = `TRAN_MEM;
1301 8 bsa
          12'b000011001101,
1302
          12'b000011100011,
1303
          12'b000011xxx100,
1304
          12'b000011xxx111,
1305
          12'b000011xx0101,
1306
          12'b0001xxxxxxxx,
1307
          12'b010011100011,
1308
          12'b010011100101,
1309
          12'b010111100011,
1310
          12'b010111100101,
1311
          12'b1xxx01100101,
1312
          12'b1xxx01100110: tran_sel = `TRAN_STK;
1313
          default:          tran_sel = `TRAN_IF;
1314 2 bsa
        endcase
1315
      end
1316
      `WR2B: begin
1317
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1318 8 bsa
          12'b1xxx10010010,
1319
          12'b1xxx10010100,
1320
          12'b1xxx10011010,
1321
          12'b1xxx10011100,
1322
          12'b1xxx10110010,
1323
          12'b1xxx11000010,
1324
          12'b1xxx11001010,
1325 2 bsa
          12'b1xxx10111010: tran_sel = (tflg_reg || intr_reg || dmar_reg) ? `TRAN_IDL : `TRAN_IO;
1326 8 bsa
          12'b1xxx10010011,
1327
          12'b1xxx10011011,
1328
          12'b1xxx10110000,
1329
          12'b1xxx10110011,
1330
          12'b1xxx10110100,
1331
          12'b1xxx10111000,
1332
          12'b1xxx10111011,
1333
          12'b1xxx10111100,
1334
          12'b1xxx11000011,
1335
          12'b1xxx11001011: tran_sel = (tflg_reg || intr_reg || dmar_reg) ? `TRAN_IDL : `TRAN_MEM;
1336 2 bsa
          default:          tran_sel = `TRAN_IF;
1337
        endcase
1338
      end
1339
      `BLK2: begin
1340
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1341
          12'b1xxx10110001,
1342
          12'b1xxx10111001: tran_sel = (tflg_reg || intr_reg || dmar_reg) ? `TRAN_IDL : `TRAN_MEM;
1343
          default:          tran_sel = `TRAN_IF;
1344
        endcase
1345
      end
1346
      `PCO: begin
1347
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1348 6 bsa
          12'b000001110110,
1349
          12'b1xxx01110110: tran_sel = `TRAN_IDL;
1350 2 bsa
          default:          tran_sel = `TRAN_IF;
1351
          endcase
1352
        end
1353
      `IF1B: begin
1354
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1355
          12'b1xxx01000101,
1356
          12'b1xxx01001101,
1357
          12'b000011110011,
1358
          12'b0001xxxxxxxx: tran_sel = `TRAN_IF;
1359
          default:          tran_sel = (dmar_reg) ? `TRAN_IDL :
1360
                                       (intr_reg) ? `TRAN_IAK : `TRAN_IF;
1361
          endcase
1362
        end
1363 6 bsa
      `HLTB:                tran_sel = (xhlt_reg || (page_reg[3] && int_req))   ? `TRAN_IF  : `TRAN_IDL;
1364 2 bsa
      `INTB:                tran_sel = (vector_int) ? `TRAN_IDL : `TRAN_MEM;
1365
      `DMA2:                tran_sel = (dmar_reg)   ? `TRAN_IDL : `TRAN_IF;
1366
      `RSTE:                tran_sel = `TRAN_IF;
1367
      default:              tran_sel = `TRAN_RSTVAL;
1368
      endcase
1369
    end
1370
 
1371
  /*****************************************************************************************/
1372
  /*                                                                                       */
1373
  /*  special transaction identifiers                                                      */
1374
  /*                                                                                       */
1375
  /*****************************************************************************************/
1376
  always @ (inst_reg or page_reg or state_reg or xhlt_reg) begin
1377
    casex (state_reg)
1378
      `PCO,
1379
      `HLTB: begin
1380 6 bsa
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1381 2 bsa
          12'b000001110110: halt_nxt = !xhlt_reg;
1382 6 bsa
          12'b1xxx01110110: halt_nxt = !int_req;
1383 2 bsa
          default:          halt_nxt = 1'b0;
1384
          endcase
1385
        end
1386
      default:              halt_nxt = 1'b0;
1387
      endcase
1388
    end
1389
 
1390
  always @ (inst_reg or page_reg or state_reg) begin
1391
    casex (state_reg)
1392
      `RD2B: begin
1393
        casex ({page_reg, inst_reg})
1394
          12'b1xxx01001101: reti_nxt = 1'b1;
1395
          default:          reti_nxt = 1'b0;
1396
          endcase
1397
        end
1398
      default:              reti_nxt = 1'b0;
1399
      endcase
1400
    end
1401
 
1402
  /*****************************************************************************************/
1403
  /*                                                                                       */
1404
  /*  output inhibit                                                                       */
1405
  /*                                                                                       */
1406
  /*****************************************************************************************/
1407
  always @ (inst_reg or page_reg or state_reg or dmar_reg or xhlt_reg) begin
1408
    casex (state_reg)
1409
      `IF1B: begin
1410
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1411
          12'b1xxx01000101,
1412
          12'b1xxx01001101,
1413
          12'b000011110011,
1414
          12'b0001xxxxxxxx: output_inh = 1'b0;
1415
          default:          output_inh = dmar_reg;
1416
          endcase
1417
        end
1418
      `DMA2:                output_inh = dmar_reg;
1419
      `PCO,
1420
      `HLTB: begin
1421 6 bsa
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1422 2 bsa
          12'b000001110110: output_inh = !xhlt_reg;
1423 6 bsa
          12'b1xxx01110110: output_inh = !int_req;
1424 2 bsa
          default:          output_inh = 1'b0;
1425
          endcase
1426
        end
1427
      default:              output_inh = 1'b0;
1428
      endcase
1429
    end
1430
 
1431
  /*****************************************************************************************/
1432
  /*                                                                                       */
1433
  /*  address output control                                                               */
1434
  /*                                                                                       */
1435
  /*****************************************************************************************/
1436
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
1437
            vector_int or zero_bit) begin
1438
    casex (state_reg) //synopsys parallel_case
1439
      `DEC1: begin
1440
        casex (inst_reg) //synopsys parallel_case
1441
          8'b00000010,
1442
          8'b00001010,
1443
          8'b00010010,
1444
          8'b00011010,
1445
          8'b11101001,
1446
          8'b11xx0101,
1447
          8'b11xxx111:      add_sel = `ADD_ALU;
1448
          8'b00110100,
1449
          8'b00110101,
1450
          8'b00110110,
1451
          8'b011100xx,
1452
          8'b0111010x,
1453
          8'b01110111,
1454
          8'b010xx110,
1455
          8'b0110x110,
1456
          8'b01111110,
1457
          8'b10000110,
1458
          8'b10001110,
1459
          8'b10010110,
1460
          8'b10011110,
1461
          8'b10100110,
1462
          8'b10101110,
1463
          8'b10110110,
1464
          8'b10111110:      add_sel = `ADD_HL;
1465
          8'b11000000:      add_sel = ( !zero_bit) ? `ADD_SP : `ADD_PC;
1466
          8'b11001000:      add_sel = (  zero_bit) ? `ADD_SP : `ADD_PC;
1467
          8'b11010000:      add_sel = (!carry_bit) ? `ADD_SP : `ADD_PC;
1468
          8'b11011000:      add_sel = ( carry_bit) ? `ADD_SP : `ADD_PC;
1469
          8'b11100000:      add_sel = (  !par_bit) ? `ADD_SP : `ADD_PC;
1470
          8'b11101000:      add_sel = (   par_bit) ? `ADD_SP : `ADD_PC;
1471
          8'b11110000:      add_sel = ( !sign_bit) ? `ADD_SP : `ADD_PC;
1472
          8'b11111000:      add_sel = (  sign_bit) ? `ADD_SP : `ADD_PC;
1473
          8'b11xx0001,
1474
          8'b11100011,
1475
          8'b11001001:      add_sel = `ADD_SP;
1476
          default:          add_sel = `ADD_PC;
1477
          endcase
1478
        end
1479
      `DEC2: begin
1480
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1481 8 bsa
          12'b010011100101,
1482
          12'b010011101001,
1483
          12'b010111100101,
1484
          12'b010111101001,
1485
          12'b1xxx01xxx000,
1486
          12'b1xxx01xxx001,
1487
          12'b1xxx10000011,
1488
          12'b1xxx10000100,
1489
          12'b1xxx10001011,
1490
          12'b1xxx10001100,
1491
          12'b1xxx10010011,
1492
          12'b1xxx10010100,
1493
          12'b1xxx10011011,
1494
          12'b1xxx10011100,
1495
          12'b1xxx10100000,
1496
          12'b1xxx10100001,
1497
          12'b1xxx10100010,
1498
          12'b1xxx10100011,
1499
          12'b1xxx10101000,
1500
          12'b1xxx10101001,
1501
          12'b1xxx10101010,
1502
          12'b1xxx10101011,
1503
          12'b1xxx10110000,
1504
          12'b1xxx10110001,
1505
          12'b1xxx10110010,
1506
          12'b1xxx10110011,
1507
          12'b1xxx10110100,
1508
          12'b1xxx10111000,
1509
          12'b1xxx10111001,
1510
          12'b1xxx10111010,
1511
          12'b1xxx10111011,
1512
          12'b1xxx10111100,
1513
          12'b1xxx11000010,
1514
          12'b1xxx11000011,
1515
          12'b1xxx11001010,
1516
          12'b1xxx11001011: add_sel = `ADD_ALU;
1517
          12'b1xxx10000010,
1518
          12'b1xxx10001010,
1519
          12'b1xxx10010010,
1520
          12'b1xxx10011010: add_sel = `ADD_ALU8;
1521
          12'b001000000110,
1522
          12'b001000001110,
1523
          12'b001000010110,
1524
          12'b001000011110,
1525
          12'b001000100110,
1526
          12'b001000101110,
1527
          12'b001000110110,
1528
          12'b001000111110,
1529
          12'b001001xxx110,
1530
          12'b001010xxx110,
1531
          12'b001011xxx110,
1532
          12'b1xxx10100100,
1533
          12'b1xxx10101100,
1534
          12'b1xxx00110100,
1535
          12'b1xxx00110110,
1536
          12'b1xxx00110111,
1537
          12'b1xxx00111110,
1538
          12'b1xxx00111111,
1539
          12'b1xxx00xx0111,
1540
          12'b1xxx00xx1111,
1541
          12'b1xxx01100111,
1542 2 bsa
          12'b1xxx01101111: add_sel = `ADD_HL;
1543
          12'b010011100001,
1544
          12'b010011100011,
1545
          12'b010111100001,
1546
          12'b010111100011,
1547
          12'b1xxx01000101,
1548
          12'b1xxx01001101: add_sel = `ADD_SP;
1549
          default:          add_sel = `ADD_PC;
1550
        endcase
1551
      end
1552
      `OF2A: begin
1553
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1554
          12'b000011001101,
1555
          12'b010000110110,
1556
          12'b010100110110: add_sel = `ADD_ALU;
1557
          12'b000011000100: add_sel = ( !zero_bit) ? `ADD_ALU : `ADD_PC;
1558
          12'b000011001100: add_sel = (  zero_bit) ? `ADD_ALU : `ADD_PC;
1559
          12'b000011010100: add_sel = (!carry_bit) ? `ADD_ALU : `ADD_PC;
1560
          12'b000011011100: add_sel = ( carry_bit) ? `ADD_ALU : `ADD_PC;
1561
          12'b000011100100: add_sel = (  !par_bit) ? `ADD_ALU : `ADD_PC;
1562
          12'b000011101100: add_sel = (   par_bit) ? `ADD_ALU : `ADD_PC;
1563
          12'b000011110100: add_sel = ( !sign_bit) ? `ADD_ALU : `ADD_PC;
1564
          12'b000011111100: add_sel = (  sign_bit) ? `ADD_ALU : `ADD_PC;
1565
          default:          add_sel = `ADD_PC;
1566
        endcase
1567
      end
1568 6 bsa
      `IF3A:                add_sel = `ADD_ALU;
1569
      `ADR1: begin
1570
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1571
          12'b1xxx01110100,
1572
          12'b1xxx00xxx000,
1573
          12'b1xxx00xxx001: add_sel = `ADD_ALU8;
1574
          default:          add_sel = `ADD_ALU;
1575
        endcase
1576
      end
1577
      `RD1A: begin
1578
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1579
          12'b1xxx100xx011: add_sel = `ADD_ALU8;
1580
          default:          add_sel = `ADD_ALU;
1581
        endcase
1582
      end
1583 2 bsa
      `RD2A: begin
1584
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1585 8 bsa
          12'b000011100011,
1586
          12'b0001xxxxxxxx,
1587
          12'b010000110100,
1588
          12'b010000110101,
1589
          12'b010011100011,
1590
          12'b010100110100,
1591
          12'b010100110101,
1592
          12'b010111100011,
1593
          12'b011000000110,
1594
          12'b011000001110,
1595
          12'b011000010110,
1596
          12'b011000011110,
1597
          12'b011000100110,
1598
          12'b011000101110,
1599
          12'b011000110110,
1600
          12'b011000111110,
1601
          12'b011010xxx110,
1602
          12'b011011xxx110,
1603
          12'b011100000110,
1604
          12'b011100001110,
1605
          12'b011100010110,
1606
          12'b011100011110,
1607
          12'b011100100110,
1608
          12'b011100101110,
1609
          12'b011100110110,
1610
          12'b011100111110,
1611
          12'b011110xxx110,
1612
          12'b011111xxx110,
1613
          12'b1xxx10000010,
1614
          12'b1xxx10001010,
1615
          12'b1xxx10010010,
1616
          12'b1xxx10010100,
1617
          12'b1xxx10011010,
1618
          12'b1xxx10011100,
1619
          12'b1xxx10100000,
1620
          12'b1xxx10100001,
1621
          12'b1xxx10100010,
1622
          12'b1xxx10100011,
1623
          12'b1xxx10101000,
1624
          12'b1xxx10101001,
1625
          12'b1xxx10101010,
1626
          12'b1xxx10101011,
1627
          12'b1xxx10110000,
1628
          12'b1xxx10110001,
1629
          12'b1xxx10110010,
1630
          12'b1xxx10110011,
1631
          12'b1xxx10110100,
1632
          12'b1xxx10111000,
1633
          12'b1xxx10111001,
1634
          12'b1xxx10111010,
1635
          12'b1xxx10111011,
1636
          12'b1xxx10111100,
1637
          12'b1xxx11000010,
1638
          12'b1xxx11000011,
1639
          12'b1xxx11001010,
1640
          12'b1xxx11001011: add_sel = `ADD_ALU;
1641 6 bsa
          12'b1xxx100xx011: add_sel = `ADD_ALU8;
1642 8 bsa
          12'b000000110100,
1643
          12'b000000110101,
1644
          12'b000000xxx100,
1645
          12'b000000xxx101,
1646
          12'b001000000110,
1647
          12'b001000000xxx,
1648
          12'b001000001110,
1649
          12'b001000001xxx,
1650
          12'b001000010110,
1651
          12'b001000010xxx,
1652
          12'b001000011110,
1653
          12'b001000011xxx,
1654
          12'b001000100110,
1655
          12'b001000100xxx,
1656
          12'b001000101110,
1657
          12'b001000101xxx,
1658
          12'b001000110110,
1659
          12'b001000110xxx,
1660
          12'b001000111110,
1661
          12'b001000111xxx,
1662
          12'b001010xxx110,
1663
          12'b001010xxxxxx,
1664
          12'b001011xxx110,
1665
          12'b001011xxxxxx,
1666
          12'b1xxx01100111,
1667 2 bsa
          12'b1xxx01101111: add_sel = `ADD_HL;
1668
          default:          add_sel = `ADD_PC;
1669
        endcase
1670
      end
1671
      `WR1A: begin
1672
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1673 8 bsa
          12'b1xxx10010010,
1674
          12'b1xxx10011010: add_sel = `ADD_ALU8;
1675
          12'b1xxx10000010,
1676
          12'b1xxx10000011,
1677
          12'b1xxx10000100,
1678
          12'b1xxx10001010,
1679
          12'b1xxx10001011,
1680
          12'b1xxx10001100,
1681
          12'b1xxx10100000,
1682
          12'b1xxx10100010,
1683
          12'b1xxx10100011,
1684
          12'b1xxx10100100,
1685
          12'b1xxx10101000,
1686
          12'b1xxx10101010,
1687
          12'b1xxx10101011,
1688
          12'b1xxx10101100: add_sel = `ADD_PC;
1689 2 bsa
          default:          add_sel = `ADD_ALU;
1690
        endcase
1691
      end
1692
      `WR2A: begin
1693
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1694 8 bsa
          12'b000011001101,
1695
          12'b000011xxx100,
1696
          12'b000011xxx111,
1697
          12'b0001xxxxxxxx,
1698
          12'b1xxx10000011,
1699
          12'b1xxx10001011,
1700
          12'b1xxx10010011,
1701
          12'b1xxx10010100,
1702
          12'b1xxx10011011,
1703
          12'b1xxx10011100,
1704
          12'b1xxx10100000,
1705
          12'b1xxx10100010,
1706
          12'b1xxx10100011,
1707
          12'b1xxx10101000,
1708
          12'b1xxx10101010,
1709
          12'b1xxx10101011,
1710
          12'b1xxx10110000,
1711
          12'b1xxx10110010,
1712
          12'b1xxx10110011,
1713
          12'b1xxx10110100,
1714
          12'b1xxx10111000,
1715
          12'b1xxx10111010,
1716
          12'b1xxx10111011,
1717
          12'b1xxx10111100,
1718
          12'b1xxx11000010,
1719
          12'b1xxx11000011,
1720
          12'b1xxx11001010,
1721
          12'b1xxx11001011: add_sel = `ADD_ALU;
1722
          12'b1xxx10000010,
1723
          12'b1xxx10001010,
1724
          12'b1xxx10010010,
1725
          12'b1xxx10011010: add_sel = `ADD_ALU8;
1726 2 bsa
          default:          add_sel = `ADD_PC;
1727
        endcase
1728
      end
1729
      `BLK1: begin
1730
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1731
          12'b1xxx10110001,
1732 4 bsa
          12'b1xxx10111001: add_sel = `ADD_ALU;
1733 2 bsa
          default:          add_sel = `ADD_PC;
1734
        endcase
1735
      end
1736
      `PCA: begin
1737
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1738
          12'b000000010000,
1739
          12'b000000011000,
1740
          12'b0000001xx000,
1741
          12'b000011000011,
1742
          12'b000011001001,
1743
          12'b000011xxx000,
1744
          12'b000011xxx010,
1745
          12'b1xxx01000101,
1746
          12'b1xxx01001101: add_sel = `ADD_PC;
1747
          default:          add_sel = `ADD_ALU;
1748
        endcase
1749
      end
1750
      `IF1A:                add_sel = `ADD_PC;
1751
      `INTA:                add_sel = (vector_int) ? `ADD_PC : `ADD_ALU;
1752 6 bsa
      `HLTA:                add_sel = `ADD_PC;
1753 2 bsa
      `DMA1:                add_sel = `ADD_PC;
1754
      default:              add_sel = `ADD_RSTVAL;
1755
      endcase
1756
    end
1757
 
1758
  /*****************************************************************************************/
1759
  /*                                                                                       */
1760
  /*  program counter control                                                              */
1761
  /*                                                                                       */
1762
  /*****************************************************************************************/
1763
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
1764
            tflg_reg or zero_bit) begin
1765
    casex (state_reg) //synopsys parallel_case
1766
      `DEC1: begin
1767
        casex (inst_reg) //synopsys parallel_case
1768
          8'b00000000,
1769
          8'b00000111,
1770
          8'b00001000,
1771
          8'b00001111,
1772
          8'b00010111,
1773
          8'b00011111,
1774
          8'b00100111,
1775
          8'b00101111,
1776
          8'b00110111,
1777
          8'b00111111,
1778
          8'b000xx10x,
1779
          8'b0010x10x,
1780
          8'b0011110x,
1781
          8'b00xx0011,
1782
          8'b00xx1001,
1783
          8'b00xx1011,
1784
          8'b010xx0xx,
1785
          8'b0110x0xx,
1786
          8'b011110xx,
1787
          8'b010xx10x,
1788
          8'b0110x10x,
1789
          8'b0111110x,
1790
          8'b010xx111,
1791
          8'b0110x111,
1792
          8'b01111111,
1793
          8'b10xxx0xx,
1794
          8'b10xxx10x,
1795
          8'b10xxx111,
1796
          8'b11011001,
1797
          8'b11101011,
1798
          8'b11111001,
1799
          8'b11111011:      pc_sel = `PC_NILD;
1800
          8'b01110110,
1801
          8'b11xxx111,
1802
          8'b00000010,
1803
          8'b00001010,
1804
          8'b00010010,
1805
          8'b00011010,
1806
          8'b00110100,
1807
          8'b00110101,
1808
          8'b011100xx,
1809
          8'b0111010x,
1810
          8'b01110111,
1811
          8'b010xx110,
1812
          8'b0110x110,
1813
          8'b01111110,
1814
          8'b10000110,
1815
          8'b10001110,
1816
          8'b10010110,
1817
          8'b10011110,
1818
          8'b10100110,
1819
          8'b10101110,
1820
          8'b10110110,
1821
          8'b10111110,
1822
          8'b11xx0001,
1823
          8'b11xx0101,
1824
          8'b11100011:      pc_sel = `PC_NUL;
1825
          default:          pc_sel = `PC_LD;
1826
          endcase
1827
        end
1828
      `DEC2: begin
1829 6 bsa
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1830 8 bsa
          12'b001000000110,
1831
          12'b001000001110,
1832
          12'b001000010110,
1833
          12'b001000011110,
1834
          12'b001000100110,
1835
          12'b001000101110,
1836
          12'b001000110110,
1837
          12'b001000111110,
1838
          12'b001001xxx110,
1839
          12'b001010xxx110,
1840
          12'b001011xxx110,
1841
          12'b010011100001,
1842
          12'b010011100011,
1843
          12'b010011100101,
1844
          12'b010111100001,
1845
          12'b010111100011,
1846
          12'b010111100101,
1847
          12'b1xxx00110100,
1848
          12'b1xxx00110110,
1849
          12'b1xxx00110111,
1850
          12'b1xxx00111110,
1851
          12'b1xxx00111111,
1852
          12'b1xxx00xx0111,
1853
          12'b1xxx00xx1111,
1854
          12'b1xxx01100111,
1855
          12'b1xxx01101111,
1856
          12'b1xxx01110110,
1857
          12'b1xxx01xxx000,
1858
          12'b1xxx01xxx001,
1859
          12'b1xxx10000010,
1860
          12'b1xxx10000011,
1861
          12'b1xxx10000100,
1862
          12'b1xxx10001010,
1863
          12'b1xxx10001011,
1864
          12'b1xxx10001100,
1865
          12'b1xxx10010010,
1866
          12'b1xxx10010011,
1867
          12'b1xxx10010100,
1868
          12'b1xxx10011010,
1869
          12'b1xxx10011011,
1870
          12'b1xxx10011100,
1871
          12'b1xxx10100000,
1872
          12'b1xxx10100001,
1873
          12'b1xxx10100010,
1874
          12'b1xxx10100011,
1875
          12'b1xxx10100100,
1876
          12'b1xxx10101000,
1877
          12'b1xxx10101001,
1878
          12'b1xxx10101010,
1879
          12'b1xxx10101011,
1880
          12'b1xxx10101100,
1881
          12'b1xxx10110000,
1882
          12'b1xxx10110001,
1883
          12'b1xxx10110010,
1884
          12'b1xxx10110011,
1885
          12'b1xxx10110100,
1886
          12'b1xxx10111000,
1887
          12'b1xxx10111001,
1888
          12'b1xxx10111010,
1889
          12'b1xxx10111011,
1890
          12'b1xxx10111100,
1891
          12'b1xxx11000010,
1892
          12'b1xxx11000011,
1893
          12'b1xxx11001010,
1894
          12'b1xxx11001011: pc_sel = `PC_NUL;
1895
          12'b010000100001,
1896
          12'b010000100010,
1897
          12'b010000100110,
1898
          12'b010000101010,
1899
          12'b010000101110,
1900
          12'b010000110001,
1901
          12'b010000110100,
1902
          12'b010000110101,
1903
          12'b010000110110,
1904
          12'b010000110111,
1905
          12'b010000111110,
1906
          12'b010000111111,
1907
          12'b010000xx0111,
1908
          12'b010000xx1111,
1909
          12'b010001110xxx,
1910
          12'b010001xxx110,
1911
          12'b010010000110,
1912
          12'b010010001110,
1913
          12'b010010010110,
1914
          12'b010010011110,
1915
          12'b010010100110,
1916
          12'b010010101110,
1917
          12'b010010110110,
1918
          12'b010010111110,
1919
          12'b010011101001,
1920
          12'b010100100001,
1921
          12'b010100100010,
1922
          12'b010100100110,
1923
          12'b010100101010,
1924
          12'b010100101110,
1925
          12'b010100110001,
1926
          12'b010100110100,
1927
          12'b010100110101,
1928
          12'b010100110110,
1929
          12'b010100110111,
1930
          12'b010100111110,
1931
          12'b010100111111,
1932
          12'b010100xx0111,
1933
          12'b010100xx1111,
1934
          12'b010101110xxx,
1935
          12'b010101xxx110,
1936
          12'b010110000110,
1937
          12'b010110001110,
1938
          12'b010110010110,
1939
          12'b010110011110,
1940
          12'b010110100110,
1941
          12'b010110101110,
1942
          12'b010110110110,
1943
          12'b010110111110,
1944
          12'b010111101001,
1945
          12'b010011001011, //DD+CB prefix
1946
          12'b010111001011, //FD+CB prefix
1947
          12'b1xxx00110010,
1948
          12'b1xxx00110011,
1949
          12'b1xxx00xx0010,
1950
          12'b1xxx00xx0011,
1951
          12'b1xxx00xxx000,
1952
          12'b1xxx00xxx001,
1953
          12'b1xxx01000101,
1954
          12'b1xxx01001101,
1955
          12'b1xxx01010100,
1956
          12'b1xxx01010101,
1957
          12'b1xxx01100100,
1958
          12'b1xxx01100101,
1959
          12'b1xxx01100110,
1960
          12'b1xxx01110100,
1961
          12'b1xxx01xx1011,
1962
          12'b1xxx01xx0011: pc_sel = `PC_LD;
1963
          default:          pc_sel = `PC_NILD;
1964 2 bsa
        endcase
1965
      end
1966 8 bsa
      `OF2A,
1967
      `IF3A: pc_sel = `PC_LD;
1968 2 bsa
      `RD1B,
1969 8 bsa
      `RD2B: pc_sel = `PC_INT;
1970 6 bsa
      `WR2B: begin
1971
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1972
          12'b000011001101,
1973
          12'b000011xxx100,
1974
          12'b000011xxx111,
1975
          12'b0001xxxxxxxx: pc_sel = `PC_LD;
1976
          default:          pc_sel = `PC_NUL;
1977
        endcase
1978
      end
1979 2 bsa
      `PCA: begin
1980
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1981 4 bsa
          12'b000000010000: pc_sel = (tflg_reg) ? `PC_NUL : `PC_LD;
1982 2 bsa
          12'b000000011000,
1983
          12'b0000001xx000,
1984
          12'b000011000011,
1985
          12'b000011001001,
1986
          12'b000011xxx000,
1987
          12'b000011xxx010,
1988
          12'b1xxx01000101,
1989
          12'b1xxx01001101: pc_sel = `PC_LD;
1990
          default:          pc_sel = `PC_NUL;
1991
        endcase
1992
      end
1993
      `PCO: begin
1994
        casex ({page_reg, inst_reg}) //synopsys parallel_case
1995 8 bsa
          12'b000011101001,
1996
          12'b010011101001,
1997
          12'b010111101001,
1998
          12'b1xxx10010010,
1999
          12'b1xxx10010011,
2000
          12'b1xxx10010100,
2001
          12'b1xxx10011010,
2002
          12'b1xxx10011011,
2003
          12'b1xxx10011100,
2004
          12'b1xxx10110000,
2005
          12'b1xxx10110001,
2006
          12'b1xxx10110010,
2007
          12'b1xxx10110011,
2008
          12'b1xxx10110100,
2009
          12'b1xxx10111000,
2010
          12'b1xxx10111001,
2011
          12'b1xxx10111010,
2012
          12'b1xxx10111011,
2013
          12'b1xxx10111100,
2014
          12'b1xxx11000010,
2015
          12'b1xxx11000011,
2016
          12'b1xxx11001010,
2017
          12'b1xxx11001011: pc_sel = `PC_LD;
2018 2 bsa
          default:          pc_sel = `PC_NUL;
2019
        endcase
2020
      end
2021
      `IF1A: begin
2022
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2023 8 bsa
          12'b0001xxxxxxxx,
2024 2 bsa
          12'b1xxx01000101,
2025 8 bsa
          12'b1xxx01001101: pc_sel = `PC_LD;
2026
          12'b1xxx10010010,
2027
          12'b1xxx10010011,
2028
          12'b1xxx10010100,
2029
          12'b1xxx10011010,
2030
          12'b1xxx10011011,
2031
          12'b1xxx10011100,
2032
          12'b1xxx10110000,
2033
          12'b1xxx10110001,
2034
          12'b1xxx10110010,
2035
          12'b1xxx10110011,
2036
          12'b1xxx10110100,
2037
          12'b1xxx10111000,
2038
          12'b1xxx10111001,
2039
          12'b1xxx10111010,
2040
          12'b1xxx10111011,
2041
          12'b1xxx10111100,
2042
          12'b1xxx11000010,
2043
          12'b1xxx11000011,
2044
          12'b1xxx11001010,
2045
          12'b1xxx11001011: pc_sel = `PC_NILD2;
2046 2 bsa
          default:          pc_sel = `PC_NILD;
2047
          endcase
2048
        end
2049
      `HLTA:                pc_sel = `PC_INT;
2050
      `DMA1:                pc_sel = `PC_DMA;
2051
      default:              pc_sel = `PC_NUL;
2052
      endcase
2053
    end
2054
 
2055
  /*****************************************************************************************/
2056
  /*                                                                                       */
2057
  /*  interrupt ack and dma ack                                                            */
2058
  /*                                                                                       */
2059
  /*****************************************************************************************/
2060
  always @ (inst_reg or page_reg or state_reg) begin
2061
    casex (state_reg) //synopsys parallel_case
2062
      `IF1B: begin
2063
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2064
          12'b1xxx01000101,
2065
          12'b1xxx01001101,
2066
          12'b000011110011,
2067
          12'b0001xxxxxxxx: ld_inta = 1'b0;
2068
          default:          ld_inta = 1'b1;
2069
          endcase
2070
        end
2071
      default:              ld_inta = 1'b0;
2072
      endcase
2073
    end
2074
 
2075
  always @ (inst_reg or page_reg or state_reg) begin
2076
    casex (state_reg) //synopsys parallel_case
2077
      `IF1B: begin
2078
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2079
          12'b1xxx01000101,
2080
          12'b1xxx01001101,
2081
          12'b000011110011,
2082
          12'b0001xxxxxxxx: ld_dmaa = 1'b0;
2083
          default:          ld_dmaa = 1'b1;
2084
          endcase
2085
        end
2086
      `HLTB,
2087
      `DMA2:                ld_dmaa = 1'b1;
2088
      default:              ld_dmaa = 1'b0;
2089
      endcase
2090
    end
2091
 
2092
  /*****************************************************************************************/
2093
  /*                                                                                       */
2094
  /*  data input register control                                                          */
2095
  /*                                                                                       */
2096
  /*****************************************************************************************/
2097
  always @ (inst_reg or page_reg or state_reg) begin
2098
    casex (state_reg) //synopsys parallel_case
2099
      `OF1B:                di_ctl = `DI_DI10;
2100
      `OF2B: begin
2101
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2102
          12'b010000110110,
2103
          12'b010100110110: di_ctl = `DI_DI0;
2104
          default:          di_ctl = `DI_DI1;
2105
          endcase
2106
        end
2107
      `RD1B:                di_ctl = `DI_DI0;
2108
      `RD2B: begin
2109
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2110 8 bsa
          12'b000000101010,
2111
          12'b000011001001,
2112
          12'b000011100011,
2113
          12'b000011xxx000,
2114
          12'b000011xx0001,
2115
          12'b0001xxxxxxxx,
2116
          12'b010000101010,
2117
          12'b010000110001,
2118
          12'b010000110111,
2119
          12'b010000xx0111,
2120
          12'b010011100001,
2121
          12'b010011100011,
2122
          12'b010100101010,
2123
          12'b010100110001,
2124
          12'b010100110111,
2125
          12'b010100xx0111,
2126
          12'b010111100001,
2127
          12'b010111100011,
2128
          12'b1xxx00110110,
2129
          12'b1xxx00110111,
2130
          12'b1xxx00xx0111,
2131
          12'b1xxx01000101,
2132
          12'b1xxx01001101,
2133
          12'b1xxx01xx1011: di_ctl = `DI_DI1;
2134 2 bsa
          default:          di_ctl = `DI_DI0;
2135
          endcase
2136
        end
2137
      `INTB:                di_ctl = `DI_DI0;
2138
      default:              di_ctl = `DI_NUL;
2139
      endcase
2140
    end
2141
 
2142
  /*****************************************************************************************/
2143
  /*                                                                                       */
2144
  /*  data output register control                                                         */
2145
  /*                                                                                       */
2146
  /*****************************************************************************************/
2147
  always @ (inst_reg or page_reg or state_reg) begin
2148
    casex (state_reg) //synopsys parallel_case
2149
      `WR1A: begin
2150
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2151 8 bsa
          12'b000011001101,
2152
          12'b000011xxx100,
2153
          12'b000011xx0101,
2154
          12'b000011xxx111,
2155
          12'b0001xxxxxxxx,
2156
          12'b010011100101,
2157
          12'b010111100101,
2158
          12'b1xxx01100101,
2159
          12'b1xxx01100110: do_ctl = `DO_MSB;
2160
          12'b1xxx10000011,
2161
          12'b1xxx10001011,
2162
          12'b1xxx10010011,
2163
          12'b1xxx10011011,
2164
          12'b1xxx10100011,
2165
          12'b1xxx10100100,
2166
          12'b1xxx10101011,
2167
          12'b1xxx10101100,
2168
          12'b1xxx10110011,
2169
          12'b1xxx10110100,
2170
          12'b1xxx10111011,
2171
          12'b1xxx10111100,
2172
          12'b1xxx11000011,
2173
          12'b1xxx11001011: do_ctl = `DO_IO;
2174 2 bsa
          default:          do_ctl = `DO_LSB;
2175
          endcase
2176
        end
2177
      `WR2A: begin
2178
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2179 8 bsa
          12'b000000100010,
2180
          12'b000011100011,
2181
          12'b010000100010,
2182
          12'b010000111110,
2183
          12'b010000111111,
2184
          12'b010000xx1111,
2185
          12'b010011100011,
2186
          12'b010100100010,
2187
          12'b010100111110,
2188
          12'b010100111111,
2189
          12'b010100xx1111,
2190
          12'b010111100011,
2191
          12'b1xxx00111110,
2192
          12'b1xxx00111111,
2193
          12'b1xxx00xx1111,
2194 2 bsa
          12'b1xxx01xx0011: do_ctl = `DO_MSB;
2195 8 bsa
          12'b000011010011,
2196
          12'b1xxx00xxx001,
2197
          12'b1xxx01xxx001,
2198
          12'b1xxx10000011,
2199
          12'b1xxx10001011,
2200
          12'b1xxx10010011,
2201
          12'b1xxx10011011,
2202
          12'b1xxx10100011,
2203
          12'b1xxx10101011,
2204
          12'b1xxx10110011,
2205
          12'b1xxx10110100,
2206
          12'b1xxx10111100,
2207
          12'b1xxx11000011,
2208
          12'b1xxx11001011,
2209 2 bsa
          12'b1xxx10111011: do_ctl = `DO_IO;
2210
          default:          do_ctl = `DO_LSB;
2211
          endcase
2212
        end
2213
      default:              do_ctl = `DO_NUL;
2214
      endcase
2215
    end
2216
 
2217
  /*****************************************************************************************/
2218
  /*                                                                                       */
2219
  /*  alu operation control                                                                */
2220
  /*                                                                                       */
2221
  /*****************************************************************************************/
2222
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
2223
            zero_bit) begin
2224
    casex (state_reg) //synopsys parallel_case
2225
      `DEC1: begin
2226
        casex (inst_reg) //synopsys parallel_case
2227
          8'b00xx0011,
2228
          8'b00xx1001,
2229
          8'b00xx1011,
2230
          8'b11100011,
2231
          8'b11xx0101,
2232
          8'b11xxx111:      aluop_sel = `ALUOP_ADD;
2233
          8'b10001xxx:      aluop_sel = `ALUOP_BADC;
2234
          8'b00010000,
2235
          8'b00xxx100,
2236
          8'b10000xxx:      aluop_sel = `ALUOP_BADD;
2237
          8'b10100xxx:      aluop_sel = `ALUOP_BAND;
2238
          8'b00xxx101:      aluop_sel = `ALUOP_BDEC;
2239
          8'b10110xxx:      aluop_sel = `ALUOP_BOR;
2240
          8'b10011xxx:      aluop_sel = `ALUOP_BSBC;
2241
          8'b10010xxx,
2242
          8'b10111xxx:      aluop_sel = `ALUOP_BSUB;
2243
          8'b00101111,
2244
          8'b10101xxx:      aluop_sel = `ALUOP_BXOR;
2245
          8'b00111111:      aluop_sel = `ALUOP_CCF;
2246
          8'b00100111:      aluop_sel = `ALUOP_DAA;
2247
          8'b00010111:      aluop_sel = `ALUOP_RLA;
2248
          8'b00000111:      aluop_sel = `ALUOP_RLCA;
2249
          8'b00011111:      aluop_sel = `ALUOP_RRA;
2250
          8'b00001111:      aluop_sel = `ALUOP_RRCA;
2251
          8'b00110111:      aluop_sel = `ALUOP_SCF;
2252
          default:          aluop_sel = `ALUOP_PASS;
2253
          endcase
2254
        end
2255
      `IF2B:                aluop_sel = `ALUOP_ADD;
2256
      `DEC2: begin
2257
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2258
          12'b1xxx01xx1010:  aluop_sel = `ALUOP_ADC;
2259 8 bsa
          12'b1xxx10100100,
2260
          12'b1xxx10101100,
2261 2 bsa
          12'b010000100011,
2262
          12'b010000101011,
2263
          12'b010000xx1001,
2264
          12'b010011100101,
2265
          12'b010100100011,
2266
          12'b010100101011,
2267
          12'b010100xx1001,
2268 4 bsa
          12'b010111100101: aluop_sel = `ALUOP_ADD;
2269 2 bsa
          12'b1xxx01010111,
2270 4 bsa
          12'b1xxx01011111: aluop_sel = `ALUOP_APAS;
2271 6 bsa
          12'b010010001100,
2272
          12'b010010001101,
2273
          12'b010110001100,
2274
          12'b010110001101: aluop_sel = `ALUOP_BADC;
2275
          12'b010010000100,
2276
          12'b010010000101,
2277
          12'b010110000100,
2278
          12'b010110000101,
2279
          12'b010000100100,
2280
          12'b010000101100,
2281
          12'b010100100100,
2282
          12'b010100101100: aluop_sel = `ALUOP_BADD;
2283
          12'b010010100100,
2284
          12'b010010100101,
2285
          12'b010110100100,
2286
          12'b010110100101,
2287 2 bsa
          12'b001001xxxxxx,
2288 6 bsa
          12'b001010xxxxxx,
2289
          12'b1xxx00xxx100: aluop_sel = `ALUOP_BAND;
2290
          12'b010000100101,
2291
          12'b010000101101,
2292
          12'b010100100101,
2293
          12'b010100101101: aluop_sel = `ALUOP_BDEC;
2294
          12'b010010110100,
2295
          12'b010010110101,
2296
          12'b010110110100,
2297
          12'b010110110101,
2298 2 bsa
          12'b001011xxxxxx: aluop_sel = `ALUOP_BOR;
2299 6 bsa
          12'b010010011100,
2300
          12'b010010011101,
2301
          12'b010110011100,
2302
          12'b010110011101: aluop_sel = `ALUOP_BSBC;
2303
          12'b010010111100,
2304
          12'b010010111101,
2305
          12'b010110111100,
2306
          12'b010110111101,
2307
          12'b010010010100,
2308
          12'b010010010101,
2309
          12'b010110010100,
2310
          12'b010110010101,
2311 2 bsa
          12'b1xxx01000100: aluop_sel = `ALUOP_BSUB;
2312 6 bsa
          12'b010010101100,
2313
          12'b010010101101,
2314
          12'b010110101100,
2315
          12'b010110101101: aluop_sel = `ALUOP_BXOR;
2316
          12'b1xxx01xx1100: aluop_sel = `ALUOP_MLT;
2317 2 bsa
          12'b001000010xxx: aluop_sel = `ALUOP_RL;
2318
          12'b001000000xxx: aluop_sel = `ALUOP_RLC;
2319
          12'b001000011xxx: aluop_sel = `ALUOP_RR;
2320
          12'b001000001xxx: aluop_sel = `ALUOP_RRC;
2321
          12'b1xxx01xx0010: aluop_sel = `ALUOP_SBC;
2322
          12'b001000100xxx: aluop_sel = `ALUOP_SLA;
2323 6 bsa
          12'b001000110xxx: aluop_sel = `ALUOP_SLL;
2324 2 bsa
          12'b001000101xxx: aluop_sel = `ALUOP_SRA;
2325
          12'b001000111xxx: aluop_sel = `ALUOP_SRL;
2326
          default:          aluop_sel = `ALUOP_PASS;
2327
        endcase
2328
      end
2329
      `OF1B: begin
2330
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2331
          12'b000000100000: aluop_sel = ( !zero_bit) ? `ALUOP_ADS : `ALUOP_ADD;
2332
          12'b000000101000: aluop_sel = (  zero_bit) ? `ALUOP_ADS : `ALUOP_ADD;
2333
          12'b000000110000: aluop_sel = (!carry_bit) ? `ALUOP_ADS : `ALUOP_ADD;
2334
          12'b000000111000: aluop_sel = ( carry_bit) ? `ALUOP_ADS : `ALUOP_ADD;
2335
          12'b000000010000,
2336
          12'b000000011000: aluop_sel = `ALUOP_ADS;
2337 6 bsa
          12'b1xxx01110100,
2338 2 bsa
          12'b000000110110: aluop_sel = `ALUOP_PASS;
2339
          default:          aluop_sel = `ALUOP_ADD;
2340
        endcase
2341
      end
2342
      `OF2A: begin
2343
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2344
          12'b010000110110,
2345
          12'b010100110110: aluop_sel = `ALUOP_ADS;
2346
          default:          aluop_sel = `ALUOP_ADD;
2347
        endcase
2348
      end
2349
      `OF2B: begin
2350
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2351
          12'b000000xx0001,
2352
          12'b010000100001,
2353
          12'b010100100001: aluop_sel = `ALUOP_ADD;
2354
          12'b000011000010,
2355
          12'b000011000100: aluop_sel = ( !zero_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2356
          12'b000011001010,
2357
          12'b000011001100: aluop_sel = (  zero_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2358
          12'b000011010010,
2359
          12'b000011010100: aluop_sel = (!carry_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2360
          12'b000011011010,
2361
          12'b000011011100: aluop_sel = ( carry_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2362
          12'b000011100010,
2363
          12'b000011100100: aluop_sel = (  !par_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2364
          12'b000011101010,
2365
          12'b000011101100: aluop_sel = (   par_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2366
          12'b000011110010,
2367
          12'b000011110100: aluop_sel = ( !sign_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2368
          12'b000011111010,
2369
          12'b000011111100: aluop_sel = (  sign_bit) ? `ALUOP_PASS : `ALUOP_ADD;
2370
          default:          aluop_sel = `ALUOP_PASS;
2371
        endcase
2372
      end
2373
      `IF3A:                aluop_sel = `ALUOP_ADS;
2374
      `ADR1: begin
2375
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2376 8 bsa
          12'b1xxx01100101,
2377
          12'b1xxx01100110: aluop_sel = `ALUOP_ADD;
2378
          12'b000000100010,
2379
          12'b000000101010,
2380
          12'b000000110010,
2381
          12'b000000111010,
2382
          12'b000011010011,
2383
          12'b000011011011,
2384
          12'b0001xxxxxxxx,
2385
          12'b010000100010,
2386
          12'b010000101010,
2387
          12'b010100100010,
2388
          12'b010100101010,
2389
          12'b1xxx00xxx000,
2390
          12'b1xxx00xxx001,
2391
          12'b1xxx01110100,
2392
          12'b1xxx01xx1011,
2393
          12'b1xxx01xx0011: aluop_sel = `ALUOP_PASS;
2394 2 bsa
          default:          aluop_sel = `ALUOP_ADS;
2395
        endcase
2396
      end
2397
      `ADR2: begin
2398
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2399 8 bsa
          12'b1xxx10010100,
2400
          12'b1xxx10011100,
2401
          12'b1xxx10100000,
2402
          12'b1xxx10100001,
2403
          12'b1xxx10101000,
2404
          12'b1xxx10101001,
2405
          12'b1xxx10110000,
2406
          12'b1xxx10110001,
2407
          12'b1xxx10110100,
2408
          12'b1xxx10111000,
2409
          12'b1xxx10111001,
2410
          12'b1xxx10111100,
2411
          12'b1xxx11000010,
2412
          12'b1xxx11000011,
2413
          12'b1xxx11001010,
2414
          12'b1xxx11001011: aluop_sel = `ALUOP_ADD;
2415
          12'b1xxx01100101,
2416
          12'b1xxx01100110: aluop_sel = `ALUOP_ADS;
2417
          12'b1xxx10000010,
2418
          12'b1xxx10000011,
2419
          12'b1xxx10000100,
2420
          12'b1xxx10001010,
2421
          12'b1xxx10001011,
2422
          12'b1xxx10001100,
2423
          12'b1xxx10010010,
2424
          12'b1xxx10010011,
2425
          12'b1xxx10011010,
2426
          12'b1xxx10011011,
2427
          12'b1xxx10100010,
2428
          12'b1xxx10101010,
2429
          12'b1xxx10110010,
2430 2 bsa
          12'b1xxx10111010: aluop_sel = `ALUOP_BADD;
2431 8 bsa
          12'b1xxx10100100,
2432
          12'b1xxx10101100,
2433 2 bsa
          12'b1xxx10100011,
2434
          12'b1xxx10101011,
2435
          12'b1xxx10110011,
2436
          12'b1xxx10111011: aluop_sel = `ALUOP_BAND;
2437
          default:          aluop_sel = `ALUOP_PASS;
2438
        endcase
2439
      end
2440
      `RD1A: begin
2441
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2442 8 bsa
          12'b000000101010,
2443
          12'b000011001001,
2444
          12'b000011100011,
2445
          12'b000011xxx000,
2446
          12'b000011xx0001,
2447
          12'b0001xxxxxxxx,
2448
          12'b010000101010,
2449
          12'b010000110001,
2450
          12'b010000110111,
2451
          12'b010000xx0111,
2452
          12'b010011100001,
2453
          12'b010011100011,
2454
          12'b010100101010,
2455
          12'b010100110001,
2456
          12'b010100110111,
2457
          12'b010100xx0111,
2458
          12'b010111100001,
2459
          12'b010111100011,
2460
          12'b1xxx00110110,
2461
          12'b1xxx00110111,
2462
          12'b1xxx00xx0111,
2463
          12'b1xxx01000101,
2464
          12'b1xxx01001101,
2465
          12'b1xxx01xx1011: aluop_sel = `ALUOP_ADD;
2466
          default:          aluop_sel = `ALUOP_PASS;
2467 2 bsa
        endcase
2468
      end
2469
      `RD1B: begin
2470
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2471 8 bsa
          12'b1xxx10100010,
2472
          12'b1xxx10100011,
2473
          12'b1xxx10101010,
2474
          12'b1xxx10101011,
2475
          12'b1xxx10110010,
2476
          12'b1xxx10110011,
2477
          12'b1xxx10111010,
2478
          12'b1xxx10111011: aluop_sel = `ALUOP_BAND;
2479 2 bsa
          12'b1xxx10100001,
2480
          12'b1xxx10101001,
2481
          12'b1xxx10110001,
2482
          12'b1xxx10111001: aluop_sel = `ALUOP_BSUB;
2483 8 bsa
          default:          aluop_sel = `ALUOP_PASS;
2484 2 bsa
        endcase
2485
      end
2486
      `RD2A: begin
2487
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2488 8 bsa
          12'b000011001001,
2489
          12'b000011xxx000,
2490
          12'b000011xx0001,
2491
          12'b0001xxxxxxxx,
2492
          12'b010011100001,
2493
          12'b010111100001,
2494
          12'b1xxx01000101,
2495
          12'b1xxx01001101,
2496
          12'b1xxx10000010,
2497
          12'b1xxx10000100,
2498
          12'b1xxx10001010,
2499
          12'b1xxx10001100,
2500
          12'b1xxx10010010,
2501
          12'b1xxx10010100,
2502
          12'b1xxx10011010,
2503
          12'b1xxx10011100,
2504
          12'b1xxx10100000,
2505
          12'b1xxx10100010,
2506
          12'b1xxx10100100,
2507
          12'b1xxx10101000,
2508
          12'b1xxx10101010,
2509
          12'b1xxx10101100,
2510
          12'b1xxx10110000,
2511
          12'b1xxx10110010,
2512
          12'b1xxx10110100,
2513
          12'b1xxx10111000,
2514
          12'b1xxx10111010,
2515
          12'b1xxx10111100,
2516
          12'b1xxx11000010,
2517
          12'b1xxx11001010: aluop_sel = `ALUOP_ADD;
2518
          12'b1xxx10000011,
2519
          12'b1xxx10001011,
2520
          12'b1xxx10010011,
2521
          12'b1xxx10011011: aluop_sel = `ALUOP_BADD;
2522 2 bsa
          default:          aluop_sel = `ALUOP_PASS;
2523
        endcase
2524
      end
2525
      `RD2B: begin
2526
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2527 8 bsa
          12'b000000110100,
2528
          12'b000000xxx100,
2529
          12'b010000110100,
2530 2 bsa
          12'b010100110100: aluop_sel = `ALUOP_BADD;
2531 8 bsa
          12'b001010xxx110,
2532
          12'b001010xxxxxx,
2533
          12'b011010xxx110,
2534
          12'b011110xxx110,
2535
          12'b1xxx10100010,
2536
          12'b1xxx10100011,
2537
          12'b1xxx10101010,
2538
          12'b1xxx10101011,
2539
          12'b1xxx10110010,
2540
          12'b1xxx10110011,
2541
          12'b1xxx10111010,
2542 2 bsa
          12'b1xxx10111011: aluop_sel = `ALUOP_BAND;
2543 8 bsa
          12'b000000110101,
2544
          12'b000000xxx101,
2545
          12'b010000110101,
2546 2 bsa
          12'b010100110101: aluop_sel = `ALUOP_BDEC;
2547 8 bsa
          12'b001011xxx110,
2548
          12'b001011xxxxxx,
2549
          12'b011011xxx110,
2550
          12'b011111xxx110: aluop_sel = `ALUOP_BOR;
2551
          12'b1xxx10100001,
2552
          12'b1xxx10101001,
2553
          12'b1xxx10110001,
2554 2 bsa
          12'b1xxx10111001: aluop_sel = `ALUOP_BSUB;
2555 8 bsa
          12'b000011001001,
2556
          12'b000011100011,
2557
          12'b000011xxx000,
2558
          12'b0001xxxxxxxx,
2559
          12'b010011100011,
2560
          12'b010111100011,
2561
          12'b1xxx01000101,
2562
          12'b1xxx01001101,
2563
          12'b1xxx10000010,
2564
          12'b1xxx10000011,
2565
          12'b1xxx10000100,
2566
          12'b1xxx10001010,
2567
          12'b1xxx10001011,
2568
          12'b1xxx10001100,
2569
          12'b1xxx10010010,
2570
          12'b1xxx10010011,
2571
          12'b1xxx10010100,
2572
          12'b1xxx10011010,
2573
          12'b1xxx10011011,
2574
          12'b1xxx10011100,
2575
          12'b1xxx10100000,
2576
          12'b1xxx10100100,
2577
          12'b1xxx10101000,
2578
          12'b1xxx10101100,
2579
          12'b1xxx10110000,
2580
          12'b1xxx10110100,
2581
          12'b1xxx10111000,
2582
          12'b1xxx10111100,
2583
          12'b1xxx11000010,
2584
          12'b1xxx11000011,
2585
          12'b1xxx11001010,
2586
          12'b1xxx11001011: aluop_sel = `ALUOP_PASS;
2587 4 bsa
          12'b0x1x00000xxx: aluop_sel = `ALUOP_RLC;
2588 6 bsa
          12'b0x1x00001xxx: aluop_sel = `ALUOP_RRC;
2589
          12'b0x1x00010xxx: aluop_sel = `ALUOP_RL;
2590 4 bsa
          12'b0x1x00011xxx: aluop_sel = `ALUOP_RR;
2591
          12'b0x1x00100xxx: aluop_sel = `ALUOP_SLA;
2592 6 bsa
          12'b0x1x00101xxx: aluop_sel = `ALUOP_SRA;
2593
          12'b0x1x00110xxx: aluop_sel = `ALUOP_SLL;
2594 4 bsa
          12'b0x1x00111xxx: aluop_sel = `ALUOP_SRL;
2595 6 bsa
          12'b1xxx01101111: aluop_sel = `ALUOP_RLD1;
2596
          12'b1xxx01100111: aluop_sel = `ALUOP_RRD1;
2597 2 bsa
          default:          aluop_sel = `ALUOP_ADD;
2598
        endcase
2599
      end
2600
      `WR1A: begin
2601
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2602
          12'b1xxx10100010,
2603
          12'b1xxx10101010,
2604
          12'b1xxx10110010,
2605 8 bsa
          12'b1xxx10111010,
2606
          12'b1xxx11000010,
2607
          12'b1xxx11001010: aluop_sel = `ALUOP_PASS;
2608
          12'b1xxx10100100,
2609
          12'b1xxx10101100: aluop_sel = `ALUOP_BADD;
2610 2 bsa
          default:          aluop_sel = `ALUOP_ADD;
2611
        endcase
2612
      end
2613
      `WR1B: begin
2614
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2615 8 bsa
          12'b1xxx10011011,
2616
          12'b1xxx10010011,
2617
          12'b1xxx10000010,
2618
          12'b1xxx10000100,
2619
          12'b1xxx10001010,
2620
          12'b1xxx10001100,
2621
          12'b1xxx10010100,
2622
          12'b1xxx10011100,
2623
          12'b1xxx10100100,
2624
          12'b1xxx10101100,
2625
          12'b1xxx11000010,
2626
          12'b1xxx11000011,
2627
          12'b1xxx11001010,
2628
          12'b1xxx11001011,
2629 2 bsa
          12'b1xxx10100000,
2630
          12'b1xxx10100010,
2631
          12'b1xxx10100011,
2632
          12'b1xxx10101000,
2633
          12'b1xxx10101010,
2634
          12'b1xxx10101011,
2635
          12'b1xxx10110000,
2636 8 bsa
          12'b1xxx10110100,
2637
          12'b1xxx10111100,
2638 2 bsa
          12'b1xxx10111000: aluop_sel = `ALUOP_ADD;
2639 8 bsa
          12'b1xxx10001011,
2640
          12'b1xxx10000011,
2641
          12'b1xxx10010010,
2642
          12'b1xxx10011010,
2643 2 bsa
          12'b1xxx10110010,
2644
          12'b1xxx10110011,
2645
          12'b1xxx10111010,
2646
          12'b1xxx10111011: aluop_sel = `ALUOP_BADD;
2647
          default:          aluop_sel = `ALUOP_PASS;
2648
        endcase
2649
      end
2650
      `WR2A: begin
2651
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2652 6 bsa
          12'b1xxx100xx011,
2653 8 bsa
          12'b1xxx10010100,
2654
          12'b1xxx10011100,
2655
          12'b1xxx10110100,
2656
          12'b1xxx10111100,
2657
          12'b1xxx11000011,
2658
          12'b1xxx11001011,
2659 2 bsa
          12'b1xxx10100000,
2660
          12'b1xxx10100011,
2661
          12'b1xxx10101000,
2662
          12'b1xxx10101011,
2663
          12'b1xxx10110000,
2664
          12'b1xxx10110011,
2665
          12'b1xxx10111000,
2666
          12'b1xxx10111011: aluop_sel = `ALUOP_ADD;
2667
          12'b000011xxx111,
2668
          12'b0001xxxxxxxx: aluop_sel = `ALUOP_APAS;
2669 8 bsa
          12'b1xxx10000010,
2670
          12'b1xxx10000100,
2671
          12'b1xxx10001010,
2672
          12'b1xxx10001100,
2673
          12'b1xxx10010010,
2674
          12'b1xxx10011010,
2675
          12'b1xxx10100100,
2676
          12'b1xxx10101100: aluop_sel = `ALUOP_BADD;
2677 2 bsa
          default:          aluop_sel = `ALUOP_PASS;
2678
        endcase
2679
      end
2680
      `WR2B: begin
2681
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2682 6 bsa
          12'b1xxx100xx011,
2683 8 bsa
          12'b1xxx10000010,
2684
          12'b1xxx10000100,
2685
          12'b1xxx10001010,
2686
          12'b1xxx10001100,
2687
          12'b1xxx10010010,
2688
          12'b1xxx10011010,
2689
          12'b1xxx10100100,
2690
          12'b1xxx10101100,
2691 2 bsa
          12'b1xxx10100010,
2692
          12'b1xxx10100011,
2693
          12'b1xxx10101010,
2694
          12'b1xxx10101011,
2695
          12'b1xxx10110010,
2696
          12'b1xxx10110011,
2697
          12'b1xxx10111010,
2698
          12'b1xxx10111011: aluop_sel = `ALUOP_BADD;
2699
          default:          aluop_sel = `ALUOP_ADD;
2700
        endcase
2701
      end
2702 8 bsa
      `PCA,
2703
      `PCO:                 aluop_sel = `ALUOP_ADD;
2704 2 bsa
      `IF1A: begin
2705
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2706 8 bsa
          12'b1xxx10000010,
2707
          12'b1xxx10000100,
2708
          12'b1xxx10001010,
2709
          12'b1xxx10001100,
2710
          12'b1xxx10010010,
2711
          12'b1xxx10010100,
2712
          12'b1xxx10011010,
2713
          12'b1xxx10011100,
2714 2 bsa
          12'b1xxx10100000,
2715
          12'b1xxx10100010,
2716
          12'b1xxx10101000,
2717
          12'b1xxx10101010,
2718
          12'b1xxx10110000,
2719
          12'b1xxx10110010,
2720 8 bsa
          12'b1xxx10110100,
2721 2 bsa
          12'b1xxx10111000,
2722 8 bsa
          12'b1xxx10111010,
2723
          12'b1xxx10111100,
2724
          12'b1xxx11000010,
2725
          12'b1xxx11000011,
2726
          12'b1xxx11001010,
2727
          12'b1xxx11001011: aluop_sel = `ALUOP_ADD;
2728
          12'b1xxx00011010,
2729
          12'b1xxx01010100,
2730
          12'b1xxx01010101,
2731
          12'b1xxx00110010,
2732
          12'b1xxx00110011,
2733
          12'b1xxx00xx0010,
2734
          12'b1xxx00xx0011: aluop_sel = `ALUOP_ADS;
2735 2 bsa
          12'b000010001xxx,
2736
          12'b000011001110,
2737
          12'b010x10001110: aluop_sel = `ALUOP_BADC;
2738
          12'b000010000xxx,
2739
          12'b000011000110,
2740
          12'b010x10000110,
2741 6 bsa
          12'b1xxx100xx011,
2742 8 bsa
          12'b1xxx10100100,
2743
          12'b1xxx10101100,
2744 2 bsa
          12'b1xxx10100011,
2745
          12'b1xxx10101011,
2746
          12'b1xxx10110011,
2747
          12'b1xxx10111011: aluop_sel = `ALUOP_BADD;
2748
          12'b000010100xxx,
2749 4 bsa
          12'b0x1x01xxxxxx,
2750 2 bsa
          12'b010x10100110,
2751
          12'b000011100110,
2752 6 bsa
          12'b1xxx00110100,
2753
          12'b1xxx00xxx000,
2754
          12'b1xxx011x0100,
2755 2 bsa
          12'b1xxx01xxx000: aluop_sel = `ALUOP_BAND;
2756
          12'b000010110xxx,
2757
          12'b010x10110110,
2758
          12'b000011110110: aluop_sel = `ALUOP_BOR;
2759
          12'b000010011xxx,
2760
          12'b010x10011110,
2761
          12'b000011011110: aluop_sel = `ALUOP_BSBC;
2762
          12'b000010010xxx,
2763
          12'b000010111xxx,
2764
          12'b000011010110,
2765
          12'b010x10010110,
2766
          12'b010x10111110,
2767
          12'b000011111110: aluop_sel = `ALUOP_BSUB;
2768
          12'b000010101xxx,
2769
          12'b010x10101110,
2770
          12'b000011101110: aluop_sel = `ALUOP_BXOR;
2771
          12'b1xxx01101111: aluop_sel = `ALUOP_RLD2;
2772
          12'b1xxx01100111: aluop_sel = `ALUOP_RRD2;
2773
          default:          aluop_sel = `ALUOP_PASS;
2774
          endcase
2775
        end
2776
      `INTB:                aluop_sel = `ALUOP_PASS;
2777
      default:              aluop_sel = `ALUOP_ADD;
2778
      endcase
2779
    end
2780
 
2781
  /*****************************************************************************************/
2782
  /*                                                                                       */
2783
  /*  alu a input control                                                                  */
2784
  /*                                                                                       */
2785
  /*****************************************************************************************/
2786
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
2787
            tflg_reg or zero_bit) begin
2788
    casex (state_reg) //synopsys parallel_case
2789
      `DEC1: begin
2790
        casex (inst_reg) //synopsys parallel_case
2791
          8'b10000xxx,
2792
          8'b10001xxx,
2793
          8'b10010xxx,
2794
          8'b10011xxx,
2795
          8'b10100xxx,
2796
          8'b10101xxx,
2797
          8'b10110xxx,
2798
          8'b10111xxx:      alua_sel = `ALUA_AA;
2799
          8'b00100111:      alua_sel = `ALUA_DAA;
2800
          8'b00xx1001:      alua_sel = `ALUA_HL;
2801
          8'b00010000,
2802
          8'b00101111,
2803
          8'b00xxx101,
2804
          8'b00xx1011,
2805
          8'b11xx0101,
2806
          8'b11xxx111:      alua_sel = `ALUA_M1;
2807
          default:          alua_sel = `ALUA_ONE;
2808
          endcase
2809
        end
2810
      `DEC2: begin
2811
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2812 6 bsa
          12'b001001xxxxxx,
2813
          12'b001010xxxxxx,
2814
          12'b001011xxxxxx: alua_sel = `ALUA_BIT;
2815 2 bsa
          12'b1xxx01xx0010,
2816
          12'b1xxx01xx1010: alua_sel = `ALUA_HL;
2817
          12'b1xxx01010111: alua_sel = `ALUA_II;
2818
          12'b010000xx1001: alua_sel = `ALUA_IX;
2819
          12'b010100xx1001: alua_sel = `ALUA_IY;
2820 6 bsa
          12'b010000100101,
2821 2 bsa
          12'b010000101011,
2822 6 bsa
          12'b010000101101,
2823 2 bsa
          12'b010011100101,
2824 6 bsa
          12'b010100100101,
2825 2 bsa
          12'b010100101011,
2826 6 bsa
          12'b010100101101,
2827 8 bsa
          12'b1xxx10101100,
2828 2 bsa
          12'b010111100101: alua_sel = `ALUA_M1;
2829 8 bsa
          12'b1xxx10100100,
2830 6 bsa
          12'b010000100100,
2831
          12'b010000101100,
2832 2 bsa
          12'b010000100011,
2833 6 bsa
          12'b010100100100,
2834
          12'b010100101100,
2835 2 bsa
          12'b010100100011: alua_sel = `ALUA_ONE;
2836
          12'b1xxx01011111: alua_sel = `ALUA_RR;
2837
          12'b1xxx01000100: alua_sel = `ALUA_ZER;
2838 4 bsa
          default:          alua_sel = `ALUA_AA;
2839 2 bsa
        endcase
2840
      end
2841
      `OF1B: begin
2842
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2843
          12'b000000100000: alua_sel = ( !zero_bit) ? `ALUA_PC : `ALUA_ONE;
2844
          12'b000000101000: alua_sel = (  zero_bit) ? `ALUA_PC : `ALUA_ONE;
2845
          12'b000000110000: alua_sel = (!carry_bit) ? `ALUA_PC : `ALUA_ONE;
2846
          12'b000000111000: alua_sel = ( carry_bit) ? `ALUA_PC : `ALUA_ONE;
2847
          12'b000000010000,
2848
          12'b000000011000: alua_sel = `ALUA_PC;
2849
          default:          alua_sel = `ALUA_ONE;
2850
        endcase
2851
      end
2852
      `OF2A: begin
2853
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2854
          12'b010000110110: alua_sel = `ALUA_IX;
2855
          12'b010100110110: alua_sel = `ALUA_IY;
2856
          default:          alua_sel = `ALUA_M1;
2857
        endcase
2858
      end
2859
      `IF3A:                alua_sel = (page_reg[0]) ? `ALUA_IY : `ALUA_IX;
2860 8 bsa
      `ADR1: begin
2861
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2862
          12'b000011010011: alua_sel = `ALUA_M1;
2863
          12'b1xxx01100101,
2864
          12'b1xxx01100110: alua_sel = `ALUA_M1;
2865
          default:          alua_sel = (page_reg[0]) ? `ALUA_IY : `ALUA_IX;
2866
        endcase
2867
      end
2868
      `ADR2: begin
2869
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2870
          12'b1xxx01100101: alua_sel = `ALUA_IX;
2871
          12'b1xxx01100110: alua_sel = `ALUA_IY;
2872
          default:          alua_sel = `ALUA_M1;
2873
        endcase
2874
      end
2875 2 bsa
      `RD1B: begin
2876
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2877
          12'b1xxx10100001,
2878
          12'b1xxx10101001,
2879
          12'b1xxx10110001,
2880
          12'b1xxx10111001: alua_sel = `ALUA_AA;
2881
          default:          alua_sel = `ALUA_M1;
2882
        endcase
2883
      end
2884
      `RD2A: begin
2885
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2886 8 bsa
          12'b0001xxxxxxxx,
2887
          12'b1xxx10001010,
2888
          12'b1xxx10001011,
2889
          12'b1xxx10001100,
2890
          12'b1xxx10011010,
2891
          12'b1xxx10011011,
2892
          12'b1xxx10011100,
2893
          12'b1xxx10101000,
2894
          12'b1xxx10101010,
2895
          12'b1xxx10101100,
2896
          12'b1xxx10111000,
2897
          12'b1xxx10111010,
2898
          12'b1xxx10111100,
2899
          12'b1xxx11001010,
2900
          12'b1xxx11001011: alua_sel = `ALUA_M1;
2901 2 bsa
          default:          alua_sel = `ALUA_ONE;
2902
        endcase
2903
      end
2904
      `RD2B: begin
2905
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2906
          12'b1xxx01100111,
2907
          12'b1xxx01101111,
2908
          12'b1xxx10100001,
2909
          12'b1xxx10101001,
2910
          12'b1xxx10110001,
2911
          12'b1xxx10111001: alua_sel = `ALUA_AA;
2912 4 bsa
          12'b0x1x1xxxxxxx: alua_sel = `ALUA_BIT;
2913
          12'b000000xxx101,
2914 2 bsa
          12'b010000110101,
2915
          12'b010100110101,
2916
          12'b1xxx10100010,
2917
          12'b1xxx10100011,
2918
          12'b1xxx10101010,
2919
          12'b1xxx10101011,
2920
          12'b1xxx10110010,
2921
          12'b1xxx10110011,
2922
          12'b1xxx10111010,
2923
          12'b1xxx10111011: alua_sel = `ALUA_M1;
2924
          default:          alua_sel = `ALUA_ONE;
2925
        endcase
2926
      end
2927
      `WR1A: begin
2928
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2929 8 bsa
          12'b000011001101,
2930
          12'b000011xxx100,
2931
          12'b000011xx0101,
2932
          12'b000011xxx111,
2933
          12'b0001xxxxxxxx,
2934
          12'b010011100101,
2935
          12'b010111100101,
2936
          12'b1xxx01100101,
2937
          12'b1xxx01100110,
2938
          12'b1xxx10001010,
2939
          12'b1xxx10001011,
2940
          12'b1xxx10001100,
2941
          12'b1xxx10011010,
2942
          12'b1xxx10011011,
2943
          12'b1xxx10011100,
2944
          12'b1xxx10101000,
2945
          12'b1xxx10101011,
2946
          12'b1xxx10100100,
2947
          12'b1xxx10101100,
2948
          12'b1xxx10111000,
2949
          12'b1xxx10111011,
2950
          12'b1xxx10111100,
2951
          12'b1xxx11001010,
2952
          12'b1xxx11001011: alua_sel = `ALUA_M1;
2953
          default:          alua_sel = `ALUA_ONE;
2954 2 bsa
        endcase
2955
      end
2956
      `WR1B: begin
2957
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2958 8 bsa
          12'b1xxx10000010,
2959
          12'b1xxx10000011,
2960
          12'b1xxx10000100,
2961
          12'b1xxx10001010,
2962
          12'b1xxx10001011,
2963
          12'b1xxx10001100,
2964
          12'b1xxx10100000,
2965
          12'b1xxx10100010,
2966
          12'b1xxx10100011,
2967
          12'b1xxx10100100,
2968
          12'b1xxx10101000,
2969
          12'b1xxx10101010,
2970
          12'b1xxx10101011,
2971
          12'b1xxx10101100: alua_sel = `ALUA_ONE;
2972
          default:          alua_sel = `ALUA_M1;
2973 2 bsa
        endcase
2974
      end
2975
      `WR2A: begin
2976
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2977
          12'b0001xxxxxxxx: alua_sel = `ALUA_INT;
2978 8 bsa
          12'b1xxx10001010,
2979
          12'b1xxx10001011,
2980
          12'b1xxx10001100,
2981
          12'b1xxx10011010,
2982
          12'b1xxx10011011,
2983
          12'b1xxx10011100,
2984
          12'b1xxx10101000,
2985
          12'b1xxx10101011,
2986
          12'b1xxx10101100,
2987
          12'b1xxx10111000,
2988
          12'b1xxx10111011,
2989
          12'b1xxx10111100,
2990
          12'b1xxx11001010,
2991
          12'b1xxx11001011: alua_sel = `ALUA_M1;
2992 2 bsa
          12'b000011xxx111: alua_sel = `ALUA_RST;
2993
          default:          alua_sel = `ALUA_ONE;
2994
        endcase
2995
      end
2996
      `WR2B: begin
2997
        casex ({page_reg, inst_reg}) //synopsys parallel_case
2998 8 bsa
          12'b1xxx10000010,
2999
          12'b1xxx10000011,
3000
          12'b1xxx10000100,
3001
          12'b1xxx10001010,
3002
          12'b1xxx10001011,
3003
          12'b1xxx10001100,
3004
          12'b1xxx10010010,
3005
          12'b1xxx10010011,
3006
          12'b1xxx10010100,
3007
          12'b1xxx10011010,
3008
          12'b1xxx10011011,
3009
          12'b1xxx10011100,
3010
          12'b1xxx10100000,
3011
          12'b1xxx10100010,
3012
          12'b1xxx10100011,
3013
          12'b1xxx10100100,
3014
          12'b1xxx10101000,
3015
          12'b1xxx10101010,
3016
          12'b1xxx10101011,
3017
          12'b1xxx10101100,
3018
          12'b1xxx10110000,
3019
          12'b1xxx10110010,
3020
          12'b1xxx10110011,
3021
          12'b1xxx10110100,
3022
          12'b1xxx10111000,
3023
          12'b1xxx10111010,
3024
          12'b1xxx10111011,
3025
          12'b1xxx10111100,
3026
          12'b1xxx11000010,
3027
          12'b1xxx11000011,
3028
          12'b1xxx11001010,
3029
          12'b1xxx11001011: alua_sel = `ALUA_M1;
3030 2 bsa
          default:          alua_sel = `ALUA_ONE;
3031
        endcase
3032
      end
3033
      `BLK1: begin
3034
        alua_sel = (inst_reg[3]) ? `ALUA_M1 : `ALUA_ONE;
3035
      end
3036
      `BLK2: begin
3037
        alua_sel = (inst_reg[4]) ? `ALUA_M1 : `ALUA_ONE;
3038
      end
3039
      `PCA:                 alua_sel = (tflg_reg) ? `ALUA_ZER : `ALUA_M2;
3040
      `IF1A: begin
3041
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3042 4 bsa
          12'b0x1x01xxxxxx: alua_sel = `ALUA_BIT;
3043 8 bsa
          12'b1xxx00110010,
3044
          12'b1xxx00xx0010,
3045
          12'b1xxx01010101: alua_sel = `ALUA_IX;
3046
          12'b1xxx00110011,
3047
          12'b1xxx00xx0011,
3048
          12'b1xxx01010100: alua_sel = `ALUA_IY;
3049
          12'b1xxx00xxx000,
3050
          12'b1xxx01xxx000,
3051
          12'b1xxx10001010,
3052
          12'b1xxx10001011,
3053
          12'b1xxx10001100,
3054
          12'b1xxx10011010,
3055
          12'b1xxx10011011,
3056
          12'b1xxx10011100,
3057 2 bsa
          12'b1xxx10100011,
3058 8 bsa
          12'b1xxx10101000,
3059
          12'b1xxx10101010,
3060
          12'b1xxx10101011,
3061
          12'b1xxx10101100,
3062
          12'b1xxx10110011,
3063
          12'b1xxx10111000,
3064
          12'b1xxx10111010,
3065
          12'b1xxx10111011,
3066
          12'b1xxx10111100,
3067
          12'b1xxx11001010,
3068
          12'b1xxx11001011: alua_sel = `ALUA_M1;
3069
          12'b1xxx10000010,
3070
          12'b1xxx10000011,
3071
          12'b1xxx10000100,
3072
          12'b1xxx10010010,
3073
          12'b1xxx10010011,
3074
          12'b1xxx10010100,
3075
          12'b1xxx10100000,
3076
          12'b1xxx10100010,
3077
          12'b1xxx10100100,
3078
          12'b1xxx10110000,
3079
          12'b1xxx10110010,
3080
          12'b1xxx10110100,
3081
          12'b1xxx11000010,
3082
          12'b1xxx11000011: alua_sel = `ALUA_ONE;
3083 6 bsa
          12'b1xxx01110100: alua_sel = `ALUA_TMP;
3084 2 bsa
          default:          alua_sel = `ALUA_AA;
3085
          endcase
3086
        end
3087
      `INTA:                alua_sel = `ALUA_M1;
3088
      default:              alua_sel = `ALUA_ONE;
3089
      endcase
3090
    end
3091
 
3092
  /*****************************************************************************************/
3093
  /*                                                                                       */
3094
  /*  alu b input control                                                                  */
3095
  /*                                                                                       */
3096
  /*****************************************************************************************/
3097
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
3098
            zero_bit) begin
3099
    casex (state_reg) //synopsys parallel_case
3100
      `DEC1: begin
3101
        casex (inst_reg) //synopsys parallel_case
3102
          8'b00000111,
3103
          8'b00001111,
3104
          8'b00010111,
3105
          8'b00011111,
3106
          8'b00100111,
3107
          8'b00101111:      alub_sel = `ALUB_AA;
3108
          8'b00010000:      alub_sel = `ALUB_BB;
3109
          8'b00000010,
3110
          8'b00001010:      alub_sel = `ALUB_BC;
3111
          8'b00010010,
3112
          8'b00011010,
3113
          8'b11101011:      alub_sel = `ALUB_DE;
3114
          8'b11101001,
3115
          8'b11111001:      alub_sel = `ALUB_HL;
3116
          8'b01xxx000,
3117
          8'b10xxx000:      alub_sel = `ALUB_BB;
3118
          8'b01xxx001,
3119
          8'b10xxx001:      alub_sel = `ALUB_CC;
3120
          8'b01xxx010,
3121
          8'b10xxx010:      alub_sel = `ALUB_DD;
3122
          8'b01xxx011,
3123
          8'b10xxx011:      alub_sel = `ALUB_EE;
3124
          8'b01xxx100,
3125
          8'b10xxx100:      alub_sel = `ALUB_HH;
3126
          8'b01xxx101,
3127
          8'b10xxx101:      alub_sel = `ALUB_LL;
3128
          8'b01xxx111,
3129
          8'b10xxx111:      alub_sel = `ALUB_AA;
3130
          8'b0000010x:      alub_sel = `ALUB_BB;
3131
          8'b0000110x:      alub_sel = `ALUB_CC;
3132
          8'b0001010x:      alub_sel = `ALUB_DD;
3133
          8'b0001110x:      alub_sel = `ALUB_EE;
3134
          8'b0010010x:      alub_sel = `ALUB_HH;
3135
          8'b0010110x:      alub_sel = `ALUB_LL;
3136
          8'b0011110x:      alub_sel = `ALUB_AA;
3137
          8'b00000011,
3138
          8'b00001001,
3139
          8'b00001011:      alub_sel = `ALUB_BC;
3140
          8'b00010011,
3141
          8'b00011001,
3142
          8'b00011011:      alub_sel = `ALUB_DE;
3143
          8'b00100011,
3144
          8'b00101001,
3145
          8'b00101011:      alub_sel = `ALUB_HL;
3146
          8'b00110011,
3147
          8'b00111001,
3148
          8'b00111011:      alub_sel = `ALUB_SP;
3149
          8'b11xx0101,
3150
          8'b11xxx111:      alub_sel = `ALUB_SP;
3151
          default:          alub_sel = `ALUB_PC;
3152
          endcase
3153
        end
3154
      `IF2B:                alub_sel = `ALUB_PC;
3155
      `DEC2: begin
3156
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3157
          12'b1xxx01000100,
3158
          12'b1xxx01000111,
3159
          12'b1xxx01001111: alub_sel = `ALUB_AA;
3160
          12'b1xxx01xxx000,
3161
          12'b1xxx01xxx001,
3162 8 bsa
          12'b1xxx10000100,
3163
          12'b1xxx10001100,
3164 2 bsa
          12'b1xxx10100010,
3165
          12'b1xxx10101010,
3166
          12'b1xxx10110010,
3167
          12'b1xxx10111010: alub_sel = `ALUB_BC;
3168
          12'b010000100011,
3169
          12'b010000101011,
3170
          12'b010011101001,
3171
          12'b010011111001: alub_sel = `ALUB_IX;
3172 6 bsa
          12'b010000100100,
3173
          12'b010000100101,
3174
          12'b0100010xx100,12'b01000110x100,12'b010001111100,
3175
          12'b010010000100,
3176
          12'b010010001100,
3177
          12'b010010010100,
3178
          12'b010010011100,
3179
          12'b010010100100,
3180
          12'b010010101100,
3181
          12'b010010110100,
3182
          12'b010010111100: alub_sel = `ALUB_IXH;
3183
          12'b010100100100,
3184
          12'b010100100101,
3185
          12'b0101010xx100,12'b01010110x100,12'b010101111100,
3186
          12'b010110000100,
3187
          12'b010110001100,
3188
          12'b010110010100,
3189
          12'b010110011100,
3190
          12'b010110100100,
3191
          12'b010110101100,
3192
          12'b010110110100,
3193
          12'b010110111100: alub_sel = `ALUB_IYH;
3194
          12'b010000101100,
3195
          12'b010000101101,
3196
          12'b0100010xx101,12'b01000110x101,12'b010001111101,
3197
          12'b010010000101,
3198
          12'b010010001101,
3199
          12'b010010010101,
3200
          12'b010010011101,
3201
          12'b010010100101,
3202
          12'b010010101101,
3203
          12'b010010110101,
3204
          12'b010010111101: alub_sel = `ALUB_IXL;
3205
          12'b010100101100,
3206
          12'b010100101101,
3207
          12'b0101010xx101,12'b01010110x101,12'b010101111101,
3208
          12'b010110000101,
3209
          12'b010110001101,
3210
          12'b010110010101,
3211
          12'b010110011101,
3212
          12'b010110100101,
3213
          12'b010110101101,
3214
          12'b010110110101,
3215
          12'b010110111101: alub_sel = `ALUB_IYL;
3216 2 bsa
          12'b010100100011,
3217
          12'b010100101011,
3218
          12'b010111101001,
3219
          12'b010111111001: alub_sel = `ALUB_IY;
3220
          12'b1xxx01000101,
3221
          12'b1xxx01001101: alub_sel = `ALUB_PC;
3222 6 bsa
          12'b010x0110x000,
3223
          12'b1xxx00000100,
3224 4 bsa
          12'b0010xxxxx000: alub_sel = `ALUB_BB;
3225 6 bsa
          12'b010x0110x001,
3226
          12'b1xxx00001100,
3227 8 bsa
          12'b1xxx10000010,
3228
          12'b1xxx10001010,
3229
          12'b1xxx10010010,
3230
          12'b1xxx10011010,
3231 4 bsa
          12'b0010xxxxx001: alub_sel = `ALUB_CC;
3232 6 bsa
          12'b010x0110x010,
3233
          12'b1xxx00010100,
3234 4 bsa
          12'b0010xxxxx010: alub_sel = `ALUB_DD;
3235 6 bsa
          12'b010x0110x011,
3236
          12'b1xxx00011100,
3237 4 bsa
          12'b0010xxxxx011: alub_sel = `ALUB_EE;
3238 6 bsa
          12'b1xxx00100100,
3239 4 bsa
          12'b0010xxxxx100: alub_sel = `ALUB_HH;
3240 6 bsa
          12'b1xxx00101100,
3241 4 bsa
          12'b0010xxxxx101: alub_sel = `ALUB_LL;
3242 6 bsa
          12'b010x0110x111,
3243
          12'b1xxx00111100,
3244 4 bsa
          12'b0010xxxxx111: alub_sel = `ALUB_AA;
3245 6 bsa
          12'b1xxx01001100,
3246 2 bsa
          12'b1xxx0100x010: alub_sel = `ALUB_BC;
3247 6 bsa
          12'b1xxx01011100,
3248 2 bsa
          12'b1xxx0101x010: alub_sel = `ALUB_DE;
3249 6 bsa
          12'b1xxx01111100,
3250 2 bsa
          12'b1xxx0111x010: alub_sel = `ALUB_SP;
3251
          12'b010011100101,
3252
          12'b010111100101: alub_sel = `ALUB_SP;
3253
          12'b010x00001001: alub_sel = `ALUB_BC;
3254 8 bsa
          12'b1xxx10010100,
3255
          12'b1xxx10011100,
3256
          12'b1xxx11000010,
3257
          12'b1xxx11001010,
3258 2 bsa
          12'b010x00011001: alub_sel = `ALUB_DE;
3259 4 bsa
          12'b010000101001: alub_sel = `ALUB_IX;
3260 6 bsa
          12'b010100101001: alub_sel = `ALUB_IY;
3261 2 bsa
          12'b010x00111001: alub_sel = `ALUB_SP;
3262
          default:          alub_sel = `ALUB_HL;
3263
        endcase
3264
      end
3265
      `OF1B: begin
3266
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3267 6 bsa
          12'b1xxx01110100,
3268 2 bsa
          12'b000000010000,
3269
          12'b000000011000,
3270
          12'b000000110110: alub_sel = `ALUB_DIN;
3271
          12'b000000100000: alub_sel = ( !zero_bit) ? `ALUB_DIN : `ALUB_PC;
3272
          12'b000000101000: alub_sel = (  zero_bit) ? `ALUB_DIN : `ALUB_PC;
3273
          12'b000000110000: alub_sel = (!carry_bit) ? `ALUB_DIN : `ALUB_PC;
3274
          12'b000000111000: alub_sel = ( carry_bit) ? `ALUB_DIN : `ALUB_PC;
3275
          default:          alub_sel = `ALUB_PC;
3276
        endcase
3277
      end
3278
      `OF2A: begin
3279
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3280
          12'b010000110110,
3281
          12'b010100110110: alub_sel = `ALUB_DIN;
3282
          default:          alub_sel = `ALUB_SP;
3283
        endcase
3284
      end
3285
      `OF2B: begin
3286
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3287
          12'b000011000011,
3288
          12'b010000110110,
3289
          12'b010100110110: alub_sel = `ALUB_DIN;
3290
          12'b000011000010: alub_sel = ( !zero_bit) ? `ALUB_DIN : `ALUB_PC;
3291
          12'b000011001010: alub_sel = (  zero_bit) ? `ALUB_DIN : `ALUB_PC;
3292
          12'b000011010010: alub_sel = (!carry_bit) ? `ALUB_DIN : `ALUB_PC;
3293
          12'b000011011010: alub_sel = ( carry_bit) ? `ALUB_DIN : `ALUB_PC;
3294
          12'b000011100010: alub_sel = (  !par_bit) ? `ALUB_DIN : `ALUB_PC;
3295
          12'b000011101010: alub_sel = (   par_bit) ? `ALUB_DIN : `ALUB_PC;
3296
          12'b000011110010: alub_sel = ( !sign_bit) ? `ALUB_DIN : `ALUB_PC;
3297
          12'b000011111010: alub_sel = (  sign_bit) ? `ALUB_DIN : `ALUB_PC;
3298
          12'b000011001101: alub_sel = `ALUB_PCH;
3299
          12'b000011000100: alub_sel = ( !zero_bit) ? `ALUB_PCH : `ALUB_PC;
3300
          12'b000011001100: alub_sel = (  zero_bit) ? `ALUB_PCH : `ALUB_PC;
3301
          12'b000011010100: alub_sel = (!carry_bit) ? `ALUB_PCH : `ALUB_PC;
3302
          12'b000011011100: alub_sel = ( carry_bit) ? `ALUB_PCH : `ALUB_PC;
3303
          12'b000011100100: alub_sel = (  !par_bit) ? `ALUB_PCH : `ALUB_PC;
3304
          12'b000011101100: alub_sel = (   par_bit) ? `ALUB_PCH : `ALUB_PC;
3305
          12'b000011110100: alub_sel = ( !sign_bit) ? `ALUB_PCH : `ALUB_PC;
3306
          12'b000011111100: alub_sel = (  sign_bit) ? `ALUB_PCH : `ALUB_PC;
3307
          default:          alub_sel = `ALUB_PC;
3308
        endcase
3309
      end
3310
      `IF3A:                alub_sel = `ALUB_DIN;
3311
      `ADR1: begin
3312
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3313 6 bsa
          12'b1xxx01110100: alub_sel = `ALUB_CC;
3314 2 bsa
          12'b000011010011,
3315 8 bsa
          12'b000011011011: alub_sel = `ALUB_IO;
3316
          12'b1xxx01100101,
3317
          12'b1xxx01100110: alub_sel = `ALUB_SP;
3318 2 bsa
          12'b0001xxxxxxxx: alub_sel = `ALUB_TMP;
3319
          default:          alub_sel = `ALUB_DIN;
3320
        endcase
3321
      end
3322
      `ADR2: begin
3323
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3324
          12'b000000000010,
3325
          12'b000000010010,
3326
          12'b000000110010,
3327
          12'b000011010011: alub_sel = `ALUB_AA;
3328 8 bsa
          12'b1xxx10000010,
3329
          12'b1xxx10000100,
3330
          12'b1xxx10001010,
3331
          12'b1xxx10001100,
3332
          12'b1xxx10010010,
3333
          12'b1xxx10011010,
3334
          12'b1xxx10100100,
3335
          12'b1xxx10101100,
3336 6 bsa
          12'b1xxx100xx011,
3337 2 bsa
          12'b1xxx10100010,
3338
          12'b1xxx10100011,
3339
          12'b1xxx10101010,
3340
          12'b1xxx10101011,
3341
          12'b1xxx10110010,
3342
          12'b1xxx10110011,
3343
          12'b1xxx10111010,
3344
          12'b1xxx10111011: alub_sel = `ALUB_BB;
3345 8 bsa
          12'b1xxx10010100,
3346
          12'b1xxx10011100,
3347
          12'b1xxx11000010,
3348
          12'b1xxx11000011,
3349
          12'b1xxx11001010,
3350
          12'b1xxx11001011,
3351 2 bsa
          12'b1xxx10100000,
3352
          12'b1xxx10100001,
3353
          12'b1xxx10101000,
3354
          12'b1xxx10101001,
3355
          12'b1xxx10110000,
3356
          12'b1xxx10110001,
3357 8 bsa
          12'b1xxx10110100,
3358
          12'b1xxx10111100,
3359 2 bsa
          12'b1xxx10111000,
3360
          12'b1xxx10111001: alub_sel = `ALUB_BC;
3361 8 bsa
          12'b1xxx01100101,
3362
          12'b1xxx01100110: alub_sel = `ALUB_DIN;
3363 2 bsa
          12'b010000100010: alub_sel = `ALUB_IX;
3364
          12'b010011100101: alub_sel = `ALUB_IXH;
3365 8 bsa
          12'b010000111111,
3366
          12'b010100111110,
3367
          12'b1xxx00111111: alub_sel = `ALUB_IXL;
3368 2 bsa
          12'b010100100010: alub_sel = `ALUB_IY;
3369
          12'b010111100101: alub_sel = `ALUB_IYH;
3370 8 bsa
          12'b010000111110,
3371
          12'b010100111111,
3372
          12'b1xxx00111110: alub_sel = `ALUB_IYL;
3373 2 bsa
          12'b000011xxx111: alub_sel = `ALUB_PCH;
3374
          12'b000001xxx000,
3375
          12'b010x01110000,
3376 6 bsa
          12'b1xxx00000001,
3377 2 bsa
          12'b1xxx01000001: alub_sel = `ALUB_BB;
3378 8 bsa
          12'b010000001111,
3379
          12'b010100001111,
3380
          12'b1xxx00001111,
3381 2 bsa
          12'b000001xxx001,
3382
          12'b010x01110001,
3383 6 bsa
          12'b1xxx01110100,
3384
          12'b1xxx00001001,
3385 2 bsa
          12'b1xxx01001001: alub_sel = `ALUB_CC;
3386
          12'b000001xxx010,
3387
          12'b010x01110010,
3388 6 bsa
          12'b1xxx00010001,
3389 2 bsa
          12'b1xxx01010001: alub_sel = `ALUB_DD;
3390 8 bsa
          12'b010000011111,
3391
          12'b010100011111,
3392
          12'b1xxx00011111,
3393 2 bsa
          12'b000001xxx011,
3394
          12'b010x01110011,
3395 6 bsa
          12'b1xxx00011001,
3396 2 bsa
          12'b1xxx01011001: alub_sel = `ALUB_EE;
3397
          12'b000001xxx100,
3398
          12'b010x01110100,
3399 6 bsa
          12'b1xxx00100001,
3400 2 bsa
          12'b1xxx01100001: alub_sel = `ALUB_HH;
3401 8 bsa
          12'b010000101111,
3402
          12'b010100101111,
3403
          12'b1xxx00101111,
3404 2 bsa
          12'b000001xxx101,
3405
          12'b010x01110101,
3406 6 bsa
          12'b1xxx00101001,
3407 2 bsa
          12'b1xxx01101001: alub_sel = `ALUB_LL;
3408
          12'b000001xxx111,
3409
          12'b010x01110111,
3410 6 bsa
          12'b1xxx00111001,
3411 2 bsa
          12'b1xxx01111001: alub_sel = `ALUB_AA;
3412
          12'b1xxx01000011: alub_sel = `ALUB_BC;
3413
          12'b1xxx01010011: alub_sel = `ALUB_DE;
3414
          12'b1xxx01110011: alub_sel = `ALUB_SP;
3415
          12'b000011000101: alub_sel = `ALUB_BB;
3416
          12'b000011010101: alub_sel = `ALUB_DD;
3417
          12'b000011100101: alub_sel = `ALUB_HH;
3418 8 bsa
          12'b000011110101: alub_sel = `ALUB_AA;
3419
          12'b1xxx01100101,
3420
          12'b1xxx01100110: alub_sel = `ALUB_TMP;
3421 2 bsa
          default:          alub_sel = `ALUB_HL;
3422
        endcase
3423
      end
3424
      `RD1A: begin
3425
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3426 8 bsa
          12'b1xxx10100100,
3427
          12'b1xxx10101100,
3428 2 bsa
          12'b1xxx10100011,
3429
          12'b1xxx10101011,
3430
          12'b1xxx10110011,
3431
          12'b1xxx10111011: alub_sel = `ALUB_BC;
3432 6 bsa
          12'b1xxx100xx011: alub_sel = `ALUB_CC;
3433 8 bsa
          12'b1xxx11000011,
3434
          12'b1xxx11001011,
3435 2 bsa
          12'b1xxx10100000,
3436
          12'b1xxx10101000,
3437
          12'b1xxx10110000,
3438 8 bsa
          12'b1xxx10110100,
3439
          12'b1xxx10111100,
3440 2 bsa
          12'b1xxx10111000: alub_sel = `ALUB_DE;
3441 8 bsa
          12'b1xxx00110110,
3442
          12'b1xxx00110111,
3443
          12'b1xxx00xx0111,
3444
          12'b1xxx10000010,
3445
          12'b1xxx10000100,
3446
          12'b1xxx10001010,
3447
          12'b1xxx10001100,
3448
          12'b1xxx10010010,
3449
          12'b1xxx10010100,
3450
          12'b1xxx10011010,
3451
          12'b1xxx10011100,
3452
          12'b1xxx11000010,
3453
          12'b1xxx11001010,
3454 2 bsa
          12'b1xxx10100001,
3455
          12'b1xxx10100010,
3456
          12'b1xxx10101001,
3457
          12'b1xxx10101010,
3458
          12'b1xxx10110001,
3459
          12'b1xxx10110010,
3460
          12'b1xxx10111001,
3461
          12'b1xxx10111010: alub_sel = `ALUB_HL;
3462 8 bsa
          12'b010000110001,
3463
          12'b010000110111,
3464
          12'b010000xx0111,
3465
          12'b010100110001,
3466
          12'b010100110111,
3467
          12'b010100xx0111,
3468 2 bsa
          12'b000000101010,
3469
          12'b0001xxxxxxxx,
3470
          12'b010000101010,
3471
          12'b010100101010,
3472
          12'b1xxx01xx1011: alub_sel = `ALUB_TMP;
3473
          default:          alub_sel = `ALUB_SP;
3474
        endcase
3475
      end
3476 8 bsa
      `RD1B: alub_sel = `ALUB_DIN;
3477 2 bsa
      `RD2A: begin
3478
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3479 8 bsa
          12'b1xxx10100100,
3480
          12'b1xxx10101100,
3481 2 bsa
          12'b1xxx10100011,
3482
          12'b1xxx10101011,
3483
          12'b1xxx10110011,
3484
          12'b1xxx10111011: alub_sel = `ALUB_BC;
3485 6 bsa
          12'b1xxx01110100,
3486
          12'b1xxx100xx011: alub_sel = `ALUB_CC;
3487 8 bsa
          12'b1xxx11000011,
3488
          12'b1xxx11001011,
3489 2 bsa
          12'b1xxx10100000,
3490
          12'b1xxx10101000,
3491
          12'b1xxx10110000,
3492 8 bsa
          12'b1xxx10110100,
3493
          12'b1xxx10111100,
3494 2 bsa
          12'b1xxx10111000: alub_sel = `ALUB_DE;
3495 8 bsa
          12'b1xxx10000010,
3496
          12'b1xxx10000100,
3497
          12'b1xxx10001010,
3498
          12'b1xxx10001100,
3499
          12'b1xxx10010010,
3500
          12'b1xxx10010100,
3501
          12'b1xxx10011010,
3502
          12'b1xxx10011100,
3503
          12'b1xxx11000010,
3504
          12'b1xxx11001010,
3505 4 bsa
          12'b001010xxxxxx,
3506 2 bsa
          12'b1xxx10100001,
3507
          12'b1xxx10100010,
3508
          12'b1xxx10101001,
3509
          12'b1xxx10101010,
3510
          12'b1xxx10110001,
3511
          12'b1xxx10110010,
3512
          12'b1xxx10111001,
3513
          12'b1xxx10111010: alub_sel = `ALUB_HL;
3514
          12'b000011001001,
3515
          12'b000011100011,
3516
          12'b000011xxx000,
3517
          12'b000011xx0001,
3518
          12'b0001xxxxxxxx,
3519
          12'b010011100001,
3520
          12'b010011100011,
3521
          12'b010111100001,
3522
          12'b010111100011,
3523
          12'b1xxx01000101,
3524
          12'b1xxx01001101: alub_sel = `ALUB_SP;
3525
          default:          alub_sel = `ALUB_TMP;
3526
        endcase
3527
      end
3528
      `RD2B: begin
3529
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3530
          12'b000011100011: alub_sel = `ALUB_HL;
3531
          12'b010011100011: alub_sel = `ALUB_IX;
3532
          12'b010111100011: alub_sel = `ALUB_IY;
3533 8 bsa
          12'b010000110001,
3534
          12'b010000110111,
3535
          12'b010000xx0111,
3536
          12'b010100110001,
3537
          12'b010100110111,
3538
          12'b010100xx0111,
3539
          12'b1xxx00110110,
3540
          12'b1xxx00110111,
3541
          12'b1xxx00xx0111,
3542 2 bsa
          12'b000000001010,
3543
          12'b000000011010,
3544
          12'b000000101010,
3545
          12'b000000111010,
3546 4 bsa
          12'b000001xxxxxx,
3547
          12'b000010000xxx,
3548
          12'b000010001xxx,
3549
          12'b000010010xxx,
3550
          12'b000010011xxx,
3551
          12'b000010100xxx,
3552
          12'b000010101xxx,
3553
          12'b000010110xxx,
3554
          12'b000010111xxx,
3555 2 bsa
          12'b000011011011,
3556
          12'b000011xx0001,
3557
          12'b001001xxx110,
3558
          12'b001001xxxxxx,
3559
          12'b010000101010,
3560
          12'b010001xxx110,
3561
          12'b010010000110,
3562
          12'b010010001110,
3563
          12'b010010010110,
3564
          12'b010010011110,
3565
          12'b010010100110,
3566
          12'b010010101110,
3567
          12'b010010110110,
3568
          12'b010010111110,
3569
          12'b010011100001,
3570
          12'b010100101010,
3571
          12'b010101xxx110,
3572
          12'b010110000110,
3573
          12'b010110001110,
3574
          12'b010110010110,
3575
          12'b010110011110,
3576
          12'b010110100110,
3577
          12'b010110101110,
3578
          12'b010110110110,
3579
          12'b010110111110,
3580
          12'b010111100001,
3581
          12'b011001xxx110,
3582
          12'b011101xxx110,
3583 6 bsa
          12'b1xxx00xxx000,
3584
          12'b1xxx00xxx100,
3585 2 bsa
          12'b1xxx01xxx000,
3586 6 bsa
          12'b1xxx01xxx100,
3587 2 bsa
          12'b1xxx01xx1011: alub_sel = `ALUB_PC;
3588
          12'b0001xxxxxxxx: alub_sel = `ALUB_PCH;
3589
          default:          alub_sel = `ALUB_DIN;
3590
        endcase
3591
      end
3592
      `WR1A: begin
3593
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3594 8 bsa
          12'b1xxx10100100,
3595
          12'b1xxx10101100: alub_sel = `ALUB_BB;
3596
          12'b1xxx10000100,
3597
          12'b1xxx10001100,
3598 2 bsa
          12'b1xxx10100010,
3599
          12'b1xxx10101010,
3600
          12'b1xxx10110010,
3601
          12'b1xxx10111010: alub_sel = `ALUB_BC;
3602 8 bsa
          12'b1xxx10000010,
3603
          12'b1xxx10001010,
3604
          12'b1xxx10010010,
3605
          12'b1xxx10011010: alub_sel = `ALUB_CC;
3606
          12'b1xxx10010100,
3607
          12'b1xxx10011100,
3608
          12'b1xxx11000010,
3609
          12'b1xxx11001010: alub_sel = `ALUB_DE;
3610
          12'b1xxx00111110,
3611
          12'b1xxx00111111,
3612
          12'b1xxx00xx1111,
3613
          12'b1xxx10100100,
3614
          12'b1xxx10101100,
3615
          12'b1xxx10110100,
3616
          12'b1xxx10111100,
3617
          12'b1xxx11000011,
3618
          12'b1xxx11001011,
3619 6 bsa
          12'b1xxx100xx011,
3620 2 bsa
          12'b1xxx10100000,
3621
          12'b1xxx10100011,
3622
          12'b1xxx10101000,
3623
          12'b1xxx10101011,
3624
          12'b1xxx10110000,
3625
          12'b1xxx10110011,
3626
          12'b1xxx10111000,
3627
          12'b1xxx10111011: alub_sel = `ALUB_HL;
3628 8 bsa
          12'b010000111110,
3629
          12'b010000111111,
3630
          12'b010000xx1111,
3631
          12'b010100111110,
3632
          12'b010100111111,
3633
          12'b010100xx1111,
3634 2 bsa
          12'b000000100010,
3635
          12'b010000100010,
3636
          12'b010100100010,
3637
          12'b1xxx01xx0011: alub_sel = `ALUB_TMP;
3638
          default:          alub_sel = `ALUB_SP;
3639
        endcase
3640
      end
3641
      `WR1B: begin
3642
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3643 8 bsa
          12'b1xxx10010010,
3644
          12'b1xxx10011010,
3645
          12'b010000001111,
3646
          12'b010100001111,
3647
          12'b1xxx00001111,
3648 6 bsa
          12'b1xxx1001x011,
3649 2 bsa
          12'b1xxx10110010,
3650
          12'b1xxx10110011,
3651
          12'b1xxx10111010,
3652
          12'b1xxx10111011: alub_sel = `ALUB_BB;
3653 8 bsa
          12'b1xxx10010100,
3654
          12'b1xxx10011100,
3655
          12'b1xxx11000010,
3656
          12'b1xxx11000011,
3657
          12'b1xxx11001010,
3658
          12'b1xxx11001011,
3659
          12'b1xxx10110100,
3660
          12'b1xxx10111100,
3661 2 bsa
          12'b1xxx10110000,
3662
          12'b1xxx10111000: alub_sel = `ALUB_BC;
3663 8 bsa
          12'b010000011111,
3664
          12'b010100011111,
3665
          12'b1xxx00011111: alub_sel = `ALUB_DD;
3666
          12'b010000101111,
3667
          12'b010100101111,
3668
          12'b1xxx00101111,
3669 2 bsa
          12'b000000100010,
3670
          12'b000011100011: alub_sel = `ALUB_HH;
3671
          12'b010011100101: alub_sel = `ALUB_IX;
3672 8 bsa
          12'b010000111111,
3673
          12'b010100111110,
3674
          12'b1xxx00111111,
3675 2 bsa
          12'b010000100010,
3676
          12'b010011100011: alub_sel = `ALUB_IXH;
3677
          12'b010111100101: alub_sel = `ALUB_IY;
3678 8 bsa
          12'b010000111110,
3679
          12'b010100111111,
3680
          12'b1xxx00111110,
3681 2 bsa
          12'b010100100010,
3682
          12'b010111100011: alub_sel = `ALUB_IYH;
3683
          12'b1xxx01000011: alub_sel = `ALUB_BC;
3684
          12'b1xxx01010011: alub_sel = `ALUB_DE;
3685
          12'b1xxx01100011: alub_sel = `ALUB_HL;
3686
          12'b1xxx01110011: alub_sel = `ALUB_SP;
3687
          12'b000011000101: alub_sel = `ALUB_BC;
3688
          12'b000011010101: alub_sel = `ALUB_DE;
3689
          12'b000011100101: alub_sel = `ALUB_HL;
3690
          12'b000011110101: alub_sel = `ALUB_AF;
3691 8 bsa
          12'b1xxx01100101,
3692
          12'b1xxx01100110: alub_sel = `ALUB_TMP;
3693 2 bsa
          default:          alub_sel = `ALUB_PC;
3694
        endcase
3695
      end
3696
      `WR2A: begin
3697
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3698 8 bsa
          12'b1xxx10000010,
3699
          12'b1xxx10001010,
3700
          12'b1xxx10010010,
3701
          12'b1xxx10011010: alub_sel = `ALUB_CC;
3702 2 bsa
          12'b1xxx10100010,
3703
          12'b1xxx10101010,
3704
          12'b1xxx10110010,
3705
          12'b1xxx10111010: alub_sel = `ALUB_BC;
3706 8 bsa
          12'b1xxx10010100,
3707
          12'b1xxx10011100,
3708
          12'b1xxx11000010,
3709
          12'b1xxx11001010: alub_sel = `ALUB_DE;
3710 2 bsa
          12'b000011001101,
3711
          12'b000011xxx100: alub_sel = `ALUB_DIN;
3712
          default:          alub_sel = `ALUB_HL;
3713
        endcase
3714
      end
3715
      `WR2B: begin
3716
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3717 8 bsa
          12'b1xxx10000010,
3718
          12'b1xxx10000100,
3719
          12'b1xxx10001010,
3720
          12'b1xxx10001100,
3721
          12'b1xxx10010010,
3722
          12'b1xxx10011010,
3723
          12'b1xxx10100100,
3724
          12'b1xxx10101100,
3725 6 bsa
          12'b1xxx100xx011,
3726 2 bsa
          12'b1xxx10100010,
3727
          12'b1xxx10100011,
3728
          12'b1xxx10101010,
3729
          12'b1xxx10101011,
3730
          12'b1xxx10110010,
3731
          12'b1xxx10110011,
3732
          12'b1xxx10111010,
3733
          12'b1xxx10111011: alub_sel = `ALUB_BB;
3734 8 bsa
          12'b1xxx10010100,
3735
          12'b1xxx10011100,
3736
          12'b1xxx11000010,
3737
          12'b1xxx11000011,
3738
          12'b1xxx11001010,
3739
          12'b1xxx11001011,
3740
          12'b1xxx10110100,
3741
          12'b1xxx10111100,
3742 2 bsa
          12'b1xxx10100000,
3743
          12'b1xxx10101000,
3744
          12'b1xxx10110000,
3745
          12'b1xxx10111000: alub_sel = `ALUB_BC;
3746
          default:          alub_sel = `ALUB_PC;
3747
        endcase
3748
      end
3749
      `BLK1:                alub_sel = `ALUB_HL;
3750
      `BLK2:                alub_sel = (inst_reg[4]) ? `ALUB_BC : `ALUB_PC;
3751
      `PCA,
3752
      `PCO:                 alub_sel = `ALUB_PC;
3753
      `IF1A: begin
3754
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3755
          12'b1xxx10100011,
3756
          12'b1xxx10101011,
3757
          12'b1xxx10110011,
3758
          12'b1xxx10111011: alub_sel = `ALUB_BB;
3759 8 bsa
          12'b1xxx10100100,
3760
          12'b1xxx10101100,
3761 6 bsa
          12'b1xxx100xx011: alub_sel = `ALUB_CC;
3762 8 bsa
          12'b1xxx11000011,
3763
          12'b1xxx11001011,
3764 2 bsa
          12'b1xxx10100000,
3765
          12'b1xxx10101000,
3766 8 bsa
          12'b1xxx10110100,
3767
          12'b1xxx10111100,
3768 2 bsa
          12'b1xxx10110000,
3769
          12'b1xxx10111000: alub_sel = `ALUB_DE;
3770 8 bsa
          12'b1xxx10000010,
3771
          12'b1xxx10000100,
3772
          12'b1xxx10001010,
3773
          12'b1xxx10001100,
3774
          12'b1xxx10010010,
3775
          12'b1xxx10010100,
3776
          12'b1xxx10011010,
3777
          12'b1xxx10011100,
3778 2 bsa
          12'b1xxx10101010,
3779
          12'b1xxx10111010,
3780
          12'b1xxx10100010,
3781 8 bsa
          12'b1xxx10110010,
3782
          12'b1xxx11000010,
3783
          12'b1xxx11001010: alub_sel = `ALUB_HL;
3784 2 bsa
          default:          alub_sel = `ALUB_DIN;
3785
          endcase
3786
        end
3787
      `INTA:                alub_sel = `ALUB_SP;
3788
      `INTB:                alub_sel = `ALUB_PCH;
3789
      default:              alub_sel = `ALUB_PC;
3790
      endcase
3791
    end
3792
 
3793
  /*****************************************************************************************/
3794
  /*                                                                                       */
3795
  /*  register write control                                                               */
3796
  /*                                                                                       */
3797
  /*****************************************************************************************/
3798
  always @ (inst_reg or page_reg or state_reg or carry_bit or par_bit or sign_bit or
3799
            vector_int or zero_bit) begin
3800
    casex (state_reg) //synopsys parallel_case
3801
      `OF1B: begin
3802
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3803
          12'b000000010000: wr_addr = `WREG_BB;
3804
          default:          wr_addr = `WREG_NUL;
3805
          endcase
3806
        end
3807
      `OF2B: begin
3808
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3809
          12'b000011001101: wr_addr = `WREG_SP;
3810
          12'b000011000100: wr_addr = ( !zero_bit) ? `WREG_SP : `WREG_NUL;
3811
          12'b000011001100: wr_addr = (  zero_bit) ? `WREG_SP : `WREG_NUL;
3812
          12'b000011010100: wr_addr = (!carry_bit) ? `WREG_SP : `WREG_NUL;
3813
          12'b000011011100: wr_addr = ( carry_bit) ? `WREG_SP : `WREG_NUL;
3814
          12'b000011100100: wr_addr = (  !par_bit) ? `WREG_SP : `WREG_NUL;
3815
          12'b000011101100: wr_addr = (   par_bit) ? `WREG_SP : `WREG_NUL;
3816
          12'b000011110100: wr_addr = ( !sign_bit) ? `WREG_SP : `WREG_NUL;
3817
          12'b000011111100: wr_addr = (  sign_bit) ? `WREG_SP : `WREG_NUL;
3818
          default:          wr_addr = `WREG_NUL;
3819
          endcase
3820
        end
3821
      `IF3B:                wr_addr = `WREG_TMP;
3822 6 bsa
      `ADR1: begin
3823
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3824
          12'b1xxx01110100: wr_addr = `WREG_TMP;
3825
          default:          wr_addr = `WREG_NUL;
3826
        endcase
3827
      end
3828 2 bsa
      `ADR2: begin
3829
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3830 8 bsa
          12'b1xxx10100100,
3831
          12'b1xxx10101100: wr_addr = `WREG_HL;
3832
          12'b1xxx01100101,
3833
          12'b1xxx01100110,
3834 2 bsa
          12'b000011xxx111,
3835
          12'b000011xx0101,
3836
          12'b010011100101,
3837
          12'b010111100101: wr_addr = `WREG_SP;
3838 8 bsa
          12'b010000110001,
3839
          12'b010000110111,
3840
          12'b010000111110,
3841
          12'b010000111111,
3842
          12'b010000xx0111,
3843
          12'b010000xx1111,
3844
          12'b010100110001,
3845
          12'b010100110111,
3846
          12'b010100111110,
3847
          12'b010100111111,
3848
          12'b010100xx0111,
3849
          12'b010100xx1111,
3850 2 bsa
          12'b000000100010,
3851
          12'b000000101010,
3852
          12'b010000100010,
3853
          12'b010000101010,
3854
          12'b010000110100,
3855
          12'b010000110101,
3856
          12'b010100100010,
3857
          12'b010100101010,
3858
          12'b010100110100,
3859
          12'b010100110101,
3860
          12'b1xxx01xx0011,
3861
          12'b1xxx01xx1011: wr_addr = `WREG_TMP;
3862
          default:          wr_addr = `WREG_NUL;
3863
        endcase
3864
      end
3865
      `RD1A: begin
3866
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3867 8 bsa
          12'b1xxx10000010,
3868
          12'b1xxx10000100,
3869
          12'b1xxx10001010,
3870
          12'b1xxx10001100,
3871
          12'b1xxx10010010,
3872
          12'b1xxx10011010,
3873 6 bsa
          12'b1xxx100xx011,
3874 2 bsa
          12'b1xxx10100010,
3875
          12'b1xxx10100011,
3876
          12'b1xxx10101010,
3877
          12'b1xxx10101011,
3878
          12'b1xxx10110010,
3879
          12'b1xxx10110011,
3880
          12'b1xxx10111010,
3881
          12'b1xxx10111011: wr_addr = `WREG_BB;
3882 8 bsa
          12'b1xxx10010100,
3883
          12'b1xxx10011100,
3884
          12'b1xxx10110100,
3885
          12'b1xxx10111100,
3886
          12'b1xxx11000010,
3887
          12'b1xxx11000011,
3888
          12'b1xxx11001010,
3889
          12'b1xxx11001011,
3890 2 bsa
          12'b1xxx10100000,
3891
          12'b1xxx10100001,
3892
          12'b1xxx10101000,
3893
          12'b1xxx10101001,
3894
          12'b1xxx10110000,
3895
          12'b1xxx10110001,
3896
          12'b1xxx10111000,
3897
          12'b1xxx10111001: wr_addr = `WREG_BC;
3898
          default:          wr_addr = `WREG_NUL;
3899
        endcase
3900
      end
3901
      `RD1B: begin
3902
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3903
          12'b000011001001,
3904
          12'b000011xxx000,
3905
          12'b000011xx0001,
3906
          12'b010011100001,
3907
          12'b010111100001,
3908
          12'b1xxx01000101,
3909
          12'b1xxx01001101: wr_addr = `WREG_SP;
3910
          default:          wr_addr = `WREG_NUL;
3911
        endcase
3912
      end
3913
      `RD2A: begin
3914
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3915 8 bsa
          12'b1xxx10000010,
3916
          12'b1xxx10000100,
3917
          12'b1xxx10001010,
3918
          12'b1xxx10001100,
3919
          12'b1xxx10010010,
3920
          12'b1xxx10011010,
3921
          12'b1xxx10100100,
3922
          12'b1xxx10101100,
3923 6 bsa
          12'b1xxx100xx011,
3924 2 bsa
          12'b1xxx10100010,
3925
          12'b1xxx10100011,
3926
          12'b1xxx10101010,
3927
          12'b1xxx10101011,
3928
          12'b1xxx10110010,
3929
          12'b1xxx10110011,
3930
          12'b1xxx10111010,
3931
          12'b1xxx10111011: wr_addr = `WREG_BB;
3932 8 bsa
          12'b1xxx10010100,
3933
          12'b1xxx10011100,
3934
          12'b1xxx10110100,
3935
          12'b1xxx10111100,
3936
          12'b1xxx11000010,
3937
          12'b1xxx11000011,
3938
          12'b1xxx11001010,
3939
          12'b1xxx11001011,
3940 2 bsa
          12'b1xxx10100000,
3941
          12'b1xxx10100001,
3942
          12'b1xxx10101000,
3943
          12'b1xxx10101001,
3944
          12'b1xxx10110000,
3945
          12'b1xxx10110001,
3946
          12'b1xxx10111000,
3947
          12'b1xxx10111001: wr_addr = `WREG_BC;
3948
          default:          wr_addr = `WREG_NUL;
3949
        endcase
3950
      end
3951
      `RD2B: begin
3952
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3953 6 bsa
          12'b1xxx100xx011: wr_addr = `WREG_CC;
3954 8 bsa
          12'b1xxx10110100,
3955
          12'b1xxx10111100,
3956 2 bsa
          12'b1xxx10100000,
3957
          12'b1xxx10101000,
3958
          12'b1xxx10110000,
3959
          12'b1xxx10111000: wr_addr = `WREG_DE;
3960 8 bsa
          12'b1xxx10000010,
3961
          12'b1xxx10000100,
3962
          12'b1xxx10001010,
3963
          12'b1xxx10001100,
3964
          12'b1xxx10010010,
3965
          12'b1xxx10010100,
3966
          12'b1xxx10011010,
3967
          12'b1xxx10011100,
3968 2 bsa
          12'b1xxx10100010,
3969
          12'b1xxx10101010,
3970
          12'b1xxx10110010,
3971 8 bsa
          12'b1xxx10111010,
3972
          12'b1xxx11000010,
3973
          12'b1xxx11001010: wr_addr = `WREG_HL;
3974 2 bsa
          12'b000011001001,
3975
          12'b000011xxx000,
3976
          12'b000011xx0001,
3977
          12'b0001xxxxxxxx,
3978
          12'b010011100001,
3979
          12'b010111100001,
3980
          12'b1xxx01000101,
3981
          12'b1xxx01001101: wr_addr = `WREG_SP;
3982
          default:          wr_addr = `WREG_NUL;
3983
        endcase
3984 8 bsa
      end
3985
      `WR1A: begin
3986
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3987
          12'b1xxx01100101,
3988
          12'b1xxx01100110: wr_addr = `WREG_TMP;
3989
          default:          wr_addr = `WREG_NUL;
3990
        endcase
3991 2 bsa
      end
3992
      `WR1B: begin
3993
        casex ({page_reg, inst_reg}) //synopsys parallel_case
3994 8 bsa
          12'b1xxx10100100,
3995
          12'b1xxx10101100: wr_addr = `WREG_BB;
3996
          12'b1xxx10000010,
3997
          12'b1xxx10000100,
3998
          12'b1xxx10001010,
3999
          12'b1xxx10001100,
4000
          12'b1xxx10010010,
4001
          12'b1xxx10011010: wr_addr = `WREG_CC;
4002
          12'b1xxx10010100,
4003
          12'b1xxx10011100: wr_addr = `WREG_DE;
4004
          12'b1xxx10110100,
4005
          12'b1xxx10111100,
4006
          12'b1xxx11000011,
4007
          12'b1xxx11001011,
4008 6 bsa
          12'b1xxx100xx011,
4009 2 bsa
          12'b1xxx10100000,
4010
          12'b1xxx10100011,
4011
          12'b1xxx10101000,
4012
          12'b1xxx10101011,
4013
          12'b1xxx10110000,
4014
          12'b1xxx10110011,
4015
          12'b1xxx10111000,
4016
          12'b1xxx10111011: wr_addr = `WREG_HL;
4017 8 bsa
          12'b1xxx01100101,
4018
          12'b1xxx01100110,
4019 2 bsa
          12'b000011001101,
4020
          12'b000011xxx100,
4021
          12'b000011xxx111,
4022
          12'b000011xx0101,
4023
          12'b0001xxxxxxxx,
4024
          12'b010011100101,
4025
          12'b010111100101: wr_addr = `WREG_SP;
4026
          default:          wr_addr = `WREG_NUL;
4027
        endcase
4028
      end
4029
      `WR2B: begin
4030
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4031 8 bsa
          12'b1xxx10000010,
4032
          12'b1xxx10000100,
4033
          12'b1xxx10001010,
4034
          12'b1xxx10001100,
4035
          12'b1xxx10010010,
4036
          12'b1xxx10011010: wr_addr = `WREG_CC;
4037
          12'b1xxx10010100,
4038
          12'b1xxx10011100: wr_addr = `WREG_DE;
4039
          12'b1xxx10100100,
4040
          12'b1xxx10101100,
4041
          12'b1xxx10110100,
4042
          12'b1xxx10111100,
4043
          12'b1xxx11000011,
4044
          12'b1xxx11001011,
4045 6 bsa
          12'b1xxx100xx011,
4046 2 bsa
          12'b1xxx10100000,
4047
          12'b1xxx10100011,
4048
          12'b1xxx10101000,
4049
          12'b1xxx10101011,
4050
          12'b1xxx10110000,
4051
          12'b1xxx10110011,
4052
          12'b1xxx10111000,
4053
          12'b1xxx10111011: wr_addr = `WREG_HL;
4054
          default:          wr_addr = `WREG_NUL;
4055
        endcase
4056
      end
4057
      `BLK2: begin
4058
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4059
          12'b1xxx10100001,
4060
          12'b1xxx10101001,
4061
          12'b1xxx10110001,
4062
          12'b1xxx10111001: wr_addr = `WREG_HL;
4063
          default:          wr_addr = `WREG_NUL;
4064
        endcase
4065
      end
4066
      `IF1B: begin
4067
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4068 6 bsa
          12'b000000000111,
4069
          12'b000000001010,
4070
          12'b000000001111,
4071
          12'b000000010111,
4072
          12'b000000011010,
4073
          12'b000000011111,
4074
          12'b000000100111,
4075
          12'b000000101111,
4076
          12'b000000111010,
4077
          12'b00000011110x,
4078
          12'b000000111110,
4079
          12'b000001111xxx,
4080
          12'b000010000xxx,
4081
          12'b000010001xxx,
4082
          12'b000010010xxx,
4083
          12'b000010011xxx,
4084
          12'b000010100xxx,
4085
          12'b000010101xxx,
4086
          12'b000010110xxx,
4087
          12'b000011000110,
4088
          12'b000011001110,
4089
          12'b000011010110,
4090
          12'b000011011011,
4091
          12'b000011011110,
4092
          12'b000011100110,
4093
          12'b000011101110,
4094
          12'b000011110110,
4095
          12'b001000xxx111,
4096
          12'b00101xxxx111,
4097
          12'b010010000100,
4098
          12'b010010000101,
4099
          12'b010010000110,
4100
          12'b010010001100,
4101
          12'b010010001101,
4102
          12'b010010001110,
4103
          12'b010010010100,
4104
          12'b010010010101,
4105
          12'b010010010110,
4106
          12'b010010011100,
4107
          12'b010010011101,
4108
          12'b010010011110,
4109
          12'b010010100100,
4110
          12'b010010100101,
4111
          12'b010010100110,
4112
          12'b010010101100,
4113
          12'b010010101101,
4114
          12'b010010101110,
4115
          12'b010010110100,
4116
          12'b010010110101,
4117
          12'b010010110110,
4118
          12'b010110000100,
4119
          12'b010110000101,
4120
          12'b010110000110,
4121
          12'b010110001100,
4122
          12'b010110001101,
4123
          12'b010110001110,
4124
          12'b010110010100,
4125
          12'b010110010101,
4126
          12'b010110010110,
4127
          12'b010110011100,
4128
          12'b010110011101,
4129
          12'b010110011110,
4130
          12'b010110100100,
4131
          12'b010110100101,
4132
          12'b010110100110,
4133
          12'b010110101100,
4134
          12'b010110101101,
4135
          12'b010110101110,
4136
          12'b010110110100,
4137
          12'b010110110101,
4138
          12'b010110110110,
4139
          12'b010x0111110x,
4140
          12'b010x01111110,
4141
          12'b1xxx01000100,
4142
          12'b1xxx01010111,
4143
          12'b1xxx01011111,
4144
          12'b1xxx01100111,
4145
          12'b1xxx01101111,
4146
          12'b1xxx0x111000: wr_addr = `WREG_AA;
4147
          12'b000011110001: wr_addr = `WREG_AF;
4148
          12'b00000000010x,
4149
          12'b000000000110,
4150
          12'b000001000xxx,
4151
          12'b001000xxx000,
4152
          12'b00101xxxx000,
4153
          12'b010x0100010x,
4154
          12'b010x01000110,
4155
          12'b1xxx0x000000,
4156 2 bsa
          12'b1xxx10100011,
4157
          12'b1xxx10101011,
4158
          12'b1xxx10110011,
4159
          12'b1xxx10111011: wr_addr = `WREG_BB;
4160 8 bsa
          12'b010000000111,
4161
          12'b010100000111,
4162
          12'b1xxx00000111,
4163
          12'b1xxx00000010,
4164
          12'b1xxx00000011,
4165 2 bsa
          12'b000000000001,
4166 6 bsa
          12'b00000000x011,
4167
          12'b000011000001,
4168
          12'b1xxx01001100,
4169 2 bsa
          12'b1xxx01001011: wr_addr = `WREG_BC;
4170 8 bsa
          12'b1xxx10100100,
4171
          12'b1xxx10101100,
4172 6 bsa
          12'b00000000110x,
4173
          12'b000000001110,
4174
          12'b000001001xxx,
4175
          12'b001000xxx001,
4176
          12'b00101xxxx001,
4177
          12'b010x0100110x,
4178
          12'b010x01001110,
4179
          12'b1xxx100xx011,
4180
          12'b1xxx0x001000: wr_addr = `WREG_CC;
4181
          12'b00000001010x,
4182
          12'b000000010110,
4183
          12'b000001010xxx,
4184
          12'b001000xxx010,
4185
          12'b00101xxxx010,
4186
          12'b010x0101010x,
4187
          12'b010x01010110,
4188
          12'b1xxx0x010000: wr_addr = `WREG_DD;
4189 8 bsa
          12'b010000010111,
4190
          12'b010100010111,
4191
          12'b1xxx00010111,
4192
          12'b1xxx10110100,
4193
          12'b1xxx10111100,
4194
          12'b1xxx00010010,
4195
          12'b1xxx00010011,
4196 6 bsa
          12'b000011010001,
4197
          12'b00000001x011,
4198 2 bsa
          12'b000000010001,
4199 6 bsa
          12'b1xxx01011100,
4200 4 bsa
          12'b1xxx01011011,
4201 6 bsa
          12'b1xxx10100000,
4202
          12'b1xxx10101000,
4203
          12'b1xxx10110000,
4204
          12'b1xxx10111000: wr_addr = `WREG_DE;
4205
          12'b000011101011: wr_addr = `WREG_DEHL;
4206
          12'b00000001110x,
4207
          12'b000000011110,
4208
          12'b000001011xxx,
4209
          12'b001000xxx011,
4210
          12'b00101xxxx011,
4211
          12'b010x0101110x,
4212
          12'b010x01011110,
4213
          12'b1xxx0x011000: wr_addr = `WREG_EE;
4214
          12'b00000010010x,
4215
          12'b000000100110,
4216
          12'b000001100xxx,
4217
          12'b001000xxx100,
4218
          12'b00101xxxx100,
4219
          12'b010x01100110,
4220
          12'b1xxx0x100000: wr_addr = `WREG_HH;
4221 8 bsa
          12'b010000100111,
4222
          12'b010100100111,
4223
          12'b1xxx00100010,
4224
          12'b1xxx00100011,
4225
          12'b1xxx00100111,
4226
          12'b1xxx10000010,
4227
          12'b1xxx10000100,
4228
          12'b1xxx10001010,
4229
          12'b1xxx10001100,
4230
          12'b1xxx10010010,
4231
          12'b1xxx10010100,
4232
          12'b1xxx10011010,
4233
          12'b1xxx10011100,
4234 2 bsa
          12'b000000100001,
4235 6 bsa
          12'b000000101010,
4236
          12'b00000010x011,
4237
          12'b000000xx1001,
4238
          12'b000011100001,
4239
          12'b000011100011,
4240
          12'b1xxx01101100,
4241
          12'b1xxx01101011,
4242
          12'b1xxx01xx0010,
4243
          12'b1xxx01xx1010,
4244
          12'b1xxx10100010,
4245
          12'b1xxx10101010,
4246
          12'b1xxx10110010,
4247 8 bsa
          12'b1xxx10111010,
4248
          12'b1xxx11000010,
4249
          12'b1xxx11001010: wr_addr = `WREG_HL;
4250 6 bsa
          12'b1xxx01000111: wr_addr = `WREG_II;
4251 8 bsa
          12'b010000110111,
4252
          12'b010100110001,
4253
          12'b1xxx00110111,
4254
          12'b1xxx00110010,
4255
          12'b1xxx01010100,
4256 6 bsa
          12'b010000100001,
4257
          12'b010000100011,
4258
          12'b010000101010,
4259
          12'b010000101011,
4260
          12'b010000xx1001,
4261
          12'b010011100001,
4262
          12'b010011100011: wr_addr = `WREG_IX;
4263
          12'b010000100100,
4264
          12'b010000100101,
4265
          12'b010000100110,
4266
          12'b0100011000xx,
4267
          12'b01000110010x,
4268
          12'b010001100111: wr_addr = `WREG_IXH;
4269
          12'b010000101100,
4270
          12'b010000101101,
4271
          12'b010000101110,
4272
          12'b0100011010xx,
4273
          12'b01000110110x,
4274
          12'b010001101111: wr_addr = `WREG_IXL;
4275 8 bsa
          12'b010000110001,
4276
          12'b010100110111,
4277
          12'b1xxx00110110,
4278
          12'b1xxx00110011,
4279
          12'b1xxx01010101,
4280 6 bsa
          12'b010100100001,
4281
          12'b010100100011,
4282
          12'b010100101010,
4283
          12'b010100101011,
4284
          12'b010100xx1001,
4285
          12'b010111100001,
4286
          12'b010111100011: wr_addr = `WREG_IY;
4287
          12'b010100100100,
4288
          12'b010100100101,
4289
          12'b010100100110,
4290
          12'b0101011000xx,
4291
          12'b01010110010x,
4292
          12'b010101100111: wr_addr = `WREG_IYH;
4293
          12'b010100101100,
4294
          12'b010100101101,
4295
          12'b010100101110,
4296
          12'b0101011010xx,
4297
          12'b01010110110x,
4298
          12'b010101101111: wr_addr = `WREG_IYL;
4299
          12'b00000010110x,
4300
          12'b000000101110,
4301
          12'b000001101xxx,
4302
          12'b001000xxx101,
4303
          12'b00101xxxx101,
4304
          12'b010x01101110,
4305
          12'b1xxx0x101000: wr_addr = `WREG_LL;
4306
          12'b1xxx01001111: wr_addr = `WREG_RR;
4307 2 bsa
          12'b000000110001,
4308 6 bsa
          12'b00000011x011,
4309
          12'b000011111001,
4310
          12'b010x11111001,
4311
          12'b1xxx01111100,
4312 2 bsa
          12'b1xxx01111011: wr_addr = `WREG_SP;
4313
          default:          wr_addr = `WREG_NUL;
4314
          endcase
4315
        end
4316
      `INTB:                wr_addr = (vector_int) ? `WREG_TMP : `WREG_SP;
4317
      default:              wr_addr = `WREG_NUL;
4318
      endcase
4319
    end
4320
 
4321
  /*****************************************************************************************/
4322
  /*                                                                                       */
4323
  /*  s flag control                                                                       */
4324
  /*                                                                                       */
4325
  /*****************************************************************************************/
4326
  always @ (inst_reg or page_reg or state_reg) begin
4327
    casex (state_reg) //synopsys parallel_case
4328
      `WR2A: begin
4329
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4330 6 bsa
          12'b000000110100,
4331
          12'b000000110101,
4332
          12'b001000xxxxxx,
4333
          12'b010000110100,
4334
          12'b010000110101,
4335
          12'b010100110100,
4336
          12'b010100110101,
4337 4 bsa
          12'b011x00xxxxxx: sflg_en = 1'b1;
4338 2 bsa
          default:          sflg_en = 1'b0;
4339
          endcase
4340
        end
4341
      `BLK1: begin
4342
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4343
          12'b1xxx10100001,
4344
          12'b1xxx10101001,
4345
          12'b1xxx10110001,
4346
          12'b1xxx10111001: sflg_en = 1'b1;
4347
          default:          sflg_en = 1'b0;
4348
        endcase
4349
      end
4350
      `IF1B: begin
4351
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4352
          12'b000000100111,
4353 4 bsa
          12'b0000000xx100,12'b00000010x100,12'b000000111100,
4354
          12'b0000000xx101,12'b00000010x101,12'b000000111101,
4355 6 bsa
          12'b000010000110,
4356
          12'b000010000xxx,
4357
          12'b000010001110,
4358
          12'b000010001xxx,
4359
          12'b000010010110,
4360
          12'b000010010xxx,
4361
          12'b000010011110,
4362
          12'b000010011xxx,
4363
          12'b000010100110,
4364
          12'b000010100xxx,
4365
          12'b000010101110,
4366
          12'b000010101xxx,
4367
          12'b000010110110,
4368
          12'b000010110xxx,
4369
          12'b000010111110,
4370
          12'b000010111xxx,
4371
          12'b000011000110,
4372
          12'b000011001110,
4373
          12'b000011010110,
4374
          12'b000011011110,
4375
          12'b000011100110,
4376
          12'b000011101110,
4377
          12'b000011110110,
4378
          12'b000011111110,
4379
          12'b001000xxx0xx,
4380
          12'b001000xxx10x,
4381
          12'b001000xxx111,
4382
          12'b010000100100,
4383
          12'b010000100101,
4384
          12'b010000101100,
4385
          12'b010000101101,
4386
          12'b010010000100,
4387
          12'b010010000101,
4388
          12'b010010000110,
4389
          12'b010010001100,
4390
          12'b010010001101,
4391
          12'b010010001110,
4392
          12'b010010010100,
4393
          12'b010010010101,
4394
          12'b010010010110,
4395
          12'b010010011100,
4396
          12'b010010011101,
4397
          12'b010010011110,
4398
          12'b010010100100,
4399
          12'b010010100101,
4400
          12'b010010100110,
4401
          12'b010010101100,
4402
          12'b010010101101,
4403
          12'b010010101110,
4404
          12'b010010110100,
4405
          12'b010010110101,
4406
          12'b010010110110,
4407
          12'b010010111100,
4408
          12'b010010111101,
4409
          12'b010010111110,
4410
          12'b010100100100,
4411
          12'b010100100101,
4412
          12'b010100101100,
4413
          12'b010100101101,
4414
          12'b010110000100,
4415
          12'b010110000101,
4416
          12'b010110000110,
4417
          12'b010110001100,
4418
          12'b010110001101,
4419
          12'b010110001110,
4420
          12'b010110010100,
4421
          12'b010110010101,
4422
          12'b010110010110,
4423
          12'b010110011100,
4424
          12'b010110011101,
4425
          12'b010110011110,
4426
          12'b010110100100,
4427
          12'b010110100101,
4428
          12'b010110100110,
4429
          12'b010110101100,
4430
          12'b010110101101,
4431
          12'b010110101110,
4432
          12'b010110110100,
4433
          12'b010110110101,
4434
          12'b010110110110,
4435
          12'b010110111100,
4436
          12'b010110111101,
4437
          12'b010110111110,
4438
          12'b1xxx00110100,
4439
          12'b1xxx00xxxx00,
4440
          12'b1xxx011x0100,
4441
          12'b1xxx01000100,
4442
          12'b1xxx01010111,
4443
          12'b1xxx01011111,
4444
          12'b1xxx01100111,
4445
          12'b1xxx01101111,
4446
          12'b1xxx01xxx000,
4447
          12'b1xxx01xx0010,
4448 2 bsa
          12'b1xxx01xx1010: sflg_en = 1'b1;
4449
          default:          sflg_en = 1'b0;
4450
        endcase
4451
      end
4452
      default:              sflg_en = 1'b0;
4453
      endcase
4454
    end
4455
 
4456
  /*****************************************************************************************/
4457
  /*                                                                                       */
4458
  /*  z flag control                                                                       */
4459
  /*                                                                                       */
4460
  /*****************************************************************************************/
4461
  always @ (inst_reg or page_reg or state_reg) begin
4462
    casex (state_reg) //synopsys parallel_case
4463
      `RD1A,
4464
      `RD2A: begin
4465
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4466 8 bsa
          12'b1xxx10000010,
4467
          12'b1xxx10000100,
4468
          12'b1xxx10001010,
4469
          12'b1xxx10001100,
4470
          12'b1xxx10010010,
4471
          12'b1xxx10010100,
4472
          12'b1xxx10011010,
4473
          12'b1xxx10011100,
4474
          12'b1xxx10110100,
4475
          12'b1xxx10111100,
4476
          12'b1xxx11000010,
4477
          12'b1xxx11000011,
4478
          12'b1xxx11001010,
4479
          12'b1xxx11001011,
4480 6 bsa
          12'b1xxx100xx011,
4481 2 bsa
          12'b1xxx10100010,
4482
          12'b1xxx10100011,
4483
          12'b1xxx10101010,
4484
          12'b1xxx10101011,
4485
          12'b1xxx10110010,
4486
          12'b1xxx10110011,
4487
          12'b1xxx10111010,
4488
          12'b1xxx10111011: zflg_en = 1'b1;
4489
          default:          zflg_en = 1'b0;
4490
          endcase
4491
        end
4492 8 bsa
      `WR1B: begin
4493
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4494
          12'b1xxx10100100,
4495
          12'b1xxx10101100: zflg_en = 1'b1;
4496
          default:          zflg_en = 1'b0;
4497
        endcase
4498
      end
4499 2 bsa
      `WR2A: begin
4500
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4501 6 bsa
          12'b000000110100,
4502
          12'b000000110101,
4503
          12'b001000xxxxxx,
4504
          12'b010000110100,
4505
          12'b010000110101,
4506
          12'b010100110100,
4507
          12'b010100110101,
4508 4 bsa
          12'b011x00xxxxxx: zflg_en = 1'b1;
4509 2 bsa
          default:          zflg_en = 1'b0;
4510
        endcase
4511
      end
4512
      `BLK1: begin
4513
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4514
          12'b1xxx10100001,
4515
          12'b1xxx10101001,
4516
          12'b1xxx10110001,
4517
          12'b1xxx10111001: zflg_en = 1'b1;
4518
          default:          zflg_en = 1'b0;
4519
        endcase
4520
      end
4521
      `IF1B: begin
4522
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4523
          12'b000000100111,
4524 4 bsa
          12'b0000000xx100,12'b00000010x100,12'b000000111100,
4525
          12'b0000000xx101,12'b00000010x101,12'b000000111101,
4526 2 bsa
          12'b000010000110,
4527
          12'b000010000xxx,
4528
          12'b000010001110,
4529
          12'b000010001xxx,
4530
          12'b000010010110,
4531
          12'b000010010xxx,
4532
          12'b000010011110,
4533
          12'b000010011xxx,
4534
          12'b000010100110,
4535
          12'b000010100xxx,
4536
          12'b000010101110,
4537
          12'b000010101xxx,
4538
          12'b000010110110,
4539
          12'b000010110xxx,
4540
          12'b000010111110,
4541
          12'b000010111xxx,
4542
          12'b000011000110,
4543
          12'b000011001110,
4544
          12'b000011010110,
4545
          12'b000011011110,
4546
          12'b000011100110,
4547
          12'b000011101110,
4548
          12'b000011110110,
4549
          12'b000011111110,
4550 4 bsa
          12'b001000xxx0xx,12'b001000xxx10x,12'b001000xxx111,
4551 2 bsa
          12'b001001xxx110,
4552
          12'b001001xxxxxx,
4553 4 bsa
          12'b010000100100,
4554
          12'b010000100101,
4555
          12'b010000101100,
4556
          12'b010000101101,
4557
          12'b010010000100,
4558
          12'b010010000101,
4559 2 bsa
          12'b010010000110,
4560 4 bsa
          12'b010010001100,
4561
          12'b010010001101,
4562 2 bsa
          12'b010010001110,
4563 4 bsa
          12'b010010010100,
4564
          12'b010010010101,
4565 2 bsa
          12'b010010010110,
4566 4 bsa
          12'b010010011100,
4567
          12'b010010011101,
4568 2 bsa
          12'b010010011110,
4569 4 bsa
          12'b010010100100,
4570
          12'b010010100101,
4571 2 bsa
          12'b010010100110,
4572 4 bsa
          12'b010010101100,
4573
          12'b010010101101,
4574 2 bsa
          12'b010010101110,
4575 4 bsa
          12'b010010110100,
4576
          12'b010010110101,
4577 2 bsa
          12'b010010110110,
4578 4 bsa
          12'b010010111100,
4579
          12'b010010111101,
4580 2 bsa
          12'b010010111110,
4581 4 bsa
          12'b010100100100,
4582
          12'b010100100101,
4583
          12'b010100101100,
4584
          12'b010100101101,
4585
          12'b010110000100,
4586
          12'b010110000101,
4587 2 bsa
          12'b010110000110,
4588 4 bsa
          12'b010110001100,
4589
          12'b010110001101,
4590 2 bsa
          12'b010110001110,
4591 4 bsa
          12'b010110010100,
4592
          12'b010110010101,
4593 2 bsa
          12'b010110010110,
4594 4 bsa
          12'b010110011100,
4595
          12'b010110011101,
4596 2 bsa
          12'b010110011110,
4597 4 bsa
          12'b010110100100,
4598
          12'b010110100101,
4599 2 bsa
          12'b010110100110,
4600 4 bsa
          12'b010110101100,
4601
          12'b010110101101,
4602 2 bsa
          12'b010110101110,
4603 4 bsa
          12'b010110110100,
4604
          12'b010110110101,
4605 2 bsa
          12'b010110110110,
4606 4 bsa
          12'b010110111100,
4607
          12'b010110111101,
4608 2 bsa
          12'b010110111110,
4609
          12'b011001xxx110,
4610
          12'b011101xxx110,
4611 6 bsa
          12'b1xxx00xxxx00,
4612 2 bsa
          12'b1xxx01000100,
4613
          12'b1xxx01010111,
4614
          12'b1xxx01011111,
4615
          12'b1xxx01100111,
4616
          12'b1xxx01101111,
4617 6 bsa
          12'b1xxx011x0100,
4618 2 bsa
          12'b1xxx01xxx000,
4619
          12'b1xxx01xx0010,
4620
          12'b1xxx01xx1010,
4621
          12'b1xxx10100011,
4622
          12'b1xxx10101011,
4623
          12'b1xxx10110011,
4624
          12'b1xxx10111011: zflg_en = 1'b1;
4625
          default:          zflg_en = 1'b0;
4626
        endcase
4627
      end
4628
      default:              zflg_en = 1'b0;
4629
      endcase
4630
    end
4631
 
4632
  /*****************************************************************************************/
4633
  /*                                                                                       */
4634
  /*  h flag control                                                                       */
4635
  /*                                                                                       */
4636
  /*****************************************************************************************/
4637
  always @ (inst_reg or page_reg or state_reg) begin
4638
    casex (state_reg) //synopsys parallel_case
4639
      `WR2A: begin
4640
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4641 4 bsa
          12'b001000xxxxxx,
4642
          12'b011x00xxxxxx,
4643 2 bsa
          12'b1xxx01100111,
4644
          12'b1xxx01101111: hflg_ctl = `HFLG_0;
4645
          12'b000000110100,
4646
          12'b000000110101,
4647
          12'b010x00110100,
4648
          12'b010x00110101: hflg_ctl = `HFLG_H;
4649
          default:          hflg_ctl = `HFLG_NUL;
4650
          endcase
4651
        end
4652
      `BLK1: begin
4653
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4654
          12'b1xxx10100001,
4655
          12'b1xxx10101001,
4656
          12'b1xxx10110001,
4657
          12'b1xxx10111001: hflg_ctl = `HFLG_H;
4658
          default:          hflg_ctl = `HFLG_NUL;
4659
        endcase
4660
      end
4661
      `IF1B: begin
4662
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4663 6 bsa
          12'b000000000111,
4664
          12'b000000001111,
4665
          12'b000000010111,
4666
          12'b000000011111,
4667
          12'b000000110111,
4668
          12'b000010101110,
4669
          12'b000010101xxx,
4670
          12'b000010110110,
4671
          12'b000010110xxx,
4672
          12'b000011101110,
4673
          12'b000011110110,
4674
          12'b001000000xxx,
4675
          12'b001000001xxx,
4676
          12'b001000010xxx,
4677
          12'b001000011xxx,
4678
          12'b001000100xxx,
4679
          12'b001000101xxx,
4680
          12'b001000110xxx,
4681
          12'b001000111xxx,
4682
          12'b010010101100,
4683
          12'b010010101101,
4684
          12'b010010101110,
4685
          12'b010010110100,
4686
          12'b010010110101,
4687
          12'b010010110110,
4688
          12'b010110101100,
4689
          12'b010110101101,
4690
          12'b010110101110,
4691
          12'b010110110100,
4692
          12'b010110110101,
4693
          12'b010110110110,
4694
          12'b1xxx00xxx000,
4695
          12'b1xxx01010111,
4696
          12'b1xxx01011111,
4697
          12'b1xxx01xxx000,
4698
          12'b1xxx10100000,
4699
          12'b1xxx10101000,
4700
          12'b1xxx10110000,
4701 2 bsa
          12'b1xxx10111000: hflg_ctl = `HFLG_0;
4702 6 bsa
          12'b000000101111,
4703
          12'b000010100110,
4704
          12'b000010100xxx,
4705
          12'b000011100110,
4706
          12'b001001xxx110,
4707
          12'b001001xxxxxx,
4708
          12'b010010100100,
4709
          12'b010010100101,
4710
          12'b010010100110,
4711
          12'b010110100100,
4712
          12'b010110100101,
4713
          12'b010110100110,
4714
          12'b011001xxx110,
4715
          12'b011101xxx110,
4716
          12'b1xxx00xxx100,
4717
          12'b1xxx011x0100: hflg_ctl = `HFLG_1;
4718 4 bsa
          12'b000000111111,
4719 6 bsa
          12'b000000100111,
4720 4 bsa
          12'b0000000xx100,12'b00000010x100,12'b000000111100,
4721
          12'b0000000xx101,12'b00000010x101,12'b000000111101,
4722 6 bsa
          12'b000000xx1001,
4723
          12'b000010000110,
4724
          12'b000010000xxx,
4725
          12'b000010001110,
4726
          12'b000010001xxx,
4727
          12'b000010010110,
4728
          12'b000010010xxx,
4729
          12'b000010011110,
4730
          12'b000010011xxx,
4731
          12'b000010111110,
4732
          12'b000010111xxx,
4733
          12'b000011000110,
4734
          12'b000011001110,
4735
          12'b000011010110,
4736
          12'b000011011110,
4737
          12'b000011111110,
4738
          12'b010000100100,
4739
          12'b010000100101,
4740
          12'b010000101100,
4741
          12'b010000101101,
4742
          12'b010000xx1001,
4743
          12'b010010000100,
4744
          12'b010010000101,
4745
          12'b010010000110,
4746
          12'b010010001100,
4747
          12'b010010001101,
4748
          12'b010010001110,
4749
          12'b010010010100,
4750
          12'b010010010101,
4751
          12'b010010010110,
4752
          12'b010010011100,
4753
          12'b010010011101,
4754
          12'b010010011110,
4755
          12'b010010111100,
4756
          12'b010010111101,
4757
          12'b010010111110,
4758
          12'b010100100100,
4759
          12'b010100100101,
4760
          12'b010100101100,
4761
          12'b010100101101,
4762
          12'b010100xx1001,
4763
          12'b010110000100,
4764
          12'b010110000101,
4765
          12'b010110000110,
4766
          12'b010110001100,
4767
          12'b010110001101,
4768
          12'b010110001110,
4769
          12'b010110010100,
4770
          12'b010110010101,
4771
          12'b010110010110,
4772
          12'b010110011100,
4773
          12'b010110011101,
4774
          12'b010110011110,
4775
          12'b010110111100,
4776
          12'b010110111101,
4777
          12'b010110111110,
4778
          12'b1xxx01000100,
4779
          12'b1xxx01xx0010,
4780 2 bsa
          12'b1xxx01xx1010: hflg_ctl = `HFLG_H;
4781
          default:          hflg_ctl = `HFLG_NUL;
4782
        endcase
4783
      end
4784
      default:              hflg_ctl = `HFLG_NUL;
4785
      endcase
4786
    end
4787
 
4788
  /*****************************************************************************************/
4789
  /*                                                                                       */
4790
  /*  pv flag control                                                                      */
4791
  /*                                                                                       */
4792
  /*****************************************************************************************/
4793
  always @ (inst_reg or page_reg or state_reg) begin
4794
    casex (state_reg) //synopsys parallel_case
4795
      `RD1A,
4796
      `RD2A: begin
4797
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4798
          12'b1xxx10100000,
4799
          12'b1xxx10100001,
4800
          12'b1xxx10101000,
4801
          12'b1xxx10101001,
4802
          12'b1xxx10110000,
4803
          12'b1xxx10110001,
4804
          12'b1xxx10111000,
4805
          12'b1xxx10111001: pflg_ctl = `PFLG_B;
4806
          default:          pflg_ctl = `PFLG_NUL;
4807
          endcase
4808
        end
4809
      `WR2A: begin
4810
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4811 6 bsa
          12'b001000xxxxxx,
4812 4 bsa
          12'b011x00xxxxxx: pflg_ctl = `PFLG_P;
4813 2 bsa
          12'b000000110100,
4814
          12'b000000110101,
4815
          12'b010000110100,
4816
          12'b010000110101,
4817
          12'b010100110100,
4818
          12'b010100110101: pflg_ctl = `PFLG_V;
4819
          default:          pflg_ctl = `PFLG_NUL;
4820
        endcase
4821
      end
4822
      `IF1B: begin
4823
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4824
          12'b1xxx01010111,
4825
          12'b1xxx01011111: pflg_ctl = `PFLG_F;
4826 6 bsa
          12'b000000100111,
4827
          12'b000010100110,
4828
          12'b000010100xxx,
4829
          12'b000010101110,
4830
          12'b000010101xxx,
4831
          12'b000010110110,
4832
          12'b000010110xxx,
4833
          12'b000011100110,
4834
          12'b000011101110,
4835
          12'b000011110110,
4836 4 bsa
          12'b001000xxx0xx,12'b001000xxx10x,12'b001000xxx111,
4837 6 bsa
          12'b010010100100,
4838
          12'b010010100101,
4839
          12'b010010100110,
4840
          12'b010010101100,
4841
          12'b010010101101,
4842
          12'b010010101110,
4843
          12'b010010110100,
4844
          12'b010010110101,
4845
          12'b010010110110,
4846
          12'b010110100100,
4847
          12'b010110100101,
4848
          12'b010110100110,
4849
          12'b010110101100,
4850
          12'b010110101101,
4851
          12'b010110101110,
4852
          12'b010110110100,
4853
          12'b010110110101,
4854
          12'b010110110110,
4855
          12'b1xxx00xxxx00,
4856
          12'b1xxx00110100,
4857
          12'b1xxx011x0100,
4858
          12'b1xxx01100111,
4859
          12'b1xxx01101111,
4860 2 bsa
          12'b1xxx01xxx000: pflg_ctl = `PFLG_P;
4861 4 bsa
          12'b0000000xx100,12'b00000010x100,12'b000000111100,
4862
          12'b0000000xx101,12'b00000010x101,12'b000000111101,
4863 6 bsa
          12'b000010000110,
4864
          12'b000010000xxx,
4865
          12'b000010001110,
4866
          12'b000010001xxx,
4867
          12'b000010010110,
4868
          12'b000010010xxx,
4869
          12'b000010011110,
4870
          12'b000010011xxx,
4871
          12'b000010111110,
4872
          12'b000010111xxx,
4873
          12'b000011000110,
4874
          12'b000011001110,
4875
          12'b000011010110,
4876
          12'b000011011110,
4877
          12'b000011111110,
4878
          12'b010000100100,
4879
          12'b010000100101,
4880
          12'b010000101100,
4881
          12'b010000101101,
4882
          12'b010010000100,
4883
          12'b010010000101,
4884
          12'b010010000110,
4885
          12'b010010001100,
4886
          12'b010010001101,
4887
          12'b010010001110,
4888
          12'b010010010100,
4889
          12'b010010010101,
4890
          12'b010010010110,
4891
          12'b010010011100,
4892
          12'b010010011101,
4893
          12'b010010011110,
4894
          12'b010010111100,
4895
          12'b010010111101,
4896
          12'b010010111110,
4897
          12'b010100100100,
4898
          12'b010100100101,
4899
          12'b010100101100,
4900
          12'b010100101101,
4901
          12'b010110000100,
4902
          12'b010110000101,
4903
          12'b010110000110,
4904
          12'b010110001100,
4905
          12'b010110001101,
4906
          12'b010110001110,
4907
          12'b010110010100,
4908
          12'b010110010101,
4909
          12'b010110010110,
4910
          12'b010110011100,
4911
          12'b010110011101,
4912
          12'b010110011110,
4913
          12'b010110111100,
4914
          12'b010110111101,
4915
          12'b010110111110,
4916
          12'b1xxx01000100,
4917
          12'b1xxx01xx0010,
4918 2 bsa
          12'b1xxx01xx1010: pflg_ctl = `PFLG_V;
4919
          default:          pflg_ctl = `PFLG_NUL;
4920
        endcase
4921
      end
4922
      default:              pflg_ctl = `PFLG_NUL;
4923
      endcase
4924
    end
4925
 
4926
  /*****************************************************************************************/
4927
  /*                                                                                       */
4928
  /*  n flag control                                                                       */
4929
  /*                                                                                       */
4930
  /*****************************************************************************************/
4931
  always @ (inst_reg or page_reg or state_reg) begin
4932
    casex (state_reg) //synopsys parallel_case
4933
      `WR1A,
4934
      `WR2A: begin
4935
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4936
          12'b1xxx10100010,
4937
          12'b1xxx10100011,
4938
          12'b1xxx10101010,
4939
          12'b1xxx10101011,
4940
          12'b1xxx10110010,
4941
          12'b1xxx10110011,
4942
          12'b1xxx10111010,
4943
          12'b1xxx10111011: nflg_ctl = `NFLG_S;
4944
          default:          nflg_ctl = `NFLG_NUL;
4945
          endcase
4946
        end
4947
      `IF1B: begin
4948
        casex ({page_reg, inst_reg}) //synopsys parallel_case
4949 6 bsa
          12'b000000000111,
4950
          12'b000000001111,
4951
          12'b000000010111,
4952
          12'b000000011111,
4953
          12'b000000110100,
4954
          12'b000000110111,
4955
          12'b000000111111,
4956
          12'b000000xxx100,
4957
          12'b000000xx1001,
4958
          12'b000010000110,
4959
          12'b000010000xxx,
4960
          12'b000010001110,
4961
          12'b000010001xxx,
4962
          12'b000010100110,
4963
          12'b000010100xxx,
4964
          12'b000010101110,
4965
          12'b000010101xxx,
4966
          12'b000010110110,
4967
          12'b000010110xxx,
4968
          12'b000011000110,
4969
          12'b000011001110,
4970
          12'b000011100110,
4971
          12'b000011101110,
4972
          12'b000011110110,
4973
          12'b010000100100,
4974
          12'b010000101100,
4975
          12'b010000110100,
4976
          12'b010000xx1001,
4977
          12'b010010000100,
4978
          12'b010010000101,
4979
          12'b010010000110,
4980
          12'b010010001100,
4981
          12'b010010001101,
4982
          12'b010010001110,
4983
          12'b010010100100,
4984
          12'b010010100101,
4985
          12'b010010100110,
4986
          12'b010010101100,
4987
          12'b010010101101,
4988
          12'b010010101110,
4989
          12'b010010110100,
4990
          12'b010010110101,
4991
          12'b010010110110,
4992
          12'b010100100100,
4993
          12'b010100101100,
4994
          12'b010100110100,
4995
          12'b010100xx1001,
4996
          12'b010110000100,
4997
          12'b010110000101,
4998
          12'b010110000110,
4999
          12'b010110001100,
5000
          12'b010110001101,
5001
          12'b010110001110,
5002
          12'b010110100100,
5003
          12'b010110100101,
5004
          12'b010110100110,
5005
          12'b010110101100,
5006
          12'b010110101101,
5007
          12'b010110101110,
5008
          12'b010110110100,
5009
          12'b010110110101,
5010
          12'b010110110110,
5011
          12'b00100xxxxxxx,
5012
          12'b011x0xxxxxxx,
5013
          12'b1xxx00xxxx00,
5014
          12'b1xxx00110100,
5015
          12'b1xxx011x0100,
5016
          12'b1xxx01010111,
5017
          12'b1xxx01011111,
5018
          12'b1xxx01100111,
5019
          12'b1xxx01101111,
5020
          12'b1xxx01xxx000,
5021
          12'b1xxx01xx1010,
5022
          12'b1xxx10100000,
5023
          12'b1xxx10101000,
5024
          12'b1xxx10110000,
5025 2 bsa
          12'b1xxx10111000: nflg_ctl = `NFLG_0;
5026 8 bsa
          12'b1xxx10000010,
5027
          12'b1xxx10000100,
5028
          12'b1xxx10001010,
5029
          12'b1xxx10001100,
5030
          12'b1xxx10010010,
5031
          12'b1xxx10010100,
5032
          12'b1xxx10011010,
5033
          12'b1xxx10011100,
5034
          12'b1xxx10100100,
5035
          12'b1xxx10101100,
5036
          12'b1xxx10110100,
5037
          12'b1xxx10111100,
5038
          12'b1xxx11000010,
5039
          12'b1xxx11000011,
5040
          12'b1xxx11001010,
5041
          12'b1xxx11001011,
5042 6 bsa
          12'b000000101111,
5043
          12'b000000110101,
5044
          12'b000000xxx101,
5045
          12'b000010010110,
5046
          12'b000010010xxx,
5047
          12'b000010011110,
5048
          12'b000010011xxx,
5049
          12'b000010111110,
5050
          12'b000010111xxx,
5051
          12'b000011010110,
5052
          12'b000011011110,
5053
          12'b000011111110,
5054
          12'b010000100101,
5055
          12'b010000101101,
5056
          12'b010000110101,
5057
          12'b010010010100,
5058
          12'b010010010101,
5059
          12'b010010010110,
5060
          12'b010010011100,
5061
          12'b010010011101,
5062
          12'b010010011110,
5063
          12'b010010111100,
5064
          12'b010010111101,
5065
          12'b010010111110,
5066
          12'b010100100101,
5067
          12'b010100101101,
5068
          12'b010100110101,
5069
          12'b010110010100,
5070
          12'b010110010101,
5071
          12'b010110010110,
5072
          12'b010110011100,
5073
          12'b010110011101,
5074
          12'b010110011110,
5075
          12'b010110111100,
5076
          12'b010110111101,
5077
          12'b010110111110,
5078
          12'b1xxx01000100,
5079
          12'b1xxx01xx0010,
5080
          12'b1xxx100xx011,
5081
          12'b1xxx10100001,
5082
          12'b1xxx10101001,
5083
          12'b1xxx10110001,
5084 2 bsa
          12'b1xxx10111001: nflg_ctl = `NFLG_1;
5085
          default:          nflg_ctl = `NFLG_NUL;
5086
        endcase
5087
      end
5088
      default:              nflg_ctl = `NFLG_NUL;
5089
      endcase
5090
    end
5091
 
5092
  /*****************************************************************************************/
5093
  /*                                                                                       */
5094
  /*  c flag control                                                                       */
5095
  /*                                                                                       */
5096
  /*****************************************************************************************/
5097
  always @ (inst_reg or page_reg or state_reg) begin
5098
    casex (state_reg) //synopsys parallel_case
5099
      `WR2A: begin
5100
        casex ({page_reg, inst_reg}) //synopsys parallel_case
5101 4 bsa
          12'b001000xxxxxx,
5102
          12'b011x00xxxxxx: cflg_en = 1'b1;
5103 2 bsa
          default:          cflg_en = 1'b0;
5104
          endcase
5105
        end
5106
      `IF1B: begin
5107
        casex ({page_reg, inst_reg}) //synopsys parallel_case
5108 6 bsa
          12'b000010100110,
5109
          12'b000010100xxx,
5110
          12'b000010101110,
5111
          12'b000010101xxx,
5112
          12'b000010110110,
5113
          12'b000010110xxx,
5114
          12'b000011100110,
5115
          12'b000011101110,
5116
          12'b000011110110,
5117
          12'b010010100100,
5118
          12'b010010100101,
5119
          12'b010010100110,
5120
          12'b010010101100,
5121
          12'b010010101101,
5122
          12'b010010101110,
5123
          12'b010010110100,
5124
          12'b010010110101,
5125
          12'b010010110110,
5126
          12'b010110100100,
5127
          12'b010110100101,
5128
          12'b010110100110,
5129
          12'b010110101100,
5130
          12'b010110101101,
5131
          12'b010110101110,
5132
          12'b010110110100,
5133
          12'b010110110101,
5134
          12'b010110110110,
5135
          12'b000000110111,
5136
          12'b000000000111,
5137
          12'b000000001111,
5138
          12'b000000010111,
5139
          12'b000000011111,
5140
          12'b000000100111,
5141
          12'b000000111111,
5142
          12'b000000xx1001,
5143
          12'b000010000110,
5144
          12'b000010000xxx,
5145
          12'b000010001110,
5146
          12'b000010001xxx,
5147
          12'b000010010110,
5148
          12'b000010010xxx,
5149
          12'b000010011110,
5150
          12'b000010011xxx,
5151
          12'b000010111110,
5152
          12'b000010111xxx,
5153
          12'b000011000110,
5154
          12'b000011001110,
5155
          12'b000011010110,
5156
          12'b000011011110,
5157
          12'b000011111110,
5158
          12'b001000xxx0xx,12'b001000xxx10x,12'b001000xxx111,
5159
          12'b010000xx1001,
5160
          12'b010010000100,
5161
          12'b010010000101,
5162
          12'b010010000110,
5163
          12'b010010001100,
5164
          12'b010010001101,
5165
          12'b010010001110,
5166
          12'b010010010100,
5167
          12'b010010010101,
5168
          12'b010010010110,
5169
          12'b010010011100,
5170
          12'b010010011101,
5171
          12'b010010011110,
5172
          12'b010010111100,
5173
          12'b010010111101,
5174
          12'b010010111110,
5175
          12'b010100xx1001,
5176
          12'b010110000100,
5177
          12'b010110000101,
5178
          12'b010110000110,
5179
          12'b010110001100,
5180
          12'b010110001101,
5181
          12'b010110001110,
5182
          12'b010110010100,
5183
          12'b010110010101,
5184
          12'b010110010110,
5185
          12'b010110011100,
5186
          12'b010110011101,
5187
          12'b010110011110,
5188
          12'b010110111100,
5189
          12'b010110111101,
5190
          12'b010110111110,
5191
          12'b1xxx00xxxx00,
5192
          12'b1xxx00110100,
5193
          12'b1xxx011x0100,
5194
          12'b1xxx01000100,
5195
          12'b1xxx01xx0010,
5196 2 bsa
          12'b1xxx01xx1010: cflg_en = 1'b1;
5197
          default:          cflg_en = 1'b0;
5198
        endcase
5199
      end
5200
      default:              cflg_en = 1'b0;
5201
      endcase
5202
    end
5203
 
5204
  /*****************************************************************************************/
5205
  /*                                                                                       */
5206
  /* temporary flag control                                                                */
5207
  /*                                                                                       */
5208
  /*****************************************************************************************/
5209
  always @ (inst_reg or page_reg or state_reg) begin
5210
    casex (state_reg) //synopsys parallel_case
5211
      `OF1B:                tflg_ctl = `TFLG_Z;
5212
      `RD1A,
5213
      `RD2A: begin
5214
        casex ({page_reg, inst_reg})
5215
          12'b1xxx10100011,
5216
          12'b1xxx10101011,
5217
          12'b1xxx10110011,
5218
          12'b1xxx10111011: tflg_ctl = `TFLG_1;
5219
          default:          tflg_ctl = `TFLG_Z;
5220
          endcase
5221
        end
5222
      `BLK1:                tflg_ctl = `TFLG_B;
5223
      default:              tflg_ctl = `TFLG_NUL;
5224
      endcase
5225
    end
5226
 
5227
  endmodule
5228
 
5229
 
5230
 
5231
 
5232
 

powered by: WebSVN 2.1.0

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