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

Subversion Repositories oms8051mini

[/] [oms8051mini/] [trunk/] [rtl/] [8051/] [oc8051_decoder.v] - Blame information for rev 36

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dinesha
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  8051 core decoder                                           ////
4
////                                                              ////
5
////  This file is part of the 8051 cores project                 ////
6
////  http://www.opencores.org/cores/oms8051mini/                 ////
7
////                                                              ////
8
////  Description                                                 ////
9
////   Main 8051 core module. decodes instruction and creates     ////
10
////   control sigals.                                            ////
11
////                                                              ////
12
////  To Do:                                                      ////
13
////   optimize state machine, especially IDS ASS and AS3         ////
14
////                                                              ////
15
////  Author(s):                                                  ////
16
////      - Simon Teran, simont@opencores.org                     ////
17
////      - Dinesh Annayya, dinesha@opencores.org                 ////
18
////                                                              ////
19
//////////////////////////////////////////////////////////////////////
20 25 dinesha
////   v0.0 - Dinesh A, 5th Jan 2017
21
////        1. Active edge of reset changed from High to Low
22 26 dinesha
////   v0.1 - Dinesh A, 6th Jan 2017
23
////        1. pc_next logic added
24 25 dinesha
//////////////////////////////////////////////////////////////////////
25 2 dinesha
////                                                              ////
26
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
27
////                                                              ////
28
//// This source file may be used and distributed without         ////
29
//// restriction provided that this copyright statement is not    ////
30
//// removed from the file and that any derivative work contains  ////
31
//// the original copyright notice and the associated disclaimer. ////
32
////                                                              ////
33
//// This source file is free software; you can redistribute it   ////
34
//// and/or modify it under the terms of the GNU Lesser General   ////
35
//// Public License as published by the Free Software Foundation; ////
36
//// either version 2.1 of the License, or (at your option) any   ////
37
//// later version.                                               ////
38
////                                                              ////
39
//// This source is distributed in the hope that it will be       ////
40
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
41
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
42
//// PURPOSE.  See the GNU Lesser General Public License for more ////
43
//// details.                                                     ////
44
////                                                              ////
45
//// You should have received a copy of the GNU Lesser General    ////
46
//// Public License along with this source; if not, download it   ////
47
//// from http://www.opencores.org/lgpl.shtml                     ////
48
////                                                              ////
49
//////////////////////////////////////////////////////////////////////
50
//
51
// CVS Revision History
52
//
53
// $Log: not supported by cvs2svn $
54
// Revision 1.21  2003/06/03 17:09:57  simont
55
// pipelined acces to axternal instruction interface added.
56
//
57
// Revision 1.20  2003/05/06 11:10:38  simont
58
// optimize state machine.
59
//
60
// Revision 1.19  2003/05/06 09:41:35  simont
61
// remove define OC8051_AS2_PCL, chane signal src_sel2 to 2 bit wide.
62
//
63
// Revision 1.18  2003/05/05 15:46:36  simont
64
// add aditional alu destination to solve critical path.
65
//
66
// Revision 1.17  2003/04/25 17:15:51  simont
67
// change branch instruction execution (reduse needed clock periods).
68
//
69
// Revision 1.16  2003/04/09 16:24:03  simont
70
// change wr_sft to 2 bit wire.
71
//
72
// Revision 1.15  2003/04/09 15:49:42  simont
73
// Register oc8051_sfr dato output, add signal wait_data.
74
//
75
// Revision 1.14  2003/01/13 14:14:40  simont
76
// replace some modules
77
//
78
// Revision 1.13  2002/10/23 16:53:39  simont
79
// fix bugs in instruction interface
80
//
81
// Revision 1.12  2002/10/17 18:50:00  simont
82
// cahnge interface to instruction rom
83
//
84
// Revision 1.11  2002/09/30 17:33:59  simont
85
// prepared header
86
//
87
//
88
 
89
`include "top_defines.v"
90
 
91
 
92 25 dinesha
module oc8051_decoder (clk, resetn, op_in, op1_c,
93 2 dinesha
  ram_rd_sel_o, ram_wr_sel_o,
94
  bit_addr, wr_o, wr_sfr_o,
95
  src_sel1, src_sel2, src_sel3,
96
  alu_op_o, psw_set, eq, cy_sel, comp_sel,
97
  pc_wr, pc_sel, rd, rmw, istb, mem_act, mem_wait,
98
  wait_data);
99
 
100
//
101
// clk          (in)  clock
102 25 dinesha
// resetn          (in)  reset
103 2 dinesha
// op_in        (in)  operation code [oc8051_op_select.op1]
104
// eq           (in)  compare result [oc8051_comp.eq]
105
// ram_rd_sel   (out) select, whitch address will be send to ram for read [oc8051_ram_rd_sel.sel, oc8051_sp.ram_rd_sel]
106
// ram_wr_sel   (out) select, whitch address will be send to ram for write [oc8051_ram_wr_sel.sel -r, oc8051_sp.ram_wr_sel -r]
107
// wr           (out) write - if 1 then we will write to ram [oc8051_ram_top.wr -r, oc8051_acc.wr -r, oc8051_b_register.wr -r, oc8051_sp.wr-r, oc8051_dptr.wr -r, oc8051_psw.wr -r, oc8051_indi_addr.wr -r, oc8051_ports.wr -r]
108
// src_sel1     (out) select alu source 1 [oc8051_alu_src1_sel.sel -r]
109
// src_sel2     (out) select alu source 2 [oc8051_alu_src2_sel.sel -r]
110
// src_sel3     (out) select alu source 3 [oc8051_alu_src3_sel.sel -r]
111
// alu_op       (out) alu operation [oc8051_alu.op_code -r]
112
// psw_set      (out) will we remember cy, ac, ov from alu [oc8051_psw.set -r]
113
// cy_sel       (out) carry in alu select [oc8051_cy_select.cy_sel -r]
114
// comp_sel     (out) compare source select [oc8051_comp.sel]
115
// bit_addr     (out) if instruction is bit addresable [oc8051_ram_top.bit_addr -r, oc8051_acc.wr_bit -r, oc8051_b_register.wr_bit-r, oc8051_sp.wr_bit -r, oc8051_dptr.wr_bit -r, oc8051_psw.wr_bit -r, oc8051_indi_addr.wr_bit -r, oc8051_ports.wr_bit -r]
116
// pc_wr        (out) pc write [oc8051_pc.wr]
117
// pc_sel       (out) pc select [oc8051_pc.pc_wr_sel]
118
// rd           (out) read from rom [oc8051_pc.rd, oc8051_op_select.rd]
119
// reti         (out) return from interrupt [pin]
120
// rmw          (out) read modify write feature [oc8051_ports.rmw]
121
// pc_wait      (out)
122
//
123
 
124 25 dinesha
input clk, resetn, eq, mem_wait, wait_data;
125 2 dinesha
input [7:0] op_in;
126
 
127
output wr_o, bit_addr, pc_wr, rmw, istb, src_sel3;
128
output [1:0] psw_set, cy_sel, wr_sfr_o, src_sel2, comp_sel;
129
output [2:0] mem_act, src_sel1, ram_rd_sel_o, ram_wr_sel_o, pc_sel, op1_c;
130
output [3:0] alu_op_o;
131
output rd;
132
 
133
reg rmw;
134
reg src_sel3, wr,  bit_addr, pc_wr;
135
reg [3:0] alu_op;
136
reg [1:0] src_sel2, comp_sel, psw_set, cy_sel, wr_sfr;
137
reg [2:0] mem_act, src_sel1, ram_wr_sel, ram_rd_sel, pc_sel;
138
 
139
//
140
// state        if 2'b00 then normal execution, sle instructin that need more than one clock
141
// op           instruction buffer
142
reg  [1:0] state;
143
wire [1:0] state_dec;
144
reg  [7:0] op;
145
wire [7:0] op_cur;
146
reg  [2:0] ram_rd_sel_r;
147
 
148
reg stb_i;
149
 
150
assign rd = !state[0] && !state[1] && !wait_data;// && !stb_o;
151
 
152
assign istb = (!state[1]) && stb_i;
153
 
154
assign state_dec = wait_data ? 2'b00 : state;
155
 
156
assign op_cur = mem_wait ? 8'h00
157
                : (state[0] || state[1] || mem_wait || wait_data) ? op : op_in;
158
//assign op_cur = (state[0] || state[1] || mem_wait || wait_data) ? op : op_in;
159
 
160
assign op1_c = op_cur[2:0];
161
 
162
assign alu_op_o     = wait_data ? `OC8051_ALU_NOP : alu_op;
163
assign wr_sfr_o     = wait_data ? `OC8051_WRS_N   : wr_sfr;
164
assign ram_rd_sel_o = wait_data ? ram_rd_sel_r    : ram_rd_sel;
165
assign ram_wr_sel_o = wait_data ? `OC8051_RWS_DC  : ram_wr_sel;
166
assign wr_o         = wait_data ? 1'b0            : wr;
167
 
168
//
169
// main block
170
// unregisterd outputs
171
always @(op_cur or eq or state_dec or mem_wait)
172
begin
173
    case (state_dec) /* synopsys full_case parallel_case */
174
      2'b01: begin
175
        casex (op_cur) /* synopsys parallel_case */
176
          `OC8051_DIV : begin
177
             `ifdef OC8051_SIMULATION
178
                 $display("Executing : Div Instruction");
179
             `endif
180
              ram_rd_sel = `OC8051_RRS_B;
181
            end
182
          `OC8051_MUL : begin
183
             `ifdef OC8051_SIMULATION
184
                 $display("Executing : Mul Instruction");
185
             `endif
186
 
187
              ram_rd_sel = `OC8051_RRS_B;
188
            end
189
          default begin
190
              ram_rd_sel = `OC8051_RRS_DC;
191
          end
192
        endcase
193
        stb_i = 1'b1;
194
        bit_addr = 1'b0;
195
        pc_wr = `OC8051_PCW_N;
196
        pc_sel = `OC8051_PIS_DC;
197
        comp_sel =  `OC8051_CSS_DC;
198
        rmw = `OC8051_RMW_N;
199
      end
200
      2'b10: begin
201
        casex (op_cur) /* synopsys parallel_case */
202
          `OC8051_SJMP : begin
203
             `ifdef OC8051_SIMULATION
204
                 $display("Executing : SJUMP Instruction");
205
             `endif
206
 
207
              ram_rd_sel = `OC8051_RRS_DC;
208
              pc_wr = `OC8051_PCW_Y;
209
              pc_sel = `OC8051_PIS_SO1;
210
              comp_sel =  `OC8051_CSS_DC;
211
              bit_addr = 1'b0;
212
            end
213
          `OC8051_JC : begin
214
             `ifdef OC8051_SIMULATION
215
                 $display("Executing : JC Instruction");
216
             `endif
217
 
218
              ram_rd_sel = `OC8051_RRS_PSW;
219
              pc_wr = eq;
220
              pc_sel = `OC8051_PIS_SO1;
221
              comp_sel =  `OC8051_CSS_CY;
222
              bit_addr = 1'b0;
223
            end
224
          `OC8051_JNC : begin
225
             `ifdef OC8051_SIMULATION
226
                 $display("Executing : JNC Instruction");
227
             `endif
228
 
229
              ram_rd_sel = `OC8051_RRS_PSW;
230
              pc_wr = !eq;
231
              pc_sel = `OC8051_PIS_SO1;
232
              comp_sel =  `OC8051_CSS_CY;
233
              bit_addr = 1'b0;
234
            end
235
          `OC8051_JNZ : begin
236
             `ifdef OC8051_SIMULATION
237
                 $display("Executing : JNZ Instruction");
238
             `endif
239
 
240
              ram_rd_sel = `OC8051_RRS_ACC;
241
              pc_wr = !eq;
242
              pc_sel = `OC8051_PIS_SO1;
243
              comp_sel =  `OC8051_CSS_AZ;
244
              bit_addr = 1'b0;
245
            end
246
          `OC8051_JZ : begin
247
             `ifdef OC8051_SIMULATION
248
                 $display("Executing : JZ Instruction");
249
             `endif
250
 
251
              ram_rd_sel = `OC8051_RRS_ACC;
252
              pc_wr = eq;
253
              pc_sel = `OC8051_PIS_SO1;
254
              comp_sel =  `OC8051_CSS_AZ;
255
              bit_addr = 1'b0;
256
            end
257
 
258
          `OC8051_RET : begin
259
             `ifdef OC8051_SIMULATION
260
                 $display("Executing : RET Instruction");
261
             `endif
262
 
263
              ram_rd_sel = `OC8051_RRS_DC;
264
              pc_wr = `OC8051_PCW_Y;
265
              pc_sel = `OC8051_PIS_AL;
266
              comp_sel =  `OC8051_CSS_DC;
267
              bit_addr = 1'b0;
268
            end
269
          `OC8051_RETI : begin
270
             `ifdef OC8051_SIMULATION
271
                 $display("Executing : RETI Instruction");
272
             `endif
273
 
274
              ram_rd_sel = `OC8051_RRS_DC;
275
              pc_wr = `OC8051_PCW_Y;
276
              pc_sel = `OC8051_PIS_AL;
277
              comp_sel =  `OC8051_CSS_DC;
278
              bit_addr = 1'b0;
279
            end
280
          `OC8051_CJNE_R : begin
281
             `ifdef OC8051_SIMULATION
282
                 $display("Executing : CJNE_R Instruction");
283
             `endif
284
 
285
              ram_rd_sel = `OC8051_RRS_DC;
286
              pc_wr = !eq;
287
              pc_sel = `OC8051_PIS_SO2;
288
              comp_sel =  `OC8051_CSS_DES;
289
              bit_addr = 1'b0;
290
            end
291
          `OC8051_CJNE_I : begin
292
             `ifdef OC8051_SIMULATION
293
                 $display("Executing : CJNE_I Instruction");
294
             `endif
295
 
296
              ram_rd_sel = `OC8051_RRS_DC;
297
              pc_wr = !eq;
298
              pc_sel = `OC8051_PIS_SO2;
299
              comp_sel =  `OC8051_CSS_DES;
300
              bit_addr = 1'b0;
301
            end
302
          `OC8051_CJNE_D : begin
303
             `ifdef OC8051_SIMULATION
304
                 $display("Executing : CJNE_D Instruction");
305
             `endif
306
 
307
              ram_rd_sel = `OC8051_RRS_DC;
308
              pc_wr = !eq;
309
              pc_sel = `OC8051_PIS_SO2;
310
              comp_sel =  `OC8051_CSS_DES;
311
              bit_addr = 1'b0;
312
            end
313
          `OC8051_CJNE_C : begin
314
             `ifdef OC8051_SIMULATION
315
                 $display("Executing : CJNE_C Instruction");
316
             `endif
317
 
318
              ram_rd_sel = `OC8051_RRS_DC;
319
              pc_wr = !eq;
320
              pc_sel = `OC8051_PIS_SO2;
321
              comp_sel =  `OC8051_CSS_DES;
322
              bit_addr = 1'b0;
323
            end
324
          `OC8051_DJNZ_R : begin
325
             `ifdef OC8051_SIMULATION
326
                 $display("Executing : DJNZ_R Instruction");
327
             `endif
328
 
329
              ram_rd_sel = `OC8051_RRS_DC;
330
              pc_wr = !eq;
331
              pc_sel = `OC8051_PIS_SO1;
332
              comp_sel =  `OC8051_CSS_DES;
333
              bit_addr = 1'b0;
334
            end
335
          `OC8051_DJNZ_D : begin
336
             `ifdef OC8051_SIMULATION
337
                 $display("Executing : DJNZ_D Instruction");
338
             `endif
339
              ram_rd_sel = `OC8051_RRS_DC;
340
              pc_wr = !eq;
341
              pc_sel = `OC8051_PIS_SO2;
342
              comp_sel =  `OC8051_CSS_DES;
343
              bit_addr = 1'b0;
344
            end
345
          `OC8051_JB : begin
346
             `ifdef OC8051_SIMULATION
347
                 $display("Executing : JB Instruction");
348
             `endif
349
 
350
              ram_rd_sel = `OC8051_RRS_DC;
351
              pc_wr = eq;
352
              pc_sel = `OC8051_PIS_SO2;
353
              comp_sel =  `OC8051_CSS_BIT;
354
              bit_addr = 1'b0;
355
            end
356
          `OC8051_JBC : begin
357
             `ifdef OC8051_SIMULATION
358
                 $display("Executing : JBC Instruction");
359
             `endif
360
 
361
              ram_rd_sel = `OC8051_RRS_DC;
362
              pc_wr = eq;
363
              pc_sel = `OC8051_PIS_SO2;
364
              comp_sel =  `OC8051_CSS_BIT;
365
              bit_addr = 1'b1;
366
            end
367
          `OC8051_JMP_D : begin
368
             `ifdef OC8051_SIMULATION
369
                 $display("Executing : JMP_D Instruction");
370
             `endif
371
 
372
              ram_rd_sel = `OC8051_RRS_DC;
373
              pc_wr = `OC8051_PCW_Y;
374
              pc_sel = `OC8051_PIS_ALU;
375
              comp_sel =  `OC8051_CSS_DC;
376
              bit_addr = 1'b0;
377
            end
378
          `OC8051_JNB : begin
379
             `ifdef OC8051_SIMULATION
380
                 $display("Executing : JNB Instruction");
381
             `endif
382
 
383
              ram_rd_sel = `OC8051_RRS_DC;
384
              pc_wr = !eq;
385
              pc_sel = `OC8051_PIS_SO2;
386
              comp_sel =  `OC8051_CSS_BIT;
387
              bit_addr = 1'b1;
388
            end
389
          `OC8051_DIV : begin
390
             `ifdef OC8051_SIMULATION
391
                 $display("Executing : DIV Instruction");
392
             `endif
393
 
394
              ram_rd_sel = `OC8051_RRS_B;
395
              pc_wr = `OC8051_PCW_N;
396
              pc_sel = `OC8051_PIS_DC;
397
              comp_sel =  `OC8051_CSS_DC;
398
              bit_addr = 1'b0;
399
            end
400
          `OC8051_MUL : begin
401
             `ifdef OC8051_SIMULATION
402
                 $display("Executing : MUL Instruction");
403
             `endif
404
 
405
              ram_rd_sel = `OC8051_RRS_B;
406
              pc_wr = `OC8051_PCW_N;
407
              pc_sel = `OC8051_PIS_DC;
408
              comp_sel =  `OC8051_CSS_DC;
409
              bit_addr = 1'b0;
410
            end
411
          default begin
412
              ram_rd_sel = `OC8051_RRS_DC;
413
              pc_wr = `OC8051_PCW_N;
414
              pc_sel = `OC8051_PIS_DC;
415
              comp_sel =  `OC8051_CSS_DC;
416
              bit_addr = 1'b0;
417
          end
418
        endcase
419
        rmw = `OC8051_RMW_N;
420
        stb_i = 1'b1;
421
      end
422
      2'b11: begin
423
        casex (op_cur) /* synopsys parallel_case */
424
          `OC8051_CJNE_R : begin
425
             `ifdef OC8051_SIMULATION
426
                 $display("Executing : CJNE_R Instruction");
427
             `endif
428
 
429
              ram_rd_sel = `OC8051_RRS_DC;
430
              pc_wr = `OC8051_PCW_N;
431
              pc_sel = `OC8051_PIS_DC;
432
            end
433
          `OC8051_CJNE_I : begin
434
             `ifdef OC8051_SIMULATION
435
                 $display("Executing : CJNE_I Instruction");
436
             `endif
437
 
438
              ram_rd_sel = `OC8051_RRS_DC;
439
              pc_wr = `OC8051_PCW_N;
440
              pc_sel = `OC8051_PIS_DC;
441
            end
442
          `OC8051_CJNE_D : begin
443
             `ifdef OC8051_SIMULATION
444
                 $display("Executing : CJNE_D Instruction");
445
             `endif
446
 
447
              ram_rd_sel = `OC8051_RRS_DC;
448
              pc_wr = `OC8051_PCW_N;
449
              pc_sel = `OC8051_PIS_DC;
450
            end
451
          `OC8051_CJNE_C : begin
452
             `ifdef OC8051_SIMULATION
453
                 $display("Executing : CJNE_C Instruction");
454
             `endif
455
 
456
              ram_rd_sel = `OC8051_RRS_DC;
457
              pc_wr = `OC8051_PCW_N;
458
              pc_sel = `OC8051_PIS_DC;
459
            end
460
          `OC8051_DJNZ_R : begin
461
             `ifdef OC8051_SIMULATION
462
                 $display("Executing : DJNZ_R Instruction");
463
             `endif
464
 
465
              ram_rd_sel = `OC8051_RRS_DC;
466
              pc_wr = `OC8051_PCW_N;
467
              pc_sel = `OC8051_PIS_DC;
468
            end
469
          `OC8051_DJNZ_D : begin
470
             `ifdef OC8051_SIMULATION
471
                 $display("Executing : DJNZ_D Instruction");
472
             `endif
473
 
474
              ram_rd_sel = `OC8051_RRS_DC;
475
              pc_wr = `OC8051_PCW_N;
476
              pc_sel = `OC8051_PIS_DC;
477
            end
478
          `OC8051_RET : begin
479
             `ifdef OC8051_SIMULATION
480
                 $display("Executing : RET Instruction");
481
             `endif
482
 
483
              ram_rd_sel = `OC8051_RRS_SP;
484
              pc_wr = `OC8051_PCW_Y;
485
              pc_sel = `OC8051_PIS_AH;
486
            end
487
          `OC8051_RETI : begin
488
             `ifdef OC8051_SIMULATION
489
                 $display("Executing : RETI Instruction");
490
             `endif
491
 
492
              ram_rd_sel = `OC8051_RRS_SP;
493
              pc_wr = `OC8051_PCW_Y;
494
              pc_sel = `OC8051_PIS_AH;
495
            end
496
          `OC8051_DIV : begin
497
             `ifdef OC8051_SIMULATION
498
                 $display("Executing : DIV Instruction");
499
             `endif
500
 
501
              ram_rd_sel = `OC8051_RRS_B;
502
              pc_wr = `OC8051_PCW_N;
503
              pc_sel = `OC8051_PIS_DC;
504
            end
505
          `OC8051_MUL : begin
506
             `ifdef OC8051_SIMULATION
507
                 $display("Executing : MUL Instruction");
508
             `endif
509
 
510
              ram_rd_sel = `OC8051_RRS_B;
511
              pc_wr = `OC8051_PCW_N;
512
              pc_sel = `OC8051_PIS_DC;
513
            end
514
         default begin
515
             `ifdef OC8051_SIMULATION
516
                 $display("Executing : RRS_DC Instruction");
517
             `endif
518
 
519
              ram_rd_sel = `OC8051_RRS_DC;
520
              pc_wr = `OC8051_PCW_N;
521
              pc_sel = `OC8051_PIS_DC;
522
          end
523
        endcase
524
        comp_sel =  `OC8051_CSS_DC;
525
        rmw = `OC8051_RMW_N;
526
        stb_i = 1'b1;
527
        bit_addr = 1'b0;
528
      end
529
      2'b00: begin
530
        casex (op_cur) /* synopsys parallel_case */
531
          `OC8051_ACALL :begin
532
              ram_rd_sel = `OC8051_RRS_DC;
533
              pc_wr = `OC8051_PCW_Y;
534
              pc_sel = `OC8051_PIS_I11;
535
              comp_sel =  `OC8051_CSS_DC;
536
              rmw = `OC8051_RMW_N;
537
              stb_i = 1'b0;
538
              bit_addr = 1'b0;
539
            end
540
          `OC8051_AJMP : begin
541
              ram_rd_sel = `OC8051_RRS_DC;
542
              pc_wr = `OC8051_PCW_Y;
543
              pc_sel = `OC8051_PIS_I11;
544
              comp_sel =  `OC8051_CSS_DC;
545
              rmw = `OC8051_RMW_N;
546
              stb_i = 1'b0;
547
              bit_addr = 1'b0;
548
            end
549
          `OC8051_ADD_R : begin
550
              ram_rd_sel = `OC8051_RRS_RN;
551
              pc_wr = `OC8051_PCW_N;
552
              pc_sel = `OC8051_PIS_DC;
553
              comp_sel =  `OC8051_CSS_DC;
554
              rmw = `OC8051_RMW_N;
555
              stb_i = 1'b1;
556
              bit_addr = 1'b0;
557
            end
558
          `OC8051_ADDC_R : begin
559
             ram_rd_sel = `OC8051_RRS_RN;
560
              pc_wr = `OC8051_PCW_N;
561
              pc_sel = `OC8051_PIS_DC;
562
              comp_sel =  `OC8051_CSS_DC;
563
              rmw = `OC8051_RMW_N;
564
              stb_i = 1'b1;
565
              bit_addr = 1'b0;
566
            end
567
          `OC8051_ANL_R : begin
568
              ram_rd_sel = `OC8051_RRS_RN;
569
              pc_wr = `OC8051_PCW_N;
570
              pc_sel = `OC8051_PIS_DC;
571
              comp_sel =  `OC8051_CSS_DC;
572
              rmw = `OC8051_RMW_Y;
573
              stb_i = 1'b1;
574
              bit_addr = 1'b0;
575
            end
576
          `OC8051_CJNE_R : begin
577
              ram_rd_sel = `OC8051_RRS_RN;
578
              pc_wr = `OC8051_PCW_N;
579
              pc_sel = `OC8051_PIS_DC;
580
              comp_sel =  `OC8051_CSS_DC;
581
              rmw = `OC8051_RMW_N;
582
              stb_i = 1'b0;
583
              bit_addr = 1'b0;
584
            end
585
          `OC8051_DEC_R : begin
586
              ram_rd_sel = `OC8051_RRS_RN;
587
              pc_wr = `OC8051_PCW_N;
588
              pc_sel = `OC8051_PIS_DC;
589
              comp_sel =  `OC8051_CSS_DC;
590
              rmw = `OC8051_RMW_Y;
591
              stb_i = 1'b1;
592
              bit_addr = 1'b0;
593
            end
594
          `OC8051_DJNZ_R : begin
595
              ram_rd_sel = `OC8051_RRS_RN;
596
              pc_wr = `OC8051_PCW_N;
597
              pc_sel = `OC8051_PIS_DC;
598
              comp_sel =  `OC8051_CSS_DC;
599
              rmw = `OC8051_RMW_Y;
600
              stb_i = 1'b0;
601
              bit_addr = 1'b0;
602
            end
603
          `OC8051_INC_R : begin
604
              ram_rd_sel = `OC8051_RRS_RN;
605
              pc_wr = `OC8051_PCW_N;
606
              pc_sel = `OC8051_PIS_DC;
607
              comp_sel =  `OC8051_CSS_DC;
608
              rmw = `OC8051_RMW_Y;
609
              stb_i = 1'b1;
610
              bit_addr = 1'b0;
611
            end
612
          `OC8051_MOV_R : begin
613
              ram_rd_sel = `OC8051_RRS_RN;
614
              pc_wr = `OC8051_PCW_N;
615
              pc_sel = `OC8051_PIS_DC;
616
              comp_sel =  `OC8051_CSS_DC;
617
              rmw = `OC8051_RMW_N;
618
              stb_i = 1'b1;
619
              bit_addr = 1'b0;
620
            end
621
          `OC8051_MOV_DR : begin
622
              ram_rd_sel = `OC8051_RRS_D;
623
              pc_wr = `OC8051_PCW_N;
624
              pc_sel = `OC8051_PIS_DC;
625
              comp_sel =  `OC8051_CSS_DC;
626
              rmw = `OC8051_RMW_N;
627
              stb_i = 1'b1;
628
              bit_addr = 1'b0;
629
            end
630
          `OC8051_MOV_RD : begin
631
              ram_rd_sel = `OC8051_RRS_RN;
632
              pc_wr = `OC8051_PCW_N;
633
              pc_sel = `OC8051_PIS_DC;
634
              comp_sel =  `OC8051_CSS_DC;
635
              rmw = `OC8051_RMW_N;
636
              stb_i = 1'b1;
637
              bit_addr = 1'b0;
638
            end
639
          `OC8051_ORL_R : begin
640
              ram_rd_sel = `OC8051_RRS_RN;
641
              pc_wr = `OC8051_PCW_N;
642
              pc_sel = `OC8051_PIS_DC;
643
              comp_sel =  `OC8051_CSS_DC;
644
              rmw = `OC8051_RMW_Y;
645
              stb_i = 1'b1;
646
              bit_addr = 1'b0;
647
            end
648
          `OC8051_SUBB_R : begin
649
              ram_rd_sel = `OC8051_RRS_RN;
650
              pc_wr = `OC8051_PCW_N;
651
              pc_sel = `OC8051_PIS_DC;
652
              comp_sel =  `OC8051_CSS_DC;
653
              rmw = `OC8051_RMW_N;
654
              stb_i = 1'b1;
655
              bit_addr = 1'b0;
656
            end
657
          `OC8051_XCH_R : begin
658
              ram_rd_sel = `OC8051_RRS_RN;
659
              pc_wr = `OC8051_PCW_N;
660
              pc_sel = `OC8051_PIS_DC;
661
              comp_sel =  `OC8051_CSS_DC;
662
              rmw = `OC8051_RMW_N;
663
              stb_i = 1'b1;
664
              bit_addr = 1'b0;
665
            end
666
          `OC8051_XRL_R : begin
667
              ram_rd_sel = `OC8051_RRS_RN;
668
              pc_wr = `OC8051_PCW_N;
669
              pc_sel = `OC8051_PIS_DC;
670
              comp_sel =  `OC8051_CSS_DC;
671
              rmw = `OC8051_RMW_Y;
672
              stb_i = 1'b1;
673
              bit_addr = 1'b0;
674
            end
675
 
676
    //op_code [7:1]
677
          `OC8051_ADD_I : begin
678
              ram_rd_sel = `OC8051_RRS_I;
679
              pc_wr = `OC8051_PCW_N;
680
              pc_sel = `OC8051_PIS_DC;
681
              comp_sel =  `OC8051_CSS_DC;
682
              rmw = `OC8051_RMW_N;
683
              stb_i = 1'b1;
684
              bit_addr = 1'b0;
685
            end
686
          `OC8051_ADDC_I : begin
687
              ram_rd_sel = `OC8051_RRS_I;
688
              pc_wr = `OC8051_PCW_N;
689
              pc_sel = `OC8051_PIS_DC;
690
              comp_sel =  `OC8051_CSS_DC;
691
              rmw = `OC8051_RMW_N;
692
              stb_i = 1'b1;
693
              bit_addr = 1'b0;
694
            end
695
          `OC8051_ANL_I : begin
696
              ram_rd_sel = `OC8051_RRS_I;
697
              pc_wr = `OC8051_PCW_N;
698
              pc_sel = `OC8051_PIS_DC;
699
              comp_sel =  `OC8051_CSS_DC;
700
              rmw = `OC8051_RMW_Y;
701
              stb_i = 1'b1;
702
              bit_addr = 1'b0;
703
            end
704
          `OC8051_CJNE_I : begin
705
              ram_rd_sel = `OC8051_RRS_I;
706
              pc_wr = `OC8051_PCW_N;
707
              pc_sel = `OC8051_PIS_DC;
708
              comp_sel =  `OC8051_CSS_DC;
709
              rmw = `OC8051_RMW_N;
710
              stb_i = 1'b0;
711
              bit_addr = 1'b0;
712
            end
713
          `OC8051_DEC_I : begin
714
              ram_rd_sel = `OC8051_RRS_I;
715
              pc_wr = `OC8051_PCW_N;
716
              pc_sel = `OC8051_PIS_DC;
717
              comp_sel =  `OC8051_CSS_DC;
718
              rmw = `OC8051_RMW_Y;
719
              stb_i = 1'b1;
720
              bit_addr = 1'b0;
721
            end
722
          `OC8051_INC_I : begin
723
              ram_rd_sel = `OC8051_RRS_I;
724
              pc_wr = `OC8051_PCW_N;
725
              pc_sel = `OC8051_PIS_DC;
726
              comp_sel =  `OC8051_CSS_DC;
727
              rmw = `OC8051_RMW_Y;
728
              stb_i = 1'b1;
729
              bit_addr = 1'b0;
730
            end
731
          `OC8051_MOV_I : begin
732
              ram_rd_sel = `OC8051_RRS_I;
733
              pc_wr = `OC8051_PCW_N;
734
              pc_sel = `OC8051_PIS_DC;
735
              comp_sel =  `OC8051_CSS_DC;
736
              rmw = `OC8051_RMW_N;
737
              stb_i = 1'b1;
738
              bit_addr = 1'b0;
739
            end
740
          `OC8051_MOV_ID : begin
741
              ram_rd_sel = `OC8051_RRS_I;
742
              pc_wr = `OC8051_PCW_N;
743
              pc_sel = `OC8051_PIS_DC;
744
              comp_sel =  `OC8051_CSS_DC;
745
              rmw = `OC8051_RMW_N;
746
              stb_i = 1'b1;
747
              bit_addr = 1'b0;
748
            end
749
          `OC8051_MOV_DI : begin
750
              ram_rd_sel = `OC8051_RRS_D;
751
              pc_wr = `OC8051_PCW_N;
752
              pc_sel = `OC8051_PIS_DC;
753
              comp_sel =  `OC8051_CSS_DC;
754
              rmw = `OC8051_RMW_N;
755
              stb_i = 1'b1;
756
              bit_addr = 1'b0;
757
            end
758
          `OC8051_MOVX_IA : begin
759
              ram_rd_sel = `OC8051_RRS_DC;
760
              pc_wr = `OC8051_PCW_N;
761
              pc_sel = `OC8051_PIS_DC;
762
              comp_sel =  `OC8051_CSS_DC;
763
              rmw = `OC8051_RMW_N;
764
              stb_i = 1'b0;
765
              bit_addr = 1'b0;
766
            end
767
          `OC8051_MOVX_AI :begin
768
              ram_rd_sel = `OC8051_RRS_DC;
769
              pc_wr = `OC8051_PCW_N;
770
              pc_sel = `OC8051_PIS_DC;
771
              comp_sel =  `OC8051_CSS_DC;
772
              rmw = `OC8051_RMW_N;
773
              stb_i = 1'b0;
774
              bit_addr = 1'b0;
775
            end
776
          `OC8051_ORL_I : begin
777
              ram_rd_sel = `OC8051_RRS_I;
778
              pc_wr = `OC8051_PCW_N;
779
              pc_sel = `OC8051_PIS_DC;
780
              comp_sel =  `OC8051_CSS_DC;
781
              rmw = `OC8051_RMW_Y;
782
              stb_i = 1'b1;
783
              bit_addr = 1'b0;
784
            end
785
          `OC8051_SUBB_I : begin
786
              ram_rd_sel = `OC8051_RRS_I;
787
              pc_wr = `OC8051_PCW_N;
788
              pc_sel = `OC8051_PIS_DC;
789
              comp_sel =  `OC8051_CSS_DC;
790
              rmw = `OC8051_RMW_N;
791
              stb_i = 1'b1;
792
              bit_addr = 1'b0;
793
            end
794
          `OC8051_XCH_I : begin
795
              ram_rd_sel = `OC8051_RRS_I;
796
              pc_wr = `OC8051_PCW_N;
797
              pc_sel = `OC8051_PIS_DC;
798
              comp_sel =  `OC8051_CSS_DC;
799
              rmw = `OC8051_RMW_N;
800
              stb_i = 1'b1;
801
              bit_addr = 1'b0;
802
            end
803
          `OC8051_XCHD :begin
804
              ram_rd_sel = `OC8051_RRS_I;
805
              pc_wr = `OC8051_PCW_N;
806
              pc_sel = `OC8051_PIS_DC;
807
              comp_sel =  `OC8051_CSS_DC;
808
              rmw = `OC8051_RMW_N;
809
              stb_i = 1'b1;
810
              bit_addr = 1'b0;
811
            end
812
          `OC8051_XRL_I : begin
813
              ram_rd_sel = `OC8051_RRS_I;
814
              pc_wr = `OC8051_PCW_N;
815
              pc_sel = `OC8051_PIS_DC;
816
              comp_sel =  `OC8051_CSS_DC;
817
              rmw = `OC8051_RMW_Y;
818
              stb_i = 1'b1;
819
              bit_addr = 1'b0;
820
            end
821
 
822
    //op_code [7:0]
823
          `OC8051_ADD_D : begin
824
              ram_rd_sel = `OC8051_RRS_D;
825
              pc_wr = `OC8051_PCW_N;
826
              pc_sel = `OC8051_PIS_DC;
827
              comp_sel =  `OC8051_CSS_DC;
828
              rmw = `OC8051_RMW_N;
829
              stb_i = 1'b1;
830
              bit_addr = 1'b0;
831
            end
832
          `OC8051_ADDC_D : begin
833
              ram_rd_sel = `OC8051_RRS_D;
834
              pc_wr = `OC8051_PCW_N;
835
              pc_sel = `OC8051_PIS_DC;
836
              comp_sel =  `OC8051_CSS_DC;
837
              rmw = `OC8051_RMW_N;
838
              stb_i = 1'b1;
839
              bit_addr = 1'b0;
840
            end
841
          `OC8051_ANL_D : begin
842
              ram_rd_sel = `OC8051_RRS_D;
843
              pc_wr = `OC8051_PCW_N;
844
              pc_sel = `OC8051_PIS_DC;
845
              comp_sel =  `OC8051_CSS_DC;
846
              rmw = `OC8051_RMW_Y;
847
              stb_i = 1'b1;
848
              bit_addr = 1'b0;
849
            end
850
          `OC8051_ANL_C : begin
851
              ram_rd_sel = `OC8051_RRS_DC;
852
              pc_wr = `OC8051_PCW_N;
853
              pc_sel = `OC8051_PIS_DC;
854
              comp_sel =  `OC8051_CSS_DC;
855
              rmw = `OC8051_RMW_Y;
856
              stb_i = 1'b1;
857
              bit_addr = 1'b0;
858
            end
859
          `OC8051_ANL_DD : begin
860
              ram_rd_sel = `OC8051_RRS_D;
861
              pc_wr = `OC8051_PCW_N;
862
              pc_sel = `OC8051_PIS_DC;
863
              comp_sel =  `OC8051_CSS_DC;
864
              rmw = `OC8051_RMW_Y;
865
              stb_i = 1'b1;
866
              bit_addr = 1'b0;
867
            end
868
          `OC8051_ANL_DC : begin
869
              ram_rd_sel = `OC8051_RRS_D;
870
              pc_wr = `OC8051_PCW_N;
871
              pc_sel = `OC8051_PIS_DC;
872
              comp_sel =  `OC8051_CSS_DC;
873
              rmw = `OC8051_RMW_Y;
874
              stb_i = 1'b1;
875
              bit_addr = 1'b0;
876
            end
877
          `OC8051_ANL_B : begin
878
              ram_rd_sel = `OC8051_RRS_D;
879
              pc_wr = `OC8051_PCW_N;
880
              pc_sel = `OC8051_PIS_DC;
881
              comp_sel =  `OC8051_CSS_DC;
882
              rmw = `OC8051_RMW_Y;
883
              stb_i = 1'b1;
884
              bit_addr = 1'b1;
885
            end
886
          `OC8051_ANL_NB : begin
887
              ram_rd_sel = `OC8051_RRS_D;
888
              pc_wr = `OC8051_PCW_N;
889
              pc_sel = `OC8051_PIS_DC;
890
              comp_sel =  `OC8051_CSS_DC;
891
              rmw = `OC8051_RMW_Y;
892
              stb_i = 1'b1;
893
              bit_addr = 1'b1;
894
            end
895
          `OC8051_CJNE_D : begin
896
              ram_rd_sel = `OC8051_RRS_D;
897
              pc_wr = `OC8051_PCW_N;
898
              pc_sel = `OC8051_PIS_DC;
899
              comp_sel =  `OC8051_CSS_DC;
900
              rmw = `OC8051_RMW_N;
901
              stb_i = 1'b0;
902
              bit_addr = 1'b0;
903
            end
904
          `OC8051_CJNE_C : begin
905
              ram_rd_sel = `OC8051_RRS_DC;
906
              pc_wr = `OC8051_PCW_N;
907
              pc_sel = `OC8051_PIS_DC;
908
              comp_sel =  `OC8051_CSS_DC;
909
              rmw = `OC8051_RMW_N;
910
              stb_i = 1'b0;
911
              bit_addr = 1'b0;
912
            end
913
          `OC8051_CLR_B : begin
914
              ram_rd_sel = `OC8051_RRS_D;
915
              pc_wr = `OC8051_PCW_N;
916
              pc_sel = `OC8051_PIS_DC;
917
              comp_sel =  `OC8051_CSS_DC;
918
              rmw = `OC8051_RMW_Y;
919
              stb_i = 1'b1;
920
              bit_addr = 1'b1;
921
            end
922
          `OC8051_CPL_B : begin
923
              ram_rd_sel = `OC8051_RRS_D;
924
              pc_wr = `OC8051_PCW_N;
925
              pc_sel = `OC8051_PIS_DC;
926
              comp_sel =  `OC8051_CSS_DC;
927
              rmw = `OC8051_RMW_Y;
928
              stb_i = 1'b1;
929
              bit_addr = 1'b1;
930
            end
931
          `OC8051_DEC_D : begin
932
              ram_rd_sel = `OC8051_RRS_D;
933
              pc_wr = `OC8051_PCW_N;
934
              pc_sel = `OC8051_PIS_DC;
935
              comp_sel =  `OC8051_CSS_DC;
936
              rmw = `OC8051_RMW_Y;
937
              stb_i = 1'b1;
938
              bit_addr = 1'b0;
939
            end
940
          `OC8051_DIV : begin
941
              ram_rd_sel = `OC8051_RRS_B;
942
              pc_wr = `OC8051_PCW_N;
943
              pc_sel = `OC8051_PIS_DC;
944
              comp_sel =  `OC8051_CSS_DC;
945
              rmw = `OC8051_RMW_N;
946
              stb_i = 1'b0;
947
              bit_addr = 1'b0;
948
            end
949
          `OC8051_DJNZ_D : begin
950
              ram_rd_sel = `OC8051_RRS_D;
951
              pc_wr = `OC8051_PCW_N;
952
              pc_sel = `OC8051_PIS_DC;
953
              comp_sel =  `OC8051_CSS_DC;
954
              rmw = `OC8051_RMW_Y;
955
              stb_i = 1'b0;
956
              bit_addr = 1'b0;
957
            end
958
          `OC8051_INC_D : begin
959
              ram_rd_sel = `OC8051_RRS_D;
960
              pc_wr = `OC8051_PCW_N;
961
              pc_sel = `OC8051_PIS_DC;
962
              comp_sel =  `OC8051_CSS_DC;
963
              rmw = `OC8051_RMW_Y;
964
              stb_i = 1'b1;
965
              bit_addr = 1'b0;
966
            end
967
          `OC8051_INC_DP : begin
968
              ram_rd_sel = `OC8051_RRS_DPTR;
969
              pc_wr = `OC8051_PCW_N;
970
              pc_sel = `OC8051_PIS_DC;
971
              comp_sel =  `OC8051_CSS_DC;
972
              rmw = `OC8051_RMW_N;
973
              stb_i = 1'b1;
974
              bit_addr = 1'b0;
975
            end
976
          `OC8051_JB : begin
977
              ram_rd_sel = `OC8051_RRS_D;
978
              pc_wr = `OC8051_PCW_N;
979
              pc_sel = `OC8051_PIS_SO2;
980
              comp_sel =  `OC8051_CSS_BIT;
981
              rmw = `OC8051_RMW_N;
982
              stb_i = 1'b0;
983
              bit_addr = 1'b1;
984
            end
985
          `OC8051_JBC : begin
986
              ram_rd_sel = `OC8051_RRS_D;
987
              pc_wr = `OC8051_PCW_N;
988
              pc_sel = `OC8051_PIS_DC;
989
              comp_sel =  `OC8051_CSS_BIT;
990
              rmw = `OC8051_RMW_N;
991
              stb_i = 1'b0;
992
              bit_addr = 1'b1;
993
            end
994
/*          `OC8051_JC : begin
995
              ram_rd_sel = `OC8051_RRS_PSW;
996
              pc_wr = eq;
997
              pc_sel = `OC8051_PIS_SO1;
998
              comp_sel =  `OC8051_CSS_CY;
999
              rmw = `OC8051_RMW_N;
1000
              stb_i = 1'b0;
1001
              bit_addr = 1'b0;
1002
            end*/
1003
          `OC8051_JMP_D : begin
1004
              ram_rd_sel = `OC8051_RRS_DPTR;
1005
              pc_wr = `OC8051_PCW_N;
1006
              pc_sel = `OC8051_PIS_DC;
1007
              comp_sel =  `OC8051_CSS_DC;
1008
              rmw = `OC8051_RMW_N;
1009
              stb_i = 1'b0;
1010
              bit_addr = 1'b0;
1011
            end
1012
 
1013
          `OC8051_JNB : begin
1014
              ram_rd_sel = `OC8051_RRS_D;
1015
              pc_wr = `OC8051_PCW_N;
1016
              pc_sel = `OC8051_PIS_SO2;
1017
              comp_sel =  `OC8051_CSS_BIT;
1018
              rmw = `OC8051_RMW_N;
1019
              stb_i = 1'b0;
1020
              bit_addr = 1'b1;
1021
            end
1022
/*          `OC8051_JNC : begin
1023
              ram_rd_sel = `OC8051_RRS_PSW;
1024
              pc_wr = !eq;
1025
              pc_sel = `OC8051_PIS_SO1;
1026
              comp_sel =  `OC8051_CSS_CY;
1027
              rmw = `OC8051_RMW_N;
1028
              stb_i = 1'b0;
1029
              bit_addr = 1'b0;
1030
            end
1031
          `OC8051_JNZ : begin
1032
              ram_rd_sel = `OC8051_RRS_ACC;
1033
              pc_wr = !eq;
1034
              pc_sel = `OC8051_PIS_SO1;
1035
              comp_sel =  `OC8051_CSS_AZ;
1036
              rmw = `OC8051_RMW_N;
1037
              stb_i = 1'b0;
1038
              bit_addr = 1'b0;
1039
            end
1040
          `OC8051_JZ : begin
1041
              ram_rd_sel = `OC8051_RRS_ACC;
1042
              pc_wr = eq;
1043
              pc_sel = `OC8051_PIS_SO1;
1044
              comp_sel =  `OC8051_CSS_AZ;
1045
              rmw = `OC8051_RMW_N;
1046
              stb_i = 1'b0;
1047
              bit_addr = 1'b0;
1048
            end*/
1049
          `OC8051_LCALL :begin
1050
              ram_rd_sel = `OC8051_RRS_DC;
1051
              pc_wr = `OC8051_PCW_Y;
1052
              pc_sel = `OC8051_PIS_I16;
1053
              comp_sel =  `OC8051_CSS_DC;
1054
              rmw = `OC8051_RMW_N;
1055
              stb_i = 1'b0;
1056
              bit_addr = 1'b0;
1057
            end
1058
          `OC8051_LJMP : begin
1059
              ram_rd_sel = `OC8051_RRS_DC;
1060 26 dinesha
              pc_wr = `OC8051_PCW_Y;      // Write PC
1061
              pc_sel = `OC8051_PIS_I16;   // 16 bit immediate
1062
              comp_sel =  `OC8051_CSS_DC; // No Compare
1063
              rmw = `OC8051_RMW_N;        // Not Read Modify Command
1064 2 dinesha
              stb_i = 1'b0;
1065
              bit_addr = 1'b0;
1066
            end
1067
          `OC8051_MOV_D : begin
1068
              ram_rd_sel = `OC8051_RRS_D;
1069
              pc_wr = `OC8051_PCW_N;
1070
              pc_sel = `OC8051_PIS_DC;
1071
              comp_sel =  `OC8051_CSS_DC;
1072
              rmw = `OC8051_RMW_N;
1073
              stb_i = 1'b1;
1074
              bit_addr = 1'b0;
1075
            end
1076
          `OC8051_MOV_DD : begin
1077
              ram_rd_sel = `OC8051_RRS_D;
1078
              pc_wr = `OC8051_PCW_N;
1079
              pc_sel = `OC8051_PIS_DC;
1080
              comp_sel =  `OC8051_CSS_DC;
1081
              rmw = `OC8051_RMW_N;
1082
              stb_i = 1'b1;
1083
              bit_addr = 1'b0;
1084
            end
1085
          `OC8051_MOV_BC : begin
1086
              ram_rd_sel = `OC8051_RRS_D;
1087
              pc_wr = `OC8051_PCW_N;
1088
              pc_sel = `OC8051_PIS_DC;
1089
              comp_sel =  `OC8051_CSS_DC;
1090
              rmw = `OC8051_RMW_N;
1091
              stb_i = 1'b1;
1092
              bit_addr = 1'b1;
1093
            end
1094
          `OC8051_MOV_CB : begin
1095
              ram_rd_sel = `OC8051_RRS_D;
1096
              pc_wr = `OC8051_PCW_N;
1097
              pc_sel = `OC8051_PIS_DC;
1098
              comp_sel =  `OC8051_CSS_DC;
1099
              rmw = `OC8051_RMW_N;
1100
              stb_i = 1'b1;
1101
              bit_addr = 1'b1;
1102
            end
1103
          `OC8051_MOVC_DP :begin
1104
              ram_rd_sel = `OC8051_RRS_DPTR;
1105
              pc_wr = `OC8051_PCW_N;
1106
              pc_sel = `OC8051_PIS_DC;
1107
              comp_sel =  `OC8051_CSS_DC;
1108
              rmw = `OC8051_RMW_N;
1109
              stb_i = 1'b0;
1110
              bit_addr = 1'b0;
1111
            end
1112
          `OC8051_MOVC_PC : begin
1113
              ram_rd_sel = `OC8051_RRS_DC;
1114
              pc_wr = `OC8051_PCW_N;
1115
              pc_sel = `OC8051_PIS_DC;
1116
              comp_sel =  `OC8051_CSS_DC;
1117
              rmw = `OC8051_RMW_N;
1118
              stb_i = 1'b0;
1119
              bit_addr = 1'b0;
1120
            end
1121
          `OC8051_MOVX_PA : begin
1122
              ram_rd_sel = `OC8051_RRS_DC;
1123
              pc_wr = `OC8051_PCW_N;
1124
              pc_sel = `OC8051_PIS_DC;
1125
              comp_sel =  `OC8051_CSS_DC;
1126
              rmw = `OC8051_RMW_N;
1127
              stb_i = 1'b0;
1128
              bit_addr = 1'b0;
1129
            end
1130
          `OC8051_MOVX_AP : begin
1131
              ram_rd_sel = `OC8051_RRS_DC;
1132
              pc_wr = `OC8051_PCW_N;
1133
              pc_sel = `OC8051_PIS_DC;
1134
              comp_sel =  `OC8051_CSS_DC;
1135
              rmw = `OC8051_RMW_N;
1136
              stb_i = 1'b0;
1137
              bit_addr = 1'b0;
1138
            end
1139
          `OC8051_MUL : begin
1140
              ram_rd_sel = `OC8051_RRS_B;
1141
              pc_wr = `OC8051_PCW_N;
1142
              pc_sel = `OC8051_PIS_DC;
1143
              comp_sel =  `OC8051_CSS_DC;
1144
              rmw = `OC8051_RMW_N;
1145
              stb_i = 1'b0;
1146
              bit_addr = 1'b0;
1147
            end
1148
          `OC8051_ORL_D : begin
1149
              ram_rd_sel = `OC8051_RRS_D;
1150
              pc_wr = `OC8051_PCW_N;
1151
              pc_sel = `OC8051_PIS_DC;
1152
              comp_sel =  `OC8051_CSS_DC;
1153
              rmw = `OC8051_RMW_Y;
1154
              stb_i = 1'b1;
1155
              bit_addr = 1'b0;
1156
            end
1157
          `OC8051_ORL_AD : begin
1158
              ram_rd_sel = `OC8051_RRS_D;
1159
              pc_wr = `OC8051_PCW_N;
1160
              pc_sel = `OC8051_PIS_DC;
1161
              comp_sel =  `OC8051_CSS_DC;
1162
              rmw = `OC8051_RMW_Y;
1163
              stb_i = 1'b1;
1164
              bit_addr = 1'b0;
1165
            end
1166
          `OC8051_ORL_CD : begin
1167
              ram_rd_sel = `OC8051_RRS_D;
1168
              pc_wr = `OC8051_PCW_N;
1169
              pc_sel = `OC8051_PIS_DC;
1170
              comp_sel =  `OC8051_CSS_DC;
1171
              rmw = `OC8051_RMW_Y;
1172
              stb_i = 1'b1;
1173
              bit_addr = 1'b0;
1174
            end
1175
          `OC8051_ORL_B : begin
1176
              ram_rd_sel = `OC8051_RRS_D;
1177
              pc_wr = `OC8051_PCW_N;
1178
              pc_sel = `OC8051_PIS_DC;
1179
              comp_sel =  `OC8051_CSS_DC;
1180
              rmw = `OC8051_RMW_Y;
1181
              stb_i = 1'b1;
1182
              bit_addr = 1'b1;
1183
            end
1184
          `OC8051_ORL_NB : begin
1185
              ram_rd_sel = `OC8051_RRS_D;
1186
              pc_wr = `OC8051_PCW_N;
1187
              pc_sel = `OC8051_PIS_DC;
1188
              comp_sel =  `OC8051_CSS_DC;
1189
              rmw = `OC8051_RMW_Y;
1190
              stb_i = 1'b1;
1191
              bit_addr = 1'b1;
1192
            end
1193
          `OC8051_POP : begin
1194
              ram_rd_sel = `OC8051_RRS_SP;
1195
              pc_wr = `OC8051_PCW_N;
1196
              pc_sel = `OC8051_PIS_DC;
1197
              comp_sel =  `OC8051_CSS_DC;
1198
              rmw = `OC8051_RMW_N;
1199
              stb_i = 1'b1;
1200
              bit_addr = 1'b0;
1201
            end
1202
          `OC8051_PUSH : begin
1203
              ram_rd_sel = `OC8051_RRS_D;
1204
              pc_wr = `OC8051_PCW_N;
1205
              pc_sel = `OC8051_PIS_DC;
1206
              comp_sel =  `OC8051_CSS_DC;
1207
              rmw = `OC8051_RMW_N;
1208
              stb_i = 1'b1;
1209
              bit_addr = 1'b0;
1210
            end
1211
          `OC8051_RET : begin
1212
              ram_rd_sel = `OC8051_RRS_SP;
1213
              pc_wr = `OC8051_PCW_N;
1214
              pc_sel = `OC8051_PIS_DC;
1215
              comp_sel =  `OC8051_CSS_DC;
1216
              rmw = `OC8051_RMW_N;
1217
              stb_i = 1'b0;
1218
              bit_addr = 1'b0;
1219
            end
1220
          `OC8051_RETI : begin
1221
              ram_rd_sel = `OC8051_RRS_SP;
1222
              pc_wr = `OC8051_PCW_N;
1223
              pc_sel = `OC8051_PIS_DC;
1224
              comp_sel =  `OC8051_CSS_DC;
1225
              rmw = `OC8051_RMW_N;
1226
              stb_i = 1'b0;
1227
              bit_addr = 1'b0;
1228
            end
1229
          `OC8051_SETB_B : begin
1230
              ram_rd_sel = `OC8051_RRS_D;
1231
              pc_wr = `OC8051_PCW_N;
1232
              pc_sel = `OC8051_PIS_DC;
1233
              comp_sel =  `OC8051_CSS_DC;
1234
              rmw = `OC8051_RMW_Y;
1235
              stb_i = 1'b1;
1236
              bit_addr = 1'b1;
1237
            end
1238
/*          `OC8051_SJMP : begin
1239
              ram_rd_sel = `OC8051_RRS_DC;
1240
              pc_wr = `OC8051_PCW_Y;
1241
              pc_sel = `OC8051_PIS_SO1;
1242
              comp_sel =  `OC8051_CSS_DC;
1243
              rmw = `OC8051_RMW_N;
1244
              stb_i = 1'b0;
1245
              bit_addr = 1'b0;
1246
            end*/
1247
          `OC8051_SUBB_D : begin
1248
              ram_rd_sel = `OC8051_RRS_D;
1249
              pc_wr = `OC8051_PCW_N;
1250
              pc_sel = `OC8051_PIS_DC;
1251
              comp_sel =  `OC8051_CSS_DC;
1252
              rmw = `OC8051_RMW_N;
1253
              stb_i = 1'b1;
1254
              bit_addr = 1'b0;
1255
            end
1256
          `OC8051_XCH_D : begin
1257
              ram_rd_sel = `OC8051_RRS_D;
1258
              pc_wr = `OC8051_PCW_N;
1259
              pc_sel = `OC8051_PIS_DC;
1260
              comp_sel =  `OC8051_CSS_DC;
1261
              rmw = `OC8051_RMW_N;
1262
              stb_i = 1'b1;
1263
              bit_addr = 1'b0;
1264
            end
1265
          `OC8051_XRL_D : begin
1266
              ram_rd_sel = `OC8051_RRS_D;
1267
              pc_wr = `OC8051_PCW_N;
1268
              pc_sel = `OC8051_PIS_DC;
1269
              comp_sel =  `OC8051_CSS_DC;
1270
              rmw = `OC8051_RMW_Y;
1271
              stb_i = 1'b1;
1272
              bit_addr = 1'b0;
1273
            end
1274
          `OC8051_XRL_AD : begin
1275
              ram_rd_sel = `OC8051_RRS_D;
1276
              pc_wr = `OC8051_PCW_N;
1277
              pc_sel = `OC8051_PIS_DC;
1278
              comp_sel =  `OC8051_CSS_DC;
1279
              rmw = `OC8051_RMW_Y;
1280
              stb_i = 1'b1;
1281
              bit_addr = 1'b0;
1282
            end
1283
          `OC8051_XRL_CD : begin
1284
              ram_rd_sel = `OC8051_RRS_D;
1285
              pc_wr = `OC8051_PCW_N;
1286
              pc_sel = `OC8051_PIS_DC;
1287
              comp_sel =  `OC8051_CSS_DC;
1288
              rmw = `OC8051_RMW_Y;
1289
              stb_i = 1'b1;
1290
              bit_addr = 1'b0;
1291
            end
1292
          default: begin
1293
              ram_rd_sel = `OC8051_RRS_DC;
1294
              pc_wr = `OC8051_PCW_N;
1295
              pc_sel = `OC8051_PIS_DC;
1296
              comp_sel =  `OC8051_CSS_DC;
1297
              rmw = `OC8051_RMW_N;
1298
              stb_i = 1'b1;
1299
              bit_addr = 1'b0;
1300
           end
1301
        endcase
1302
      end
1303
    endcase
1304
end
1305
 
1306
 
1307
 
1308
 
1309
 
1310
 
1311
 
1312
 
1313
 
1314
 
1315
//
1316
//
1317
// registerd outputs
1318
 
1319 25 dinesha
always @(posedge clk or negedge resetn)
1320 2 dinesha
begin
1321 25 dinesha
  if (resetn == 1'b0) begin
1322 36 dinesha
    ram_wr_sel <= `OC8051_RWS_DC;
1323
    src_sel1 <= `OC8051_AS1_DC;
1324
    src_sel2 <= `OC8051_AS2_DC;
1325
    alu_op <= `OC8051_ALU_NOP;
1326
    wr <= 1'b0;
1327
    psw_set <= `OC8051_PS_NOT;
1328
    cy_sel <= `OC8051_CY_0;
1329
    src_sel3 <= `OC8051_AS3_DC;
1330
    wr_sfr <= `OC8051_WRS_N;
1331 2 dinesha
  end else if (!wait_data) begin
1332
    case (state_dec) /* synopsys parallel_case */
1333
      2'b01: begin
1334
        casex (op_cur) /* synopsys parallel_case */
1335
          `OC8051_MOVC_DP :begin
1336 36 dinesha
              ram_wr_sel <= `OC8051_RWS_DC;
1337
              src_sel1 <= `OC8051_AS1_OP1;
1338
              src_sel2 <= `OC8051_AS2_DC;
1339
              alu_op <= `OC8051_ALU_NOP;
1340
              wr <= 1'b0;
1341
              psw_set <= `OC8051_PS_NOT;
1342
              wr_sfr <= `OC8051_WRS_ACC1;
1343 2 dinesha
            end
1344
          `OC8051_MOVC_PC :begin
1345 36 dinesha
              ram_wr_sel <= `OC8051_RWS_DC;
1346
              src_sel1 <= `OC8051_AS1_OP1;
1347
              src_sel2 <= `OC8051_AS2_DC;
1348
              alu_op <= `OC8051_ALU_NOP;
1349
              wr <= 1'b0;
1350
              psw_set <= `OC8051_PS_NOT;
1351
              wr_sfr <= `OC8051_WRS_ACC1;
1352 2 dinesha
            end
1353
          `OC8051_MOVX_PA : begin
1354 36 dinesha
              ram_wr_sel <= `OC8051_RWS_DC;
1355
              src_sel1 <= `OC8051_AS1_OP1;
1356
              src_sel2 <= `OC8051_AS2_DC;
1357
              alu_op <= `OC8051_ALU_NOP;
1358
              wr <= 1'b0;
1359
              psw_set <= `OC8051_PS_NOT;
1360
              wr_sfr <= `OC8051_WRS_ACC1;
1361 2 dinesha
            end
1362
          `OC8051_MOVX_IA : begin
1363 36 dinesha
              ram_wr_sel <= `OC8051_RWS_DC;
1364
              src_sel1 <= `OC8051_AS1_OP1;
1365
              src_sel2 <= `OC8051_AS2_DC;
1366
              alu_op <= `OC8051_ALU_NOP;
1367
              wr <= 1'b0;
1368
              psw_set <= `OC8051_PS_NOT;
1369
              wr_sfr <= `OC8051_WRS_ACC1;
1370 2 dinesha
            end
1371
          `OC8051_DIV : begin
1372 36 dinesha
              ram_wr_sel <= `OC8051_RWS_B;
1373
              src_sel1 <= `OC8051_AS1_ACC;
1374
              src_sel2 <= `OC8051_AS2_RAM;
1375
              alu_op <= `OC8051_ALU_DIV;
1376
              wr <= 1'b1;
1377
              psw_set <= `OC8051_PS_OV;
1378
              wr_sfr <= `OC8051_WRS_ACC2;
1379 2 dinesha
            end
1380
          `OC8051_MUL : begin
1381 36 dinesha
              ram_wr_sel <= `OC8051_RWS_B;
1382
              src_sel1 <= `OC8051_AS1_ACC;
1383
              src_sel2 <= `OC8051_AS2_RAM;
1384
              alu_op <= `OC8051_ALU_MUL;
1385
              wr <= 1'b1;
1386
              psw_set <= `OC8051_PS_OV;
1387
              wr_sfr <=`OC8051_WRS_ACC2;
1388 2 dinesha
            end
1389
          default begin
1390 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1391
              src_sel1 <=`OC8051_AS1_DC;
1392
              src_sel2 <=`OC8051_AS2_DC;
1393
              alu_op <=`OC8051_ALU_NOP;
1394
              wr <=1'b0;
1395
              psw_set <=`OC8051_PS_NOT;
1396
              wr_sfr <=`OC8051_WRS_N;
1397 2 dinesha
          end
1398
        endcase
1399 36 dinesha
        cy_sel <=`OC8051_CY_0;
1400
        src_sel3 <=`OC8051_AS3_DC;
1401 2 dinesha
      end
1402
      2'b10: begin
1403
        casex (op_cur) /* synopsys parallel_case */
1404
          `OC8051_ACALL :begin
1405 36 dinesha
              ram_wr_sel <=`OC8051_RWS_SP;
1406
              src_sel1 <=`OC8051_AS1_PCH;
1407
              src_sel2 <=`OC8051_AS2_DC;
1408
              alu_op <=`OC8051_ALU_NOP;
1409
              wr <=1'b1;
1410
              psw_set <=`OC8051_PS_NOT;
1411 2 dinesha
            end
1412
          `OC8051_LCALL :begin
1413 36 dinesha
              ram_wr_sel <=`OC8051_RWS_SP;
1414
              src_sel1 <=`OC8051_AS1_PCH;
1415
              src_sel2 <=`OC8051_AS2_DC;
1416
              alu_op <=`OC8051_ALU_NOP;
1417
              wr <=1'b1;
1418
              psw_set <=`OC8051_PS_NOT;
1419 2 dinesha
            end
1420
          `OC8051_JBC : begin
1421 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
1422
              src_sel1 <=`OC8051_AS1_DC;
1423
              src_sel2 <=`OC8051_AS2_DC;
1424
              alu_op <=`OC8051_ALU_NOP;
1425
              wr <=1'b1;
1426
              psw_set <=`OC8051_PS_NOT;
1427 2 dinesha
            end
1428
          `OC8051_DIV : begin
1429 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1430
              src_sel1 <=`OC8051_AS1_ACC;
1431
              src_sel2 <=`OC8051_AS2_RAM;
1432
              alu_op <=`OC8051_ALU_DIV;
1433
              wr <=1'b0;
1434
              psw_set <=`OC8051_PS_OV;
1435 2 dinesha
            end
1436
          `OC8051_MUL : begin
1437 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1438
              src_sel1 <=`OC8051_AS1_ACC;
1439
              src_sel2 <=`OC8051_AS2_RAM;
1440
              alu_op <=`OC8051_ALU_MUL;
1441
              wr <=1'b0;
1442
              psw_set <=`OC8051_PS_OV;
1443 2 dinesha
            end
1444
          default begin
1445 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1446
              src_sel1 <=`OC8051_AS1_DC;
1447
              src_sel2 <=`OC8051_AS2_DC;
1448
              alu_op <=`OC8051_ALU_NOP;
1449
              wr <=1'b0;
1450
              psw_set <=`OC8051_PS_NOT;
1451 2 dinesha
          end
1452
        endcase
1453 36 dinesha
        cy_sel <=`OC8051_CY_0;
1454
        src_sel3 <=`OC8051_AS3_DC;
1455
        wr_sfr <=`OC8051_WRS_N;
1456 2 dinesha
      end
1457
 
1458
      2'b11: begin
1459
        casex (op_cur) /* synopsys parallel_case */
1460
          `OC8051_RET : begin
1461 36 dinesha
              src_sel1 <=`OC8051_AS1_RAM;
1462
              src_sel2 <=`OC8051_AS2_DC;
1463
              alu_op <=`OC8051_ALU_NOP;
1464
              psw_set <=`OC8051_PS_NOT;
1465 2 dinesha
            end
1466
          `OC8051_RETI : begin
1467 36 dinesha
              src_sel1 <=`OC8051_AS1_RAM;
1468
              src_sel2 <=`OC8051_AS2_DC;
1469
              alu_op <=`OC8051_ALU_NOP;
1470
              psw_set <=`OC8051_PS_NOT;
1471 2 dinesha
            end
1472
          `OC8051_DIV : begin
1473 36 dinesha
              src_sel1 <=`OC8051_AS1_ACC;
1474
              src_sel2 <=`OC8051_AS2_RAM;
1475
              alu_op <=`OC8051_ALU_DIV;
1476
              psw_set <=`OC8051_PS_OV;
1477 2 dinesha
            end
1478
          `OC8051_MUL : begin
1479 36 dinesha
              src_sel1 <=`OC8051_AS1_ACC;
1480
              src_sel2 <=`OC8051_AS2_RAM;
1481
              alu_op <=`OC8051_ALU_MUL;
1482
              psw_set <=`OC8051_PS_OV;
1483 2 dinesha
            end
1484
         default begin
1485 36 dinesha
              src_sel1 <=`OC8051_AS1_DC;
1486
              src_sel2 <=`OC8051_AS2_DC;
1487
              alu_op <=`OC8051_ALU_NOP;
1488
              psw_set <=`OC8051_PS_NOT;
1489 2 dinesha
          end
1490
        endcase
1491 36 dinesha
        ram_wr_sel <=`OC8051_RWS_DC;
1492
        wr <=1'b0;
1493
        cy_sel <=`OC8051_CY_0;
1494
        src_sel3 <=`OC8051_AS3_DC;
1495
        wr_sfr <=`OC8051_WRS_N;
1496 2 dinesha
      end
1497
      default: begin
1498
        casex (op_cur) /* synopsys parallel_case */
1499
          `OC8051_ACALL :begin
1500 36 dinesha
              ram_wr_sel <=`OC8051_RWS_SP;
1501
              src_sel1 <=`OC8051_AS1_PCL;
1502
              src_sel2 <=`OC8051_AS2_DC;
1503
              alu_op <=`OC8051_ALU_NOP;
1504
              wr <=1'b1;
1505
              psw_set <=`OC8051_PS_NOT;
1506
              cy_sel <=`OC8051_CY_0;
1507
              src_sel3 <=`OC8051_AS3_DC;
1508
              wr_sfr <=`OC8051_WRS_N;
1509 2 dinesha
            end
1510
          `OC8051_AJMP : begin
1511 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1512
              src_sel1 <=`OC8051_AS1_DC;
1513
              src_sel2 <=`OC8051_AS2_DC;
1514
              alu_op <=`OC8051_ALU_NOP;
1515
              wr <=1'b0;
1516
              psw_set <=`OC8051_PS_NOT;
1517
              cy_sel <=`OC8051_CY_0;
1518
              src_sel3 <=`OC8051_AS3_DC;
1519
              wr_sfr <=`OC8051_WRS_N;
1520 2 dinesha
            end
1521
          `OC8051_ADD_R : begin
1522 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1523
              src_sel1 <=`OC8051_AS1_ACC;
1524
              src_sel2 <=`OC8051_AS2_RAM;
1525
              alu_op <=`OC8051_ALU_ADD;
1526
              wr <=1'b0;
1527
              psw_set <=`OC8051_PS_AC;
1528
              cy_sel <=`OC8051_CY_0;
1529
              src_sel3 <=`OC8051_AS3_DC;
1530
              wr_sfr <=`OC8051_WRS_ACC1;
1531 2 dinesha
            end
1532
          `OC8051_ADDC_R : begin
1533 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1534
              src_sel1 <=`OC8051_AS1_ACC;
1535
              src_sel2 <=`OC8051_AS2_RAM;
1536
              alu_op <=`OC8051_ALU_ADD;
1537
              wr <=1'b0;
1538
              psw_set <=`OC8051_PS_AC;
1539
              cy_sel <=`OC8051_CY_PSW;
1540
              src_sel3 <=`OC8051_AS3_DC;
1541
              wr_sfr <=`OC8051_WRS_ACC1;
1542 2 dinesha
            end
1543
          `OC8051_ANL_R : begin
1544 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1545
              src_sel1 <=`OC8051_AS1_ACC;
1546
              src_sel2 <=`OC8051_AS2_RAM;
1547
              alu_op <=`OC8051_ALU_AND;
1548
              wr <=1'b0;
1549
              psw_set <=`OC8051_PS_NOT;
1550
              cy_sel <=`OC8051_CY_0;
1551
              src_sel3 <=`OC8051_AS3_DC;
1552
              wr_sfr <=`OC8051_WRS_ACC1;
1553 2 dinesha
            end
1554
          `OC8051_CJNE_R : begin
1555 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1556
              src_sel1 <=`OC8051_AS1_RAM;
1557
              src_sel2 <=`OC8051_AS2_OP2;
1558
              alu_op <=`OC8051_ALU_SUB;
1559
              wr <=1'b0;
1560
              psw_set <=`OC8051_PS_CY;
1561
              cy_sel <=`OC8051_CY_0;
1562
              src_sel3 <=`OC8051_AS3_DC;
1563
              wr_sfr <=`OC8051_WRS_N;
1564 2 dinesha
            end
1565
          `OC8051_DEC_R : begin
1566 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1567
              src_sel1 <=`OC8051_AS1_RAM;
1568
              src_sel2 <=`OC8051_AS2_ZERO;
1569
              alu_op <=`OC8051_ALU_INC;
1570
              wr <=1'b1;
1571
              psw_set <=`OC8051_PS_NOT;
1572
              cy_sel <=`OC8051_CY_1;
1573
              src_sel3 <=`OC8051_AS3_DC;
1574
              wr_sfr <=`OC8051_WRS_N;
1575 2 dinesha
            end
1576
          `OC8051_DJNZ_R : begin
1577 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1578
              src_sel1 <=`OC8051_AS1_RAM;
1579
              src_sel2 <=`OC8051_AS2_ZERO;
1580
              alu_op <=`OC8051_ALU_INC;
1581
              wr <=1'b1;
1582
              psw_set <=`OC8051_PS_NOT;
1583
              cy_sel <=`OC8051_CY_1;
1584
              src_sel3 <=`OC8051_AS3_DC;
1585
              wr_sfr <=`OC8051_WRS_N;
1586 2 dinesha
            end
1587
          `OC8051_INC_R : begin
1588 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1589
              src_sel1 <=`OC8051_AS1_RAM;
1590
              src_sel2 <=`OC8051_AS2_ZERO;
1591
              alu_op <=`OC8051_ALU_INC;
1592
              wr <=1'b1;
1593
              psw_set <=`OC8051_PS_NOT;
1594
              cy_sel <=`OC8051_CY_0;
1595
              src_sel3 <=`OC8051_AS3_DC;
1596
              wr_sfr <=`OC8051_WRS_N;
1597 2 dinesha
            end
1598
          `OC8051_MOV_R : begin
1599 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1600
              src_sel1 <=`OC8051_AS1_RAM;
1601
              src_sel2 <=`OC8051_AS2_DC;
1602
              alu_op <=`OC8051_ALU_NOP;
1603
              wr <=1'b0;
1604
              psw_set <=`OC8051_PS_NOT;
1605
              cy_sel <=`OC8051_CY_0;
1606
              src_sel3 <=`OC8051_AS3_DC;
1607
              wr_sfr <=`OC8051_WRS_ACC1;
1608 2 dinesha
            end
1609
          `OC8051_MOV_AR : begin
1610 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1611
              src_sel1 <=`OC8051_AS1_ACC;
1612
              src_sel2 <=`OC8051_AS2_DC;
1613
              alu_op <=`OC8051_ALU_NOP;
1614
              wr <=1'b1;
1615
              psw_set <=`OC8051_PS_NOT;
1616
              cy_sel <=`OC8051_CY_0;
1617
              src_sel3 <=`OC8051_AS3_DC;
1618
              wr_sfr <=`OC8051_WRS_N;
1619 2 dinesha
            end
1620
          `OC8051_MOV_DR : begin
1621 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1622
              src_sel1 <=`OC8051_AS1_RAM;
1623
              src_sel2 <=`OC8051_AS2_DC;
1624
              alu_op <=`OC8051_ALU_NOP;
1625
              wr <=1'b1;
1626
              psw_set <=`OC8051_PS_NOT;
1627
              cy_sel <=`OC8051_CY_0;
1628
              src_sel3 <=`OC8051_AS3_DC;
1629
              wr_sfr <=`OC8051_WRS_N;
1630 2 dinesha
            end
1631
          `OC8051_MOV_CR : begin
1632 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1633
              src_sel1 <=`OC8051_AS1_OP2;
1634
              src_sel2 <=`OC8051_AS2_DC;
1635
              alu_op <=`OC8051_ALU_NOP;
1636
              wr <=1'b1;
1637
              psw_set <=`OC8051_PS_NOT;
1638
              cy_sel <=`OC8051_CY_0;
1639
              src_sel3 <=`OC8051_AS3_DC;
1640
              wr_sfr <=`OC8051_WRS_N;
1641 2 dinesha
            end
1642
          `OC8051_MOV_RD : begin
1643 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
1644
              src_sel1 <=`OC8051_AS1_RAM;
1645
              src_sel2 <=`OC8051_AS2_DC;
1646
              alu_op <=`OC8051_ALU_NOP;
1647
              wr <=1'b1;
1648
              psw_set <=`OC8051_PS_NOT;
1649
              cy_sel <=`OC8051_CY_0;
1650
              src_sel3 <=`OC8051_AS3_DC;
1651
              wr_sfr <=`OC8051_WRS_N;
1652 2 dinesha
            end
1653
          `OC8051_ORL_R : begin
1654 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1655
              src_sel1 <=`OC8051_AS1_RAM;
1656
              src_sel2 <=`OC8051_AS2_ACC;
1657
              alu_op <=`OC8051_ALU_OR;
1658
              wr <=1'b0;
1659
              psw_set <=`OC8051_PS_NOT;
1660
              cy_sel <=`OC8051_CY_0;
1661
              src_sel3 <=`OC8051_AS3_DC;
1662
              wr_sfr <=`OC8051_WRS_ACC1;
1663 2 dinesha
            end
1664
          `OC8051_SUBB_R : begin
1665 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1666
              src_sel1 <=`OC8051_AS1_ACC;
1667
              src_sel2 <=`OC8051_AS2_RAM;
1668
              alu_op <=`OC8051_ALU_SUB;
1669
              wr <=1'b0;
1670
              psw_set <=`OC8051_PS_AC;
1671
              cy_sel <=`OC8051_CY_PSW;
1672
              src_sel3 <=`OC8051_AS3_DC;
1673
              wr_sfr <=`OC8051_WRS_ACC1;
1674 2 dinesha
            end
1675
          `OC8051_XCH_R : begin
1676 36 dinesha
              ram_wr_sel <=`OC8051_RWS_RN;
1677
              src_sel1 <=`OC8051_AS1_RAM;
1678
              src_sel2 <=`OC8051_AS2_ACC;
1679
              alu_op <=`OC8051_ALU_XCH;
1680
              wr <=1'b1;
1681
              psw_set <=`OC8051_PS_NOT;
1682
              cy_sel <=`OC8051_CY_1;
1683
              src_sel3 <=`OC8051_AS3_DC;
1684
              wr_sfr <=`OC8051_WRS_ACC2;
1685 2 dinesha
            end
1686
          `OC8051_XRL_R : begin
1687 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1688
              src_sel1 <=`OC8051_AS1_RAM;
1689
              src_sel2 <=`OC8051_AS2_ACC;
1690
              alu_op <=`OC8051_ALU_XOR;
1691
              wr <=1'b0;
1692
              psw_set <=`OC8051_PS_NOT;
1693
              cy_sel <=`OC8051_CY_0;
1694
              src_sel3 <=`OC8051_AS3_DC;
1695
              wr_sfr <=`OC8051_WRS_ACC1;
1696 2 dinesha
            end
1697
 
1698
    //op_code [7:1]
1699
          `OC8051_ADD_I : begin
1700 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1701
              src_sel1 <=`OC8051_AS1_ACC;
1702
              src_sel2 <=`OC8051_AS2_RAM;
1703
              alu_op <=`OC8051_ALU_ADD;
1704
              wr <=1'b0;
1705
              psw_set <=`OC8051_PS_AC;
1706
              cy_sel <=`OC8051_CY_0;
1707
              src_sel3 <=`OC8051_AS3_DC;
1708
              wr_sfr <=`OC8051_WRS_ACC1;
1709 2 dinesha
            end
1710
          `OC8051_ADDC_I : begin
1711 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1712
              src_sel1 <=`OC8051_AS1_ACC;
1713
              src_sel2 <=`OC8051_AS2_RAM;
1714
              alu_op <=`OC8051_ALU_ADD;
1715
              wr <=1'b0;
1716
              psw_set <=`OC8051_PS_AC;
1717
              cy_sel <=`OC8051_CY_PSW;
1718
              src_sel3 <=`OC8051_AS3_DC;
1719
              wr_sfr <=`OC8051_WRS_ACC1;
1720 2 dinesha
            end
1721
          `OC8051_ANL_I : begin
1722 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1723
              src_sel1 <=`OC8051_AS1_ACC;
1724
              src_sel2 <=`OC8051_AS2_RAM;
1725
              alu_op <=`OC8051_ALU_AND;
1726
              wr <=1'b0;
1727
              psw_set <=`OC8051_PS_NOT;
1728
              cy_sel <=`OC8051_CY_0;
1729
              src_sel3 <=`OC8051_AS3_DC;
1730
              wr_sfr <=`OC8051_WRS_ACC1;
1731 2 dinesha
            end
1732
          `OC8051_CJNE_I : begin
1733 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1734
              src_sel1 <=`OC8051_AS1_RAM;
1735
              src_sel2 <=`OC8051_AS2_OP2;
1736
              alu_op <=`OC8051_ALU_SUB;
1737
              wr <=1'b0;
1738
              psw_set <=`OC8051_PS_CY;
1739
              cy_sel <=`OC8051_CY_0;
1740
              src_sel3 <=`OC8051_AS3_DC;
1741
              wr_sfr <=`OC8051_WRS_N;
1742 2 dinesha
            end
1743
          `OC8051_DEC_I : begin
1744 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1745
              src_sel1 <=`OC8051_AS1_RAM;
1746
              src_sel2 <=`OC8051_AS2_ZERO;
1747
              alu_op <=`OC8051_ALU_INC;
1748
              wr <=1'b1;
1749
              psw_set <=`OC8051_PS_NOT;
1750
              cy_sel <=`OC8051_CY_1;
1751
              src_sel3 <=`OC8051_AS3_DC;
1752
              wr_sfr <=`OC8051_WRS_N;
1753 2 dinesha
            end
1754
          `OC8051_INC_I : begin
1755 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1756
              src_sel1 <=`OC8051_AS1_RAM;
1757
              src_sel2 <=`OC8051_AS2_ZERO;
1758
              alu_op <=`OC8051_ALU_INC;
1759
              wr <=1'b1;
1760
              psw_set <=`OC8051_PS_NOT;
1761
              cy_sel <=`OC8051_CY_0;
1762
              src_sel3 <=`OC8051_AS3_DC;
1763
              wr_sfr <=`OC8051_WRS_N;
1764 2 dinesha
            end
1765
          `OC8051_MOV_I : begin
1766 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1767
              src_sel1 <=`OC8051_AS1_RAM;
1768
              src_sel2 <=`OC8051_AS2_DC;
1769
              alu_op <=`OC8051_ALU_NOP;
1770
              wr <=1'b0;
1771
              psw_set <=`OC8051_PS_NOT;
1772
              cy_sel <=`OC8051_CY_0;
1773
              src_sel3 <=`OC8051_AS3_DC;
1774
              wr_sfr <=`OC8051_WRS_ACC1;
1775 2 dinesha
            end
1776
          `OC8051_MOV_ID : begin
1777 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
1778
              src_sel1 <=`OC8051_AS1_RAM;
1779
              src_sel2 <=`OC8051_AS2_DC;
1780
              alu_op <=`OC8051_ALU_NOP;
1781
              wr <=1'b1;
1782
              psw_set <=`OC8051_PS_NOT;
1783
              cy_sel <=`OC8051_CY_0;
1784
              src_sel3 <=`OC8051_AS3_DC;
1785
              wr_sfr <=`OC8051_WRS_N;
1786 2 dinesha
            end
1787
          `OC8051_MOV_AI : begin
1788 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1789
              src_sel1 <=`OC8051_AS1_ACC;
1790
              src_sel2 <=`OC8051_AS2_DC;
1791
              alu_op <=`OC8051_ALU_NOP;
1792
              wr <=1'b1;
1793
              psw_set <=`OC8051_PS_NOT;
1794
              cy_sel <=`OC8051_CY_0;
1795
              src_sel3 <=`OC8051_AS3_DC;
1796
              wr_sfr <=`OC8051_WRS_N;
1797 2 dinesha
            end
1798
          `OC8051_MOV_DI : begin
1799 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1800
              src_sel1 <=`OC8051_AS1_RAM;
1801
              src_sel2 <=`OC8051_AS2_DC;
1802
              alu_op <=`OC8051_ALU_NOP;
1803
              wr <=1'b1;
1804
              psw_set <=`OC8051_PS_NOT;
1805
              cy_sel <=`OC8051_CY_0;
1806
              src_sel3 <=`OC8051_AS3_DC;
1807
              wr_sfr <=`OC8051_WRS_N;
1808 2 dinesha
            end
1809
          `OC8051_MOV_CI : begin
1810 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1811
              src_sel1 <=`OC8051_AS1_OP2;
1812
              src_sel2 <=`OC8051_AS2_DC;
1813
              alu_op <=`OC8051_ALU_NOP;
1814
              wr <=1'b1;
1815
              psw_set <=`OC8051_PS_NOT;
1816
              cy_sel <=`OC8051_CY_0;
1817
              src_sel3 <=`OC8051_AS3_DC;
1818
              wr_sfr <=`OC8051_WRS_N;
1819 2 dinesha
            end
1820
          `OC8051_MOVX_IA : begin
1821 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1822
              src_sel1 <=`OC8051_AS1_DC;
1823
              src_sel2 <=`OC8051_AS2_DC;
1824
              alu_op <=`OC8051_ALU_NOP;
1825
              wr <=1'b0;
1826
              psw_set <=`OC8051_PS_NOT;
1827
              cy_sel <=`OC8051_CY_0;
1828
              src_sel3 <=`OC8051_AS3_DC;
1829
              wr_sfr <=`OC8051_WRS_N;
1830 2 dinesha
            end
1831
          `OC8051_MOVX_AI :begin
1832 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1833
              src_sel1 <=`OC8051_AS1_DC;
1834
              src_sel2 <=`OC8051_AS2_DC;
1835
              alu_op <=`OC8051_ALU_NOP;
1836
              wr <=1'b0;
1837
              psw_set <=`OC8051_PS_NOT;
1838
              cy_sel <=`OC8051_CY_0;
1839
              src_sel3 <=`OC8051_AS3_DC;
1840
              wr_sfr <=`OC8051_WRS_N;
1841 2 dinesha
            end
1842
          `OC8051_ORL_I : begin
1843 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1844
              src_sel1 <=`OC8051_AS1_RAM;
1845
              src_sel2 <=`OC8051_AS2_ACC;
1846
              alu_op <=`OC8051_ALU_OR;
1847
              wr <=1'b0;
1848
              psw_set <=`OC8051_PS_NOT;
1849
              cy_sel <=`OC8051_CY_0;
1850
              src_sel3 <=`OC8051_AS3_DC;
1851
              wr_sfr <=`OC8051_WRS_ACC1;
1852 2 dinesha
            end
1853
          `OC8051_SUBB_I : begin
1854 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1855
              src_sel1 <=`OC8051_AS1_ACC;
1856
              src_sel2 <=`OC8051_AS2_RAM;
1857
              alu_op <=`OC8051_ALU_SUB;
1858
              wr <=1'b0;
1859
              psw_set <=`OC8051_PS_AC;
1860
              cy_sel <=`OC8051_CY_PSW;
1861
              src_sel3 <=`OC8051_AS3_DC;
1862
              wr_sfr <=`OC8051_WRS_ACC1;
1863 2 dinesha
            end
1864
          `OC8051_XCH_I : begin
1865 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1866
              src_sel1 <=`OC8051_AS1_RAM;
1867
              src_sel2 <=`OC8051_AS2_ACC;
1868
              alu_op <=`OC8051_ALU_XCH;
1869
              wr <=1'b1;
1870
              psw_set <=`OC8051_PS_NOT;
1871
              cy_sel <=`OC8051_CY_1;
1872
              src_sel3 <=`OC8051_AS3_DC;
1873
              wr_sfr <=`OC8051_WRS_ACC2;
1874 2 dinesha
            end
1875
          `OC8051_XCHD :begin
1876 36 dinesha
              ram_wr_sel <=`OC8051_RWS_I;
1877
              src_sel1 <=`OC8051_AS1_RAM;
1878
              src_sel2 <=`OC8051_AS2_ACC;
1879
              alu_op <=`OC8051_ALU_XCH;
1880
              wr <=1'b1;
1881
              psw_set <=`OC8051_PS_NOT;
1882
              cy_sel <=`OC8051_CY_0;
1883
              src_sel3 <=`OC8051_AS3_DC;
1884
              wr_sfr <=`OC8051_WRS_ACC2;
1885 2 dinesha
            end
1886
          `OC8051_XRL_I : begin
1887 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1888
              src_sel1 <=`OC8051_AS1_RAM;
1889
              src_sel2 <=`OC8051_AS2_ACC;
1890
              alu_op <=`OC8051_ALU_XOR;
1891
              wr <=1'b0;
1892
              psw_set <=`OC8051_PS_NOT;
1893
              cy_sel <=`OC8051_CY_0;
1894
              src_sel3 <=`OC8051_AS3_DC;
1895
              wr_sfr <=`OC8051_WRS_ACC1;
1896 2 dinesha
            end
1897
 
1898
    //op_code [7:0]
1899
          `OC8051_ADD_D : begin
1900 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1901
              src_sel1 <=`OC8051_AS1_ACC;
1902
              src_sel2 <=`OC8051_AS2_RAM;
1903
              alu_op <=`OC8051_ALU_ADD;
1904
              wr <=1'b0;
1905
              psw_set <=`OC8051_PS_AC;
1906
              cy_sel <=`OC8051_CY_0;
1907
              src_sel3 <=`OC8051_AS3_DC;
1908
              wr_sfr <=`OC8051_WRS_ACC1;
1909 2 dinesha
            end
1910
          `OC8051_ADD_C : begin
1911 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1912
              src_sel1 <=`OC8051_AS1_OP2;
1913
              src_sel2 <=`OC8051_AS2_ACC;
1914
              alu_op <=`OC8051_ALU_ADD;
1915
              wr <=1'b0;
1916
              psw_set <=`OC8051_PS_AC;
1917
              cy_sel <=`OC8051_CY_0;
1918
              src_sel3 <=`OC8051_AS3_DC;
1919
              wr_sfr <=`OC8051_WRS_ACC1;
1920 2 dinesha
            end
1921
          `OC8051_ADDC_D : begin
1922 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1923
              src_sel1 <=`OC8051_AS1_ACC;
1924
              src_sel2 <=`OC8051_AS2_RAM;
1925
              alu_op <=`OC8051_ALU_ADD;
1926
              wr <=1'b0;
1927
              psw_set <=`OC8051_PS_AC;
1928
              cy_sel <=`OC8051_CY_PSW;
1929
              src_sel3 <=`OC8051_AS3_DC;
1930
              wr_sfr <=`OC8051_WRS_ACC1;
1931 2 dinesha
            end
1932
          `OC8051_ADDC_C : begin
1933 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1934
              src_sel1 <=`OC8051_AS1_OP2;
1935
              src_sel2 <=`OC8051_AS2_ACC;
1936
              alu_op <=`OC8051_ALU_ADD;
1937
              wr <=1'b0;
1938
              psw_set <=`OC8051_PS_AC;
1939
              cy_sel <=`OC8051_CY_PSW;
1940
              src_sel3 <=`OC8051_AS3_DC;
1941
              wr_sfr <=`OC8051_WRS_ACC1;
1942 2 dinesha
            end
1943
          `OC8051_ANL_D : begin
1944 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1945
              src_sel1 <=`OC8051_AS1_ACC;
1946
              src_sel2 <=`OC8051_AS2_RAM;
1947
              alu_op <=`OC8051_ALU_AND;
1948
              wr <=1'b0;
1949
              psw_set <=`OC8051_PS_NOT;
1950
              cy_sel <=`OC8051_CY_0;
1951
              src_sel3 <=`OC8051_AS3_DC;
1952
              wr_sfr <=`OC8051_WRS_ACC1;
1953 2 dinesha
            end
1954
          `OC8051_ANL_C : begin
1955 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1956
              src_sel1 <=`OC8051_AS1_OP2;
1957
              src_sel2 <=`OC8051_AS2_ACC;
1958
              alu_op <=`OC8051_ALU_AND;
1959
              wr <=1'b0;
1960
              psw_set <=`OC8051_PS_NOT;
1961
              cy_sel <=`OC8051_CY_0;
1962
              src_sel3 <=`OC8051_AS3_DC;
1963
              wr_sfr <=`OC8051_WRS_ACC1;
1964 2 dinesha
            end
1965
          `OC8051_ANL_DD : begin
1966 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
1967
              src_sel1 <=`OC8051_AS1_ACC;
1968
              src_sel2 <=`OC8051_AS2_RAM;
1969
              alu_op <=`OC8051_ALU_AND;
1970
              wr <=1'b1;
1971
              psw_set <=`OC8051_PS_NOT;
1972
              cy_sel <=`OC8051_CY_0;
1973
              src_sel3 <=`OC8051_AS3_DC;
1974
              wr_sfr <=`OC8051_WRS_N;
1975 2 dinesha
            end
1976
          `OC8051_ANL_DC : begin
1977 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
1978
              src_sel1 <=`OC8051_AS1_OP3;
1979
              src_sel2 <=`OC8051_AS2_RAM;
1980
              alu_op <=`OC8051_ALU_AND;
1981
              wr <=1'b1;
1982
              psw_set <=`OC8051_PS_NOT;
1983
              cy_sel <=`OC8051_CY_0;
1984
              src_sel3 <=`OC8051_AS3_DC;
1985
              wr_sfr <=`OC8051_WRS_N;
1986 2 dinesha
            end
1987
          `OC8051_ANL_B : begin
1988 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
1989
              src_sel1 <=`OC8051_AS1_DC;
1990
              src_sel2 <=`OC8051_AS2_DC;
1991
              alu_op <=`OC8051_ALU_AND;
1992
              wr <=1'b0;
1993
              psw_set <=`OC8051_PS_CY;
1994
              cy_sel <=`OC8051_CY_PSW;
1995
              src_sel3 <=`OC8051_AS3_DC;
1996
              wr_sfr <=`OC8051_WRS_N;
1997 2 dinesha
            end
1998
          `OC8051_ANL_NB : begin
1999 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2000
              src_sel1 <=`OC8051_AS1_DC;
2001
              src_sel2 <=`OC8051_AS2_DC;
2002
              alu_op <=`OC8051_ALU_RR;
2003
              wr <=1'b0;
2004
              psw_set <=`OC8051_PS_CY;
2005
              cy_sel <=`OC8051_CY_PSW;
2006
              src_sel3 <=`OC8051_AS3_DC;
2007
              wr_sfr <=`OC8051_WRS_N;
2008 2 dinesha
            end
2009
          `OC8051_CJNE_D : begin
2010 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2011
              src_sel1 <=`OC8051_AS1_ACC;
2012
              src_sel2 <=`OC8051_AS2_RAM;
2013
              alu_op <=`OC8051_ALU_SUB;
2014
              wr <=1'b0;
2015
              psw_set <=`OC8051_PS_CY;
2016
              cy_sel <=`OC8051_CY_0;
2017
              src_sel3 <=`OC8051_AS3_DC;
2018
              wr_sfr <=`OC8051_WRS_N;
2019 2 dinesha
            end
2020
          `OC8051_CJNE_C : begin
2021 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2022
              src_sel1 <=`OC8051_AS1_ACC;
2023
              src_sel2 <=`OC8051_AS2_OP2;
2024
              alu_op <=`OC8051_ALU_SUB;
2025
              wr <=1'b0;
2026
              psw_set <=`OC8051_PS_CY;
2027
              cy_sel <=`OC8051_CY_0;
2028
              src_sel3 <=`OC8051_AS3_DC;
2029
              wr_sfr <=`OC8051_WRS_N;
2030 2 dinesha
            end
2031
          `OC8051_CLR_A : begin
2032 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2033
              src_sel1 <=`OC8051_AS1_ACC;
2034
              src_sel2 <=`OC8051_AS2_ACC;
2035
              alu_op <=`OC8051_ALU_SUB;
2036
              wr <=1'b0;
2037
              psw_set <=`OC8051_PS_NOT;
2038
              cy_sel <=`OC8051_CY_0;
2039
              src_sel3 <=`OC8051_AS3_PC;
2040
              wr_sfr <=`OC8051_WRS_ACC1;
2041 2 dinesha
            end
2042
          `OC8051_CLR_C : begin
2043 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2044
              src_sel1 <=`OC8051_AS1_DC;
2045
              src_sel2 <=`OC8051_AS2_DC;
2046
              alu_op <=`OC8051_ALU_NOP;
2047
              wr <=1'b0;
2048
              psw_set <=`OC8051_PS_CY;
2049
              cy_sel <=`OC8051_CY_0;
2050
              src_sel3 <=`OC8051_AS3_PC;
2051
              wr_sfr <=`OC8051_WRS_N;
2052 2 dinesha
            end
2053
          `OC8051_CLR_B : begin
2054 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2055
              src_sel1 <=`OC8051_AS1_DC;
2056
              src_sel2 <=`OC8051_AS2_DC;
2057
              alu_op <=`OC8051_ALU_NOP;
2058
              wr <=1'b1;
2059
              psw_set <=`OC8051_PS_NOT;
2060
              cy_sel <=`OC8051_CY_0;
2061
              src_sel3 <=`OC8051_AS3_PC;
2062
              wr_sfr <=`OC8051_WRS_N;
2063 2 dinesha
            end
2064
          `OC8051_CPL_A : begin
2065 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2066
              src_sel1 <=`OC8051_AS1_ACC;
2067
              src_sel2 <=`OC8051_AS2_DC;
2068
              alu_op <=`OC8051_ALU_NOT;
2069
              wr <=1'b0;
2070
              psw_set <=`OC8051_PS_NOT;
2071
              cy_sel <=`OC8051_CY_0;
2072
              src_sel3 <=`OC8051_AS3_DC;
2073
              wr_sfr <=`OC8051_WRS_ACC1;
2074 2 dinesha
            end
2075
          `OC8051_CPL_C : begin
2076 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2077
              src_sel1 <=`OC8051_AS1_DC;
2078
              src_sel2 <=`OC8051_AS2_DC;
2079
              alu_op <=`OC8051_ALU_NOT;
2080
              wr <=1'b0;
2081
              psw_set <=`OC8051_PS_CY;
2082
              cy_sel <=`OC8051_CY_PSW;
2083
              src_sel3 <=`OC8051_AS3_DC;
2084
              wr_sfr <=`OC8051_WRS_N;
2085 2 dinesha
            end
2086
          `OC8051_CPL_B : begin
2087 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2088
              src_sel1 <=`OC8051_AS1_DC;
2089
              src_sel2 <=`OC8051_AS2_DC;
2090
              alu_op <=`OC8051_ALU_NOT;
2091
              wr <=1'b1;
2092
              psw_set <=`OC8051_PS_NOT;
2093
              cy_sel <=`OC8051_CY_RAM;
2094
              src_sel3 <=`OC8051_AS3_DC;
2095
              wr_sfr <=`OC8051_WRS_N;
2096 2 dinesha
            end
2097
          `OC8051_DA : begin
2098 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2099
              src_sel1 <=`OC8051_AS1_ACC;
2100
              src_sel2 <=`OC8051_AS2_DC;
2101
              alu_op <=`OC8051_ALU_DA;
2102
              wr <=1'b0;
2103
              psw_set <=`OC8051_PS_CY;
2104
              cy_sel <=`OC8051_CY_PSW;
2105
              src_sel3 <=`OC8051_AS3_DC;
2106
              wr_sfr <=`OC8051_WRS_ACC1;
2107 2 dinesha
            end
2108
          `OC8051_DEC_A : begin
2109 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2110
              src_sel1 <=`OC8051_AS1_ACC;
2111
              src_sel2 <=`OC8051_AS2_ZERO;
2112
              alu_op <=`OC8051_ALU_INC;
2113
              wr <=1'b0;
2114
              psw_set <=`OC8051_PS_NOT;
2115
              cy_sel <=`OC8051_CY_1;
2116
              src_sel3 <=`OC8051_AS3_DC;
2117
              wr_sfr <=`OC8051_WRS_ACC1;
2118 2 dinesha
            end
2119
          `OC8051_DEC_D : begin
2120 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2121
              src_sel1 <=`OC8051_AS1_RAM;
2122
              src_sel2 <=`OC8051_AS2_ZERO;
2123
              alu_op <=`OC8051_ALU_INC;
2124
              wr <=1'b1;
2125
              psw_set <=`OC8051_PS_NOT;
2126
              cy_sel <=`OC8051_CY_1;
2127
              src_sel3 <=`OC8051_AS3_DC;
2128
              wr_sfr <=`OC8051_WRS_N;
2129 2 dinesha
            end
2130
          `OC8051_DIV : begin
2131 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2132
              src_sel1 <=`OC8051_AS1_ACC;
2133
              src_sel2 <=`OC8051_AS2_RAM;
2134
              alu_op <=`OC8051_ALU_DIV;
2135
              wr <=1'b0;
2136
              psw_set <=`OC8051_PS_OV;
2137
              cy_sel <=`OC8051_CY_0;
2138
              src_sel3 <=`OC8051_AS3_DC;
2139
              wr_sfr <=`OC8051_WRS_N;
2140 2 dinesha
            end
2141
          `OC8051_DJNZ_D : begin
2142 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2143
              src_sel1 <=`OC8051_AS1_RAM;
2144
              src_sel2 <=`OC8051_AS2_ZERO;
2145
              alu_op <=`OC8051_ALU_INC;
2146
              wr <=1'b1;
2147
              psw_set <=`OC8051_PS_NOT;
2148
              cy_sel <=`OC8051_CY_1;
2149
              src_sel3 <=`OC8051_AS3_DC;
2150
              wr_sfr <=`OC8051_WRS_N;
2151 2 dinesha
            end
2152
          `OC8051_INC_A : begin
2153 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2154
              src_sel1 <=`OC8051_AS1_ACC;
2155
              src_sel2 <=`OC8051_AS2_ZERO;
2156
              alu_op <=`OC8051_ALU_INC;
2157
              wr <=1'b0;
2158
              psw_set <=`OC8051_PS_NOT;
2159
              cy_sel <=`OC8051_CY_0;
2160
              src_sel3 <=`OC8051_AS3_DC;
2161
              wr_sfr <=`OC8051_WRS_ACC1;
2162 2 dinesha
            end
2163
          `OC8051_INC_D : begin
2164 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2165
              src_sel1 <=`OC8051_AS1_RAM;
2166
              src_sel2 <=`OC8051_AS2_ZERO;
2167
              alu_op <=`OC8051_ALU_INC;
2168
              wr <=1'b1;
2169
              psw_set <=`OC8051_PS_NOT;
2170
              cy_sel <=`OC8051_CY_0;
2171
              src_sel3 <=`OC8051_AS3_DC;
2172
              wr_sfr <=`OC8051_WRS_N;
2173 2 dinesha
            end
2174
          `OC8051_INC_DP : begin
2175 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2176
              src_sel1 <=`OC8051_AS1_RAM;
2177
              src_sel2 <=`OC8051_AS2_ZERO;
2178
              alu_op <=`OC8051_ALU_ADD;
2179
              wr <=1'b0;
2180
              psw_set <=`OC8051_PS_NOT;
2181
              cy_sel <=`OC8051_CY_1;
2182
              src_sel3 <=`OC8051_AS3_DP;
2183
              wr_sfr <=`OC8051_WRS_DPTR;
2184 2 dinesha
            end
2185
          `OC8051_JB : begin
2186 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2187
              src_sel1 <=`OC8051_AS1_DC;
2188
              src_sel2 <=`OC8051_AS2_DC;
2189
              alu_op <=`OC8051_ALU_NOP;
2190
              wr <=1'b0;
2191
              psw_set <=`OC8051_PS_NOT;
2192
              cy_sel <=`OC8051_CY_0;
2193
              src_sel3 <=`OC8051_AS3_PC;
2194
              wr_sfr <=`OC8051_WRS_N;
2195 2 dinesha
            end
2196
          `OC8051_JBC :begin
2197 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2198
              src_sel1 <=`OC8051_AS1_DC;
2199
              src_sel2 <=`OC8051_AS2_DC;
2200
              alu_op <=`OC8051_ALU_NOP;
2201
              wr <=1'b0;
2202
              psw_set <=`OC8051_PS_NOT;
2203
              cy_sel <=`OC8051_CY_0;
2204
              src_sel3 <=`OC8051_AS3_PC;
2205
              wr_sfr <=`OC8051_WRS_N;
2206 2 dinesha
            end
2207
          `OC8051_JC : begin
2208 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2209
              src_sel1 <=`OC8051_AS1_DC;
2210
              src_sel2 <=`OC8051_AS2_DC;
2211
              alu_op <=`OC8051_ALU_NOP;
2212
              wr <=1'b0;
2213
              psw_set <=`OC8051_PS_NOT;
2214
              cy_sel <=`OC8051_CY_0;
2215
              src_sel3 <=`OC8051_AS3_PC;
2216
              wr_sfr <=`OC8051_WRS_N;
2217 2 dinesha
            end
2218
          `OC8051_JMP_D : begin
2219 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2220
              src_sel1 <=`OC8051_AS1_ACC;
2221
              src_sel2 <=`OC8051_AS2_RAM;
2222
              alu_op <=`OC8051_ALU_ADD;
2223
              wr <=1'b0;
2224
              psw_set <=`OC8051_PS_NOT;
2225
              cy_sel <=`OC8051_CY_0;
2226
              src_sel3 <=`OC8051_AS3_DP;
2227
              wr_sfr <=`OC8051_WRS_N;
2228 2 dinesha
            end
2229
          `OC8051_JNB : begin
2230 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2231
              src_sel1 <=`OC8051_AS1_DC;
2232
              src_sel2 <=`OC8051_AS2_DC;
2233
              alu_op <=`OC8051_ALU_NOP;
2234
              wr <=1'b0;
2235
              psw_set <=`OC8051_PS_NOT;
2236
              cy_sel <=`OC8051_CY_0;
2237
              src_sel3 <=`OC8051_AS3_PC;
2238
              wr_sfr <=`OC8051_WRS_N;
2239 2 dinesha
            end
2240
          `OC8051_JNC : begin
2241 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2242
              src_sel1 <=`OC8051_AS1_DC;
2243
              src_sel2 <=`OC8051_AS2_DC;
2244
              alu_op <=`OC8051_ALU_NOP;
2245
              wr <=1'b0;
2246
              psw_set <=`OC8051_PS_NOT;
2247
              cy_sel <=`OC8051_CY_0;
2248
              src_sel3 <=`OC8051_AS3_PC;
2249
              wr_sfr <=`OC8051_WRS_N;
2250 2 dinesha
            end
2251
          `OC8051_JNZ :begin
2252 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2253
              src_sel1 <=`OC8051_AS1_DC;
2254
              src_sel2 <=`OC8051_AS2_DC;
2255
              alu_op <=`OC8051_ALU_NOP;
2256
              wr <=1'b0;
2257
              psw_set <=`OC8051_PS_NOT;
2258
              cy_sel <=`OC8051_CY_0;
2259
              src_sel3 <=`OC8051_AS3_PC;
2260
              wr_sfr <=`OC8051_WRS_N;
2261 2 dinesha
            end
2262
          `OC8051_JZ : begin
2263 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2264
              src_sel1 <=`OC8051_AS1_DC;
2265
              src_sel2 <=`OC8051_AS2_DC;
2266
              alu_op <=`OC8051_ALU_NOP;
2267
              wr <=1'b0;
2268
              psw_set <=`OC8051_PS_NOT;
2269
              cy_sel <=`OC8051_CY_0;
2270
              src_sel3 <=`OC8051_AS3_PC;
2271
              wr_sfr <=`OC8051_WRS_N;
2272 2 dinesha
            end
2273
          `OC8051_LCALL :begin
2274 36 dinesha
              ram_wr_sel <=`OC8051_RWS_SP;
2275
              src_sel1 <=`OC8051_AS1_PCL;
2276
              src_sel2 <=`OC8051_AS2_DC;
2277
              alu_op <=`OC8051_ALU_NOP;
2278
              wr <=1'b1;
2279
              psw_set <=`OC8051_PS_NOT;
2280
              cy_sel <=`OC8051_CY_0;
2281
              src_sel3 <=`OC8051_AS3_DC;
2282
              wr_sfr <=`OC8051_WRS_N;
2283 2 dinesha
            end
2284
          `OC8051_LJMP : begin
2285 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2286
              src_sel1 <=`OC8051_AS1_DC;
2287
              src_sel2 <=`OC8051_AS2_DC;
2288
              alu_op <=`OC8051_ALU_NOP;
2289
              wr <=1'b0;
2290
              psw_set <=`OC8051_PS_NOT;
2291
              cy_sel <=`OC8051_CY_0;
2292
              src_sel3 <=`OC8051_AS3_DC;
2293
              wr_sfr <=`OC8051_WRS_N;
2294 2 dinesha
            end
2295
          `OC8051_MOV_D : begin
2296 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2297
              src_sel1 <=`OC8051_AS1_RAM;
2298
              src_sel2 <=`OC8051_AS2_DC;
2299
              alu_op <=`OC8051_ALU_NOP;
2300
              wr <=1'b0;
2301
              psw_set <=`OC8051_PS_NOT;
2302
              cy_sel <=`OC8051_CY_0;
2303
              src_sel3 <=`OC8051_AS3_DC;
2304
              wr_sfr <=`OC8051_WRS_ACC1;
2305 2 dinesha
            end
2306
          `OC8051_MOV_C : begin
2307 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2308
              src_sel1 <=`OC8051_AS1_OP2;
2309
              src_sel2 <=`OC8051_AS2_DC;
2310
              alu_op <=`OC8051_ALU_NOP;
2311
              wr <=1'b0;
2312
              psw_set <=`OC8051_PS_NOT;
2313
              cy_sel <=`OC8051_CY_0;
2314
              src_sel3 <=`OC8051_AS3_DC;
2315
              wr_sfr <=`OC8051_WRS_ACC1;
2316 2 dinesha
            end
2317
          `OC8051_MOV_DA : begin
2318 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2319
              src_sel1 <=`OC8051_AS1_ACC;
2320
              src_sel2 <=`OC8051_AS2_DC;
2321
              alu_op <=`OC8051_ALU_NOP;
2322
              wr <=1'b1;
2323
              psw_set <=`OC8051_PS_NOT;
2324
              cy_sel <=`OC8051_CY_0;
2325
              src_sel3 <=`OC8051_AS3_DC;
2326
              wr_sfr <=`OC8051_WRS_N;
2327 2 dinesha
            end
2328
          `OC8051_MOV_DD : begin
2329 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D3;
2330
              src_sel1 <=`OC8051_AS1_RAM;
2331
              src_sel2 <=`OC8051_AS2_DC;
2332
              alu_op <=`OC8051_ALU_NOP;
2333
              wr <=1'b1;
2334
              psw_set <=`OC8051_PS_NOT;
2335
              cy_sel <=`OC8051_CY_0;
2336
              src_sel3 <=`OC8051_AS3_DC;
2337
              wr_sfr <=`OC8051_WRS_N;
2338 2 dinesha
            end
2339
          `OC8051_MOV_CD : begin
2340 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2341
              src_sel1 <=`OC8051_AS1_OP3;
2342
              src_sel2 <=`OC8051_AS2_DC;
2343
              alu_op <=`OC8051_ALU_NOP;
2344
              wr <=1'b1;
2345
              psw_set <=`OC8051_PS_NOT;
2346
              cy_sel <=`OC8051_CY_0;
2347
              src_sel3 <=`OC8051_AS3_DC;
2348
              wr_sfr <=`OC8051_WRS_N;
2349 2 dinesha
            end
2350
          `OC8051_MOV_BC : begin
2351 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2352
              src_sel1 <=`OC8051_AS1_DC;
2353
              src_sel2 <=`OC8051_AS2_DC;
2354
              alu_op <=`OC8051_ALU_NOP;
2355
              wr <=1'b0;
2356
              psw_set <=`OC8051_PS_CY;
2357
              cy_sel <=`OC8051_CY_RAM;
2358
              src_sel3 <=`OC8051_AS3_DC;
2359
              wr_sfr <=`OC8051_WRS_N;
2360 2 dinesha
            end
2361
          `OC8051_MOV_CB : begin
2362 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2363
              src_sel1 <=`OC8051_AS1_DC;
2364
              src_sel2 <=`OC8051_AS2_DC;
2365
              alu_op <=`OC8051_ALU_NOP;
2366
              wr <=1'b1;
2367
              psw_set <=`OC8051_PS_NOT;
2368
              cy_sel <=`OC8051_CY_PSW;
2369
              src_sel3 <=`OC8051_AS3_DC;
2370
              wr_sfr <=`OC8051_WRS_N;
2371 2 dinesha
            end
2372
          `OC8051_MOV_DP : begin
2373 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2374
              src_sel1 <=`OC8051_AS1_OP3;
2375
              src_sel2 <=`OC8051_AS2_OP2;
2376
              alu_op <=`OC8051_ALU_NOP;
2377
              wr <=1'b0;
2378
              psw_set <=`OC8051_PS_NOT;
2379
              cy_sel <=`OC8051_CY_0;
2380
              src_sel3 <=`OC8051_AS3_DC;
2381
              wr_sfr <=`OC8051_WRS_DPTR;
2382 2 dinesha
            end
2383
          `OC8051_MOVC_DP :begin
2384 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2385
              src_sel1 <=`OC8051_AS1_ACC;
2386
              src_sel2 <=`OC8051_AS2_RAM;
2387
              alu_op <=`OC8051_ALU_ADD;
2388
              wr <=1'b0;
2389
              psw_set <=`OC8051_PS_NOT;
2390
              cy_sel <=`OC8051_CY_0;
2391
              src_sel3 <=`OC8051_AS3_DP;
2392
              wr_sfr <=`OC8051_WRS_N;
2393 2 dinesha
            end
2394
          `OC8051_MOVC_PC : begin
2395 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2396
              src_sel1 <=`OC8051_AS1_PCL;
2397
              src_sel2 <=`OC8051_AS2_ACC;
2398
              alu_op <=`OC8051_ALU_ADD;
2399
              wr <=1'b0;
2400
              psw_set <=`OC8051_PS_NOT;
2401
              cy_sel <=`OC8051_CY_0;
2402
              src_sel3 <=`OC8051_AS3_PC;
2403
              wr_sfr <=`OC8051_WRS_N;
2404 2 dinesha
            end
2405
          `OC8051_MOVX_PA : begin
2406 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2407
              src_sel1 <=`OC8051_AS1_DC;
2408
              src_sel2 <=`OC8051_AS2_DC;
2409
              alu_op <=`OC8051_ALU_NOP;
2410
              wr <=1'b0;
2411
              psw_set <=`OC8051_PS_NOT;
2412
              cy_sel <=`OC8051_CY_0;
2413
              src_sel3 <=`OC8051_AS3_DC;
2414
              wr_sfr <=`OC8051_WRS_N;
2415 2 dinesha
            end
2416
          `OC8051_MOVX_AP : begin
2417 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2418
              src_sel1 <=`OC8051_AS1_DC;
2419
              src_sel2 <=`OC8051_AS2_DC;
2420
              alu_op <=`OC8051_ALU_NOP;
2421
              wr <=1'b0;
2422
              psw_set <=`OC8051_PS_NOT;
2423
              cy_sel <=`OC8051_CY_0;
2424
              src_sel3 <=`OC8051_AS3_DC;
2425
              wr_sfr <=`OC8051_WRS_N;
2426 2 dinesha
            end
2427
          `OC8051_MUL : begin
2428 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2429
              src_sel1 <=`OC8051_AS1_ACC;
2430
              src_sel2 <=`OC8051_AS2_RAM;
2431
              alu_op <=`OC8051_ALU_MUL;
2432
              wr <=1'b0;
2433
              psw_set <=`OC8051_PS_OV;
2434
              cy_sel <=`OC8051_CY_0;
2435
              src_sel3 <=`OC8051_AS3_DC;
2436
              wr_sfr <=`OC8051_WRS_N;
2437 2 dinesha
            end
2438
          `OC8051_ORL_D : begin
2439 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2440
              src_sel1 <=`OC8051_AS1_RAM;
2441
              src_sel2 <=`OC8051_AS2_ACC;
2442
              alu_op <=`OC8051_ALU_OR;
2443
              wr <=1'b0;
2444
              psw_set <=`OC8051_PS_NOT;
2445
              cy_sel <=`OC8051_CY_0;
2446
              src_sel3 <=`OC8051_AS3_DC;
2447
              wr_sfr <=`OC8051_WRS_ACC1;
2448 2 dinesha
            end
2449
          `OC8051_ORL_C : begin
2450 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2451
              src_sel1 <=`OC8051_AS1_OP2;
2452
              src_sel2 <=`OC8051_AS2_ACC;
2453
              alu_op <=`OC8051_ALU_OR;
2454
              wr <=1'b0;
2455
              psw_set <=`OC8051_PS_NOT;
2456
              cy_sel <=`OC8051_CY_0;
2457
              src_sel3 <=`OC8051_AS3_DC;
2458
              wr_sfr <=`OC8051_WRS_ACC1;
2459 2 dinesha
            end
2460
          `OC8051_ORL_AD : begin
2461 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2462
              src_sel1 <=`OC8051_AS1_RAM;
2463
              src_sel2 <=`OC8051_AS2_ACC;
2464
              alu_op <=`OC8051_ALU_OR;
2465
              wr <=1'b1;
2466
              psw_set <=`OC8051_PS_NOT;
2467
              cy_sel <=`OC8051_CY_0;
2468
              src_sel3 <=`OC8051_AS3_DC;
2469
              wr_sfr <=`OC8051_WRS_N;
2470 2 dinesha
            end
2471
          `OC8051_ORL_CD : begin
2472 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2473
              src_sel1 <=`OC8051_AS1_OP3;
2474
              src_sel2 <=`OC8051_AS2_RAM;
2475
              alu_op <=`OC8051_ALU_OR;
2476
              wr <=1'b1;
2477
              psw_set <=`OC8051_PS_NOT;
2478
              cy_sel <=`OC8051_CY_0;
2479
              src_sel3 <=`OC8051_AS3_DC;
2480
              wr_sfr <=`OC8051_WRS_N;
2481 2 dinesha
            end
2482
          `OC8051_ORL_B : begin
2483 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2484
              src_sel1 <=`OC8051_AS1_DC;
2485
              src_sel2 <=`OC8051_AS2_DC;
2486
              alu_op <=`OC8051_ALU_OR;
2487
              wr <=1'b0;
2488
              psw_set <=`OC8051_PS_CY;
2489
              cy_sel <=`OC8051_CY_PSW;
2490
              src_sel3 <=`OC8051_AS3_DC;
2491
              wr_sfr <=`OC8051_WRS_N;
2492 2 dinesha
            end
2493
          `OC8051_ORL_NB : begin
2494 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2495
              src_sel1 <=`OC8051_AS1_DC;
2496
              src_sel2 <=`OC8051_AS2_DC;
2497
              alu_op <=`OC8051_ALU_RL;
2498
              wr <=1'b0;
2499
              psw_set <=`OC8051_PS_CY;
2500
              cy_sel <=`OC8051_CY_PSW;
2501
              src_sel3 <=`OC8051_AS3_DC;
2502
              wr_sfr <=`OC8051_WRS_N;
2503 2 dinesha
            end
2504
          `OC8051_POP : begin
2505 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2506
              src_sel1 <=`OC8051_AS1_RAM;
2507
              src_sel2 <=`OC8051_AS2_DC;
2508
              alu_op <=`OC8051_ALU_NOP;
2509
              wr <=1'b1;
2510
              psw_set <=`OC8051_PS_NOT;
2511
              cy_sel <=`OC8051_CY_0;
2512
              src_sel3 <=`OC8051_AS3_DC;
2513
              wr_sfr <=`OC8051_WRS_N;
2514 2 dinesha
            end
2515
          `OC8051_PUSH : begin
2516 36 dinesha
              ram_wr_sel <=`OC8051_RWS_SP;
2517
              src_sel1 <=`OC8051_AS1_RAM;
2518
              src_sel2 <=`OC8051_AS2_DC;
2519
              alu_op <=`OC8051_ALU_NOP;
2520
              wr <=1'b1;
2521
              psw_set <=`OC8051_PS_NOT;
2522
              cy_sel <=`OC8051_CY_0;
2523
              src_sel3 <=`OC8051_AS3_DC;
2524
              wr_sfr <=`OC8051_WRS_N;
2525 2 dinesha
            end
2526
          `OC8051_RET : begin
2527 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2528
              src_sel1 <=`OC8051_AS1_RAM;
2529
              src_sel2 <=`OC8051_AS2_DC;
2530
              alu_op <=`OC8051_ALU_NOP;
2531
              wr <=1'b0;
2532
              psw_set <=`OC8051_PS_NOT;
2533
              cy_sel <=`OC8051_CY_0;
2534
              src_sel3 <=`OC8051_AS3_DC;
2535
              wr_sfr <=`OC8051_WRS_N;
2536 2 dinesha
            end
2537
          `OC8051_RETI : begin
2538 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2539
              src_sel1 <=`OC8051_AS1_RAM;
2540
              src_sel2 <=`OC8051_AS2_DC;
2541
              alu_op <=`OC8051_ALU_NOP;
2542
              wr <=1'b0;
2543
              psw_set <=`OC8051_PS_NOT;
2544
              cy_sel <=`OC8051_CY_0;
2545
              src_sel3 <=`OC8051_AS3_DC;
2546
              wr_sfr <=`OC8051_WRS_N;
2547 2 dinesha
            end
2548
          `OC8051_RL : begin
2549 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2550
              src_sel1 <=`OC8051_AS1_ACC;
2551
              src_sel2 <=`OC8051_AS2_DC;
2552
              alu_op <=`OC8051_ALU_RL;
2553
              wr <=1'b0;
2554
              psw_set <=`OC8051_PS_NOT;
2555
              cy_sel <=`OC8051_CY_0;
2556
              src_sel3 <=`OC8051_AS3_DC;
2557
              wr_sfr <=`OC8051_WRS_ACC1;
2558 2 dinesha
            end
2559
          `OC8051_RLC : begin
2560 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2561
              src_sel1 <=`OC8051_AS1_ACC;
2562
              src_sel2 <=`OC8051_AS2_DC;
2563
              alu_op <=`OC8051_ALU_RLC;
2564
              wr <=1'b0;
2565
              psw_set <=`OC8051_PS_CY;
2566
              cy_sel <=`OC8051_CY_PSW;
2567
              src_sel3 <=`OC8051_AS3_DC;
2568
              wr_sfr <=`OC8051_WRS_ACC1;
2569 2 dinesha
            end
2570
          `OC8051_RR : begin
2571 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2572
              src_sel1 <=`OC8051_AS1_ACC;
2573
              src_sel2 <=`OC8051_AS2_DC;
2574
              alu_op <=`OC8051_ALU_RR;
2575
              wr <=1'b0;
2576
              psw_set <=`OC8051_PS_NOT;
2577
              cy_sel <=`OC8051_CY_0;
2578
              src_sel3 <=`OC8051_AS3_DC;
2579
              wr_sfr <=`OC8051_WRS_ACC1;
2580 2 dinesha
            end
2581
          `OC8051_RRC : begin
2582 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2583
              src_sel1 <=`OC8051_AS1_ACC;
2584
              src_sel2 <=`OC8051_AS2_DC;
2585
              alu_op <=`OC8051_ALU_RRC;
2586
              wr <=1'b0;
2587
              psw_set <=`OC8051_PS_CY;
2588
              cy_sel <=`OC8051_CY_PSW;
2589
              src_sel3 <=`OC8051_AS3_DC;
2590
              wr_sfr <=`OC8051_WRS_ACC1;
2591 2 dinesha
            end
2592
          `OC8051_SETB_C : begin
2593 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2594
              src_sel1 <=`OC8051_AS1_DC;
2595
              src_sel2 <=`OC8051_AS2_DC;
2596
              alu_op <=`OC8051_ALU_NOP;
2597
              wr <=1'b0;
2598
              psw_set <=`OC8051_PS_CY;
2599
              cy_sel <=`OC8051_CY_1;
2600
              src_sel3 <=`OC8051_AS3_PC;
2601
              wr_sfr <=`OC8051_WRS_N;
2602 2 dinesha
            end
2603
          `OC8051_SETB_B : begin
2604 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2605
              src_sel1 <=`OC8051_AS1_DC;
2606
              src_sel2 <=`OC8051_AS2_DC;
2607
              alu_op <=`OC8051_ALU_NOP;
2608
              wr <=1'b1;
2609
              psw_set <=`OC8051_PS_NOT;
2610
              cy_sel <=`OC8051_CY_1;
2611
              src_sel3 <=`OC8051_AS3_PC;
2612
              wr_sfr <=`OC8051_WRS_N;
2613 2 dinesha
            end
2614
          `OC8051_SJMP : begin
2615 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2616
              src_sel1 <=`OC8051_AS1_DC;
2617
              src_sel2 <=`OC8051_AS2_DC;
2618
              alu_op <=`OC8051_ALU_NOP;
2619
              wr <=1'b0;
2620
              psw_set <=`OC8051_PS_NOT;
2621
              cy_sel <=`OC8051_CY_0;
2622
              src_sel3 <=`OC8051_AS3_PC;
2623
              wr_sfr <=`OC8051_WRS_N;
2624 2 dinesha
            end
2625
          `OC8051_SUBB_D : begin
2626 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2627
              src_sel1 <=`OC8051_AS1_ACC;
2628
              src_sel2 <=`OC8051_AS2_RAM;
2629
              alu_op <=`OC8051_ALU_SUB;
2630
              wr <=1'b0;
2631
              psw_set <=`OC8051_PS_AC;
2632
              cy_sel <=`OC8051_CY_PSW;
2633
              src_sel3 <=`OC8051_AS3_DC;
2634
              wr_sfr <=`OC8051_WRS_ACC1;
2635 2 dinesha
            end
2636
          `OC8051_SUBB_C : begin
2637 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2638
              src_sel1 <=`OC8051_AS1_ACC;
2639
              src_sel2 <=`OC8051_AS2_OP2;
2640
              alu_op <=`OC8051_ALU_SUB;
2641
              wr <=1'b0;
2642
              psw_set <=`OC8051_PS_AC;
2643
              cy_sel <=`OC8051_CY_PSW;
2644
              src_sel3 <=`OC8051_AS3_DC;
2645
              wr_sfr <=`OC8051_WRS_ACC1;
2646 2 dinesha
            end
2647
          `OC8051_SWAP : begin
2648 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2649
              src_sel1 <=`OC8051_AS1_ACC;
2650
              src_sel2 <=`OC8051_AS2_DC;
2651
              alu_op <=`OC8051_ALU_RLC;
2652
              wr <=1'b0;
2653
              psw_set <=`OC8051_PS_NOT;
2654
              cy_sel <=`OC8051_CY_0;
2655
              src_sel3 <=`OC8051_AS3_DC;
2656
              wr_sfr <=`OC8051_WRS_ACC2;
2657 2 dinesha
            end
2658
          `OC8051_XCH_D : begin
2659 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2660
              src_sel1 <=`OC8051_AS1_RAM;
2661
              src_sel2 <=`OC8051_AS2_ACC;
2662
              alu_op <=`OC8051_ALU_XCH;
2663
              wr <=1'b1;
2664
              psw_set <=`OC8051_PS_NOT;
2665
              cy_sel <=`OC8051_CY_1;
2666
              src_sel3 <=`OC8051_AS3_DC;
2667
              wr_sfr <=`OC8051_WRS_ACC2;
2668 2 dinesha
            end
2669
          `OC8051_XRL_D : begin
2670 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2671
              src_sel1 <=`OC8051_AS1_RAM;
2672
              src_sel2 <=`OC8051_AS2_ACC;
2673
              alu_op <=`OC8051_ALU_XOR;
2674
              wr <=1'b0;
2675
              psw_set <=`OC8051_PS_NOT;
2676
              cy_sel <=`OC8051_CY_0;
2677
              src_sel3 <=`OC8051_AS3_DC;
2678
              wr_sfr <=`OC8051_WRS_ACC1;
2679 2 dinesha
            end
2680
          `OC8051_XRL_C : begin
2681 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2682
              src_sel1 <=`OC8051_AS1_OP2;
2683
              src_sel2 <=`OC8051_AS2_ACC;
2684
              alu_op <=`OC8051_ALU_XOR;
2685
              wr <=1'b0;
2686
              psw_set <=`OC8051_PS_NOT;
2687
              cy_sel <=`OC8051_CY_0;
2688
              src_sel3 <=`OC8051_AS3_DC;
2689
              wr_sfr <=`OC8051_WRS_ACC1;
2690 2 dinesha
            end
2691
          `OC8051_XRL_AD : begin
2692 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2693
              src_sel1 <=`OC8051_AS1_RAM;
2694
              src_sel2 <=`OC8051_AS2_ACC;
2695
              alu_op <=`OC8051_ALU_XOR;
2696
              wr <=1'b1;
2697
              psw_set <=`OC8051_PS_NOT;
2698
              cy_sel <=`OC8051_CY_0;
2699
              src_sel3 <=`OC8051_AS3_DC;
2700
              wr_sfr <=`OC8051_WRS_N;
2701 2 dinesha
            end
2702
          `OC8051_XRL_CD : begin
2703 36 dinesha
              ram_wr_sel <=`OC8051_RWS_D;
2704
              src_sel1 <=`OC8051_AS1_OP3;
2705
              src_sel2 <=`OC8051_AS2_RAM;
2706
              alu_op <=`OC8051_ALU_XOR;
2707
              wr <=1'b1;
2708
              psw_set <=`OC8051_PS_NOT;
2709
              cy_sel <=`OC8051_CY_0;
2710
              src_sel3 <=`OC8051_AS3_DC;
2711
              wr_sfr <=`OC8051_WRS_N;
2712 2 dinesha
            end
2713
          default: begin
2714 36 dinesha
              ram_wr_sel <=`OC8051_RWS_DC;
2715
              src_sel1 <=`OC8051_AS1_DC;
2716
              src_sel2 <=`OC8051_AS2_DC;
2717
              alu_op <=`OC8051_ALU_NOP;
2718
              wr <=1'b0;
2719
              psw_set <=`OC8051_PS_NOT;
2720
              cy_sel <=`OC8051_CY_0;
2721
              src_sel3 <=`OC8051_AS3_DC;
2722
              wr_sfr <=`OC8051_WRS_N;
2723 2 dinesha
           end
2724
        endcase
2725
      end
2726
      endcase
2727
  end
2728
end
2729
 
2730
 
2731
//
2732
// remember current instruction
2733 25 dinesha
always @(posedge clk or negedge resetn)
2734 36 dinesha
  if (resetn == 1'b0) op <=2'b00;
2735
  else if (state==2'b00) op <=op_in;
2736 2 dinesha
 
2737
//
2738
// in case of instructions that needs more than one clock set state
2739 25 dinesha
always @(posedge clk or negedge resetn)
2740 2 dinesha
begin
2741 25 dinesha
  if (resetn == 1'b0)
2742 36 dinesha
    state <=2'b11;
2743 2 dinesha
  else if  (!mem_wait & !wait_data) begin
2744
    case (state) /* synopsys parallel_case */
2745 36 dinesha
      2'b10: state <=2'b01;
2746
      2'b11: state <=2'b10;
2747 2 dinesha
      2'b00:
2748
          casex (op_in) /* synopsys full_case parallel_case */
2749 36 dinesha
            `OC8051_ACALL   : state <=2'b10;
2750
            `OC8051_AJMP    : state <=2'b10;
2751
            `OC8051_CJNE_R  : state <=2'b10;
2752
            `OC8051_CJNE_I  : state <=2'b10;
2753
            `OC8051_CJNE_D  : state <=2'b10;
2754
            `OC8051_CJNE_C  : state <=2'b10;
2755
            `OC8051_LJMP    : state <=2'b10;
2756
            `OC8051_DJNZ_R  : state <=2'b10;
2757
            `OC8051_DJNZ_D  : state <=2'b10;
2758
            `OC8051_LCALL   : state <=2'b10;
2759
            `OC8051_MOVC_DP : state <=2'b11;
2760
            `OC8051_MOVC_PC : state <=2'b11;
2761
            `OC8051_MOVX_IA : state <=2'b10;
2762
            `OC8051_MOVX_AI : state <=2'b10;
2763
            `OC8051_MOVX_PA : state <=2'b10;
2764
            `OC8051_MOVX_AP : state <=2'b10;
2765
            `OC8051_RET     : state <=2'b11;
2766
            `OC8051_RETI    : state <=2'b11;
2767
            `OC8051_SJMP    : state <=2'b10;
2768
            `OC8051_JB      : state <=2'b10;
2769
            `OC8051_JBC     : state <=2'b10;
2770
            `OC8051_JC      : state <=2'b10;
2771
            `OC8051_JMP_D   : state <=2'b10;
2772
            `OC8051_JNC     : state <=2'b10;
2773
            `OC8051_JNB     : state <=2'b10;
2774
            `OC8051_JNZ     : state <=2'b10;
2775
            `OC8051_JZ      : state <=2'b10;
2776
            `OC8051_DIV     : state <=2'b11;
2777
            `OC8051_MUL     : state <=2'b11;
2778
            default         : state <=2'b00;
2779 2 dinesha
          endcase
2780 36 dinesha
      default: state <=2'b00;
2781 2 dinesha
    endcase
2782
  end
2783
end
2784
 
2785
 
2786
//
2787
//in case of writing to external ram
2788 25 dinesha
always @(posedge clk or negedge resetn)
2789 2 dinesha
begin
2790 25 dinesha
  if (resetn == 1'b0) begin
2791 36 dinesha
    mem_act <=`OC8051_MAS_NO;
2792 2 dinesha
  end else if (!rd) begin
2793 36 dinesha
    mem_act <=`OC8051_MAS_NO;
2794 2 dinesha
  end else
2795
    casex (op_cur) /* synopsys parallel_case */
2796 36 dinesha
      `OC8051_MOVX_AI : mem_act <=`OC8051_MAS_RI_W;
2797
      `OC8051_MOVX_AP : mem_act <=`OC8051_MAS_DPTR_W;
2798
      `OC8051_MOVX_IA : mem_act <=`OC8051_MAS_RI_R;
2799
      `OC8051_MOVX_PA : mem_act <=`OC8051_MAS_DPTR_R;
2800
      `OC8051_MOVC_DP : mem_act <=`OC8051_MAS_CODE;
2801
      `OC8051_MOVC_PC : mem_act <=`OC8051_MAS_CODE;
2802
      default : mem_act <=`OC8051_MAS_NO;
2803 2 dinesha
    endcase
2804
end
2805
 
2806 25 dinesha
always @(posedge clk or negedge resetn)
2807 2 dinesha
begin
2808 25 dinesha
  if (resetn == 1'b0) begin
2809 36 dinesha
    ram_rd_sel_r <=3'h0;
2810 2 dinesha
  end else begin
2811 36 dinesha
    ram_rd_sel_r <=ram_rd_sel;
2812 2 dinesha
  end
2813
end
2814
 
2815
 
2816
 
2817
`ifdef OC8051_SIMULATION
2818
always @(op_cur)
2819
  if (op_cur===8'hxx) begin
2820
    $display("%m:%0tns faulire: invalid instruction (oc8051_decoder)",$time);
2821
#22
2822
    $finish;
2823
 
2824
  end
2825
 
2826
`endif
2827
 
2828
 
2829
 
2830
 
2831
endmodule
2832
 
2833
 

powered by: WebSVN 2.1.0

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