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

Subversion Repositories m32632

[/] [m32632/] [trunk/] [rtl/] [STEUER_MISC.v] - Diff between revs 14 and 23

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 14 Rev 23
Line 2... Line 2...
//
//
// This file is part of the M32632 project
// This file is part of the M32632 project
// http://opencores.org/project,m32632
// http://opencores.org/project,m32632
//
//
// Filename: STEUER_MISC.v
// Filename: STEUER_MISC.v
// Version:  1.1 bug fix
//      Version:        2.0
// History:  1.0 first release of 30 Mai 2015
// History:  1.0 first release of 30 Mai 2015
// Date:     21 January 2016
//      Date:           14 August 2016
//
//
// Copyright (C) 2016 Udo Moeller
// Copyright (C) 2016 Udo Moeller
// 
// 
// This source file may be used and distributed without 
// This source file may be used and distributed without 
// restriction provided that this copyright statement is not 
// restriction provided that this copyright statement is not 
Line 210... Line 210...
        reg             [31:0]   pc_adduse;
        reg             [31:0]   pc_adduse;
        reg             [31:0]   pc_ic_reg;
        reg             [31:0]   pc_ic_reg;
        reg             [31:0]   fpu_trap_pc;
        reg             [31:0]   fpu_trap_pc;
        reg                             IC_USER;
        reg                             IC_USER;
 
 
        wire    [31:0]   branch,pc_jump,next_pc,pc_icache_i;
        wire    [31:0]   branch,pc_jump,pc_icache_i;
 
 
        assign PC_SAVE = pc_adduse + {29'h0,USED};
        assign PC_SAVE = pc_adduse + {29'h0,USED};
        assign branch  = PC_ARCHI + DISP;
        assign branch  = PC_ARCHI + DISP;
 
 
        assign pc_jump = LOAD_PC ? PC_NEW : branch;
        assign pc_jump = LOAD_PC ? PC_NEW : branch;
 
 
        assign next_pc = NEW ? pc_jump : PC_SAVE;       // Only at NEW is the DISP correct !
 
 
 
        always @(posedge BCLK or negedge BRESET)
        always @(posedge BCLK or negedge BRESET)
                if (!BRESET) pc_adduse <= 32'h0;
                if (!BRESET) pc_adduse <= 32'h0;
                  else
                  else
                        pc_adduse <= next_pc;
                        pc_adduse <= NEW ? pc_jump : PC_SAVE;   // Only at NEW is the DISP correct !
 
 
        // The Architectur - PC : Address mode "Programm Memory"-relativ
        // The Architectur - PC : Address mode "Programm Memory"-relativ
        // no BRESET because NEXT_PCA is immediately valid
        // no BRESET because NEXT_PCA is immediately valid
        always @(posedge BCLK)
        always @(posedge BCLK)
                if (FPU_TRAP) PC_ARCHI <= fpu_trap_pc;  // go back !
                if (FPU_TRAP) PC_ARCHI <= fpu_trap_pc;  // go back !
Line 273... Line 271...
        output                  VALID;
        output                  VALID;
 
 
        reg              [7:1]  filter;
        reg              [7:1]  filter;
        wire     [7:0]   mdat_0;
        wire     [7:0]   mdat_0;
        wire     [3:0]   mdat_1;
        wire     [3:0]   mdat_1;
        wire     [1:0]   mdat_2;
 
 
 
        always @(IPOS or DIN)
        always @(IPOS or DIN)
                case (IPOS)
                case (IPOS)
                  3'd0 : filter =  DIN[7:1];
                  3'd0 : filter =  DIN[7:1];
                  3'd1 : filter = {DIN[7:2],1'b0};
                  3'd1 : filter = {DIN[7:2],1'b0};
Line 291... Line 288...
 
 
        assign mdat_0  = INIT ? DIN : {filter,1'b0};
        assign mdat_0  = INIT ? DIN : {filter,1'b0};
        assign OPOS[2] = (mdat_0[3:0] == 4'h0);
        assign OPOS[2] = (mdat_0[3:0] == 4'h0);
        assign mdat_1  = OPOS[2] ? mdat_0[7:4] : mdat_0[3:0];
        assign mdat_1  = OPOS[2] ? mdat_0[7:4] : mdat_0[3:0];
        assign OPOS[1] = (mdat_1[1:0] == 2'b00);
        assign OPOS[1] = (mdat_1[1:0] == 2'b00);
        assign mdat_2  = OPOS[1] ? mdat_1[3:2] : mdat_1[1:0];
        assign OPOS[0] = ~((mdat_1[2:1] == 2'b10) | mdat_1[0]);
        assign OPOS[0] = ~mdat_2[0];
        assign VALID   =   (mdat_1 != 4'b0000);
        assign VALID   = (mdat_2 != 2'b00);
 
 
 
endmodule
endmodule
 
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//
Line 495... Line 491...
        parameter op_adr        = {3'bx1x,8'h49};
        parameter op_adr        = {3'bx1x,8'h49};
        parameter op_addl       = {3'b01x,8'hB0};
        parameter op_addl       = {3'b01x,8'hB0};
        parameter op_addf       = {3'b11x,8'hB0};
        parameter op_addf       = {3'b11x,8'hB0};
        parameter op_mull       = {3'b01x,8'hBC};
        parameter op_mull       = {3'b01x,8'hBC};
        parameter op_mulf       = {3'b11x,8'hBC};
        parameter op_mulf       = {3'b11x,8'hBC};
        parameter op_truf       = {3'b101,8'h9A};       // TRUNCFW for SCALBF
 
        parameter op_trul       = {3'b001,8'h9A};       // TRUNCLW for SCALBL
 
        parameter op_stpr       = {3'b11x,8'h54};       // Special-Op for String opcodes
        parameter op_stpr       = {3'b11x,8'h54};       // Special-Op for String opcodes
        parameter op_lsh        = {3'b011,8'h65};       // EXT : shift to right : DOUBLE !
        parameter op_lsh        = {3'b011,8'h65};       // EXT : shift to right : DOUBLE !
        parameter op_msk        = {3'b011,8'h80};       // reuse of EXT Opcode at INS !
        parameter op_msk        = {3'b011,8'h80};       // reuse of EXT Opcode at INS !
        parameter op_mul        = {3'b011,8'h78};       // INDEX
        parameter op_mul        = {3'b011,8'h78};       // INDEX
        parameter op_rwv        = {3'bx1x,8'hE0};       // RDVAL+WRVAL
        parameter op_rwv        = {3'bx1x,8'hE0};       // RDVAL+WRVAL
 
 
        always @(OPREG) // whether the Opcode is valid is decided in DECODER !
        always @(OPREG) // whether the Opcode is valid is decided in DECODER !
          casex (OPREG[13:0])
          casex (OPREG[13:0])
                14'bxx_xxxx_1111_1110 : op_code = {2'b01,OPREG[11:10],OPREG[8]};        // DOT/POLY/SCALB
                14'bxx_xxxx_1111_1110 : op_code = {3'b011,OPREG[10],OPREG[8]};  // DOT/POLY
                14'b00_0xxx_0000_1110 : op_code = 5'b1_0000;    // MOVS/CMPS
                14'b00_0xxx_0000_1110 : op_code = 5'b1_0000;    // MOVS/CMPS
                14'b00_11xx_0000_1110 : op_code = 5'b1_0000;    // SKPS
                14'b00_11xx_0000_1110 : op_code = 5'b1_0000;    // SKPS
                14'b00_0xxx_1100_1110 : op_code = 5'b1_0001;    // MOVM/CMPM
                14'b00_0xxx_1100_1110 : op_code = 5'b1_0001;    // MOVM/CMPM
                14'bxx_xx10_0111_11xx : op_code = 5'b1_0010;    // JUMP/JSR
                14'bxx_xx10_0111_11xx : op_code = 5'b1_0010;    // JUMP/JSR
                14'bxx_x111_0111_11xx : op_code = 5'b1_0011;    // CASE
                14'bxx_x111_0111_11xx : op_code = 5'b1_0011;    // CASE
Line 552... Line 546...
          endcase
          endcase
 
 
        assign get8b_d = (PHRD2 == 4'hB) ? 4'hC : 4'h0; // Special case 8B Immeadiate, is used in State 58
        assign get8b_d = (PHRD2 == 4'hB) ? 4'hC : 4'h0; // Special case 8B Immeadiate, is used in State 58
 
 
        assign src_1l = {SRC_1[6:1],1'b0};
        assign src_1l = {SRC_1[6:1],1'b0};
        assign src_2l = {SRC_2[6:1],~SRC_2[0]};  // needed only for DEI/MEI
        assign src_2l = {SRC_2[6:1],~SRC_2[0]};  // used only for DEI and MEI 
        assign dest_2 =  SRC_2[5:0];
        assign dest_2 =  SRC_2[5:0];
 
 
        assign phchk = {7'b0101_010,size_dw};   // Phase 54 or 55
        assign phchk = {7'b0101_010,size_dw};   // Phase 54 or 55
 
 
        assign op_kust = {1'bx,OPERA[9:8],8'h7A};       // Special-Opcode for MOVM/CMPM
        assign op_kust = {1'bx,OPERA[9:8],8'h7A};       // Special-Opcode for MOVM/CMPM
        assign op_bwd  = {1'bx,OPERA[9:8],8'h45};       // for CASE and Bit opcodes
        assign op_bwd  = {1'bx,OPERA[9:8],8'h45};       // for CASE and Bit opcodes
 
 
        assign re_wr   = {EXR22[18:17],4'b0101,4'h0, 9'h003};   // REUSE Address : Write of rmw , top 2 Bits contain size
        assign re_wr   = {EXR22[18:17],4'b0101,4'h0, 9'h003};   // REUSE Address : Write of rmw , top 2 Bits contain size
 
 
        always @(posedge BCLK) if (PHASE_0) ext_tos <= (OPREG[18:14] == 5'h17); // if TOS
        always @(posedge BCLK) if (PHASE_0) ext_tos <= (OPREG[18:14] == 5'h17); // TOS Address mode
        assign rexwr   = {EXR22[18:17],4'b0101,4'h0, ext_tos, 8'h03};   // REUSE Addresse : Write von rmw , only for EXT and EXTS !
        assign rexwr   = {EXR22[18:17],4'b0101,4'h0, ext_tos, 8'h03};   // REUSE Address : Write of rmw , only for EXT and EXTS
 
 
        always @(posedge BCLK) tbit_flag <= ~OPERA[1];  // due to Timing ...
        always @(posedge BCLK) tbit_flag <= ~OPERA[1];  // due to Timing ...
        always @(posedge BCLK) size_dw   <=  OPERA[9];
        always @(posedge BCLK) size_dw   <=  OPERA[9];
 
 
        always @(posedge BCLK) if (PHASE_0) chkreg <= {3'b000,OPREG[13:11]};    // for CHECK
        always @(posedge BCLK) if (PHASE_0) chkreg <= {3'b000,OPREG[13:11]};    // for CHECK
Line 792... Line 786...
                          state_55 = dont_care;
                          state_55 = dont_care;
                          state_58 = dont_care;
                          state_58 = dont_care;
                          state_59 = dont_care;
                          state_59 = dont_care;
                          state_5A = dont_care;
                          state_5A = dont_care;
                        end
                        end
                5'b01_000 :     // SCALBL : RMW critical !
 
                        begin
 
                          STATE_0  = ACCA[3] ?          // _M...
 
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
 
                                           : {   addr_nop,8'h54, SRC_1, src_1l,1'b1,temp_h,op_trul, 2'b11,2'b00,4'h0  };
 
                          state_50 = ACCA[3] ?          // _M...
 
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
 
                                           : {   addr_nop,8'h54, SRC_1, src_1l,1'b1,temp_h,op_trul, 2'b11,2'b00,4'h0  };
 
                          state_53 = {   addr_nop,8'h55, imme,  src_x, 1'b1,temp_h,op_mov,      2'b00,2'b00,get8b_s };
 
                          state_54 = ACCA[1] ?
 
                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_trul, 2'b00,2'b00,NXRW2 }
 
                                           : {   addr_nop,8'h5A, src_x, src_x, 1'b0,temp_h,op_trul,     2'b00,2'b00,4'h0  };
 
                          state_55 = {   addr_nop,8'h54, rtmph, imme,  1'b1,temp_h,op_trul, 2'b11,2'b00,4'h0  };        // 2. half of external SRC1
 
                          state_58 = {   addr_nop,8'h59, rtmph, imme,  1'b0,dest_2,OPERA,       2'b01,2'b00,4'h0  };
 
                          state_59 = {   addr_nop,8'h1F, src_x, (ACCA[1] ? imme : src_2l),
 
                                                                                                           ~ACCA[1],dest_2,OPERA,       2'b10,2'b00,4'h0  };
 
                          state_5A = {   addr_nop,8'h59, rtmph, SRC_2, 1'b0,dest_2,OPERA,       2'b01,2'b00,4'h0  };    // empty cycle for TRUNC => TEMP !
 
                        end
 
                5'b01_001 :     // SCALBF : RMW critical !
 
                        begin
 
                          STATE_0  = ACCA[3] ?          // _M...
 
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
 
                                           : {   addr_nop,8'h54, SRC_1, src_x, 1'b1,temp_h,op_truf, 2'b00,2'b00,4'h0  };
 
                          state_50 = ACCA[3] ?          // _M...
 
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
 
                                           : {   addr_nop,8'h54, SRC_1, src_x, 1'b1,temp_h,op_truf, 2'b00,2'b00,4'h0  };
 
                          state_53 = {   addr_nop,8'h54, imme,  src_x, 1'b1,temp_h,op_truf, 2'b00,2'b00,4'h0  };
 
                          state_54 = ACCA[1] ?
 
                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 }
 
                                           : {   addr_nop,8'h1F, rtmph, SRC_2, 1'b1,dest_2,OPERA,       2'b11,2'b00,4'h0  };
 
                          state_55 = dont_care;
 
                          state_58 = {   addr_nop,8'h1F, rtmph, imme,  1'b0,dest_x,OPERA,       2'b11,2'b00,4'h0  };
 
                          state_59 = dont_care;
 
                          state_5A = dont_care;
 
                        end
 
                5'b01_100 :     // POLYL
                5'b01_100 :     // POLYL
                        begin
                        begin
                          STATE_0  = ACCA[3] ?          // _M...
                          STATE_0  = ACCA[3] ?          // _M...
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                           : {   addr_nop,8'h54, SRC_1, F0_h,  1'b0,temp_h,op_mull, 2'b01,2'b00,4'h0  };
                                           : {   addr_nop,8'h54, SRC_1, F0_h,  1'b0,temp_h,op_mull, 2'b01,2'b00,4'h0  };
Line 848... Line 807...
                        end
                        end
                5'b01_101 :     // POLYF
                5'b01_101 :     // POLYF
                        begin
                        begin
                          STATE_0  = ACCA[3] ?          // _M...
                          STATE_0  = ACCA[3] ?          // _M...
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                 {   ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                           : {   addr_nop,8'h54, SRC_1, F0,    1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                                           : {   addr_nop,8'h55, SRC_1, F0,    1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  };
                          state_50 = ACCA[3] ?          // _M...
                          state_50 = ACCA[3] ?          // _M...
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                           : {   addr_nop,8'h54, SRC_1, F0,    1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                                           : {   addr_nop,8'h55, SRC_1, F0,    1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  };
                          state_53 = {   addr_nop,8'h54, imme,  F0,    1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                          state_53 = {   addr_nop,8'h55, imme,  F0,    1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  };
                          state_54 = ACCA[1] ?
                          state_54 = ACCA[1] ?
                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 }
                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 }
                                           : {   addr_nop,8'h00, rtmph, SRC_2, 1'b1,w_F0  ,op_addf, 2'b00,2'b00,4'h0  };
                                           : {   addr_nop,8'h6E, rtmph, SRC_2, 1'b0,dest_x,op_addf, 2'b11,2'b00,4'h0  };
                          state_55 = dont_care;
                          state_55 = {   addr_nop,8'h54, src_x, src_x, 1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                          state_58 = {   addr_nop,8'h00, rtmph, imme,  1'b1,w_F0  ,op_addf, 2'b00,2'b00,4'h0  };
                          state_58 = {   addr_nop,8'h6E, rtmph, imme,  1'b0,dest_x,op_addf, 2'b11,2'b00,4'h0  };
                          state_59 = dont_care;
                          state_59 = dont_care;
                          state_5A = dont_care;
                          state_5A = dont_care;
                        end
                        end
                5'b01_110 :     // DOTL
                5'b01_110 :     // DOTL
                        begin
                        begin
Line 885... Line 844...
                          state_5A = {   addr_nop,8'h61, rtmph, F0_h,  1'b0,temp_h,op_mull, 2'b01,2'b00,4'h0  };
                          state_5A = {   addr_nop,8'h61, rtmph, F0_h,  1'b0,temp_h,op_mull, 2'b01,2'b00,4'h0  };
                        end
                        end
                5'b01_111 :     // DOTF
                5'b01_111 :     // DOTF
                        begin
                        begin
                          STATE_0  = (~ACCA[3] & ~ACCA[1]) ?            // _R.R.
                          STATE_0  = (~ACCA[3] & ~ACCA[1]) ?            // _R.R.
                                                 {       addr_nop,8'h63, SRC_1 ,SRC_2 ,1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  }         // opera = MULF
                                                 {       addr_nop,8'h63, SRC_1 ,SRC_2 ,1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  }         // opera = MULF
                                           : (  ACCA[3] ?               // _M...
                                           : (  ACCA[3] ?               // _M...
                                                    {ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                    {ADRD1,   phsrc1,src_x, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                  : {ADRD2,   phsrc2,src_x, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 } );
                                                  : {ADRD2,   phsrc2,src_x, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 } );
                          state_50 = ACCA[3] ?          // _M...
                          state_50 = ACCA[3] ?          // _M...
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                                 {   ADRD1,   phsrc1,IRRW1, REGA1, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRD1 }
                                           : {   ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 };
                                           : {   ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 };
                          state_53 = ACCA[1] ?          // _..M.
                          state_53 = ACCA[1] ?          // _..M.
                                                 {   addr_nop,8'h55, imme,  src_x, 1'b1,temp_h,op_mov,  2'b00,2'b00,4'h0  }
                                                 {   addr_nop,8'h55, imme,  src_x, 1'b1,temp_h,op_mov,  2'b00,2'b00,4'h0  }
                                           : {   addr_nop,8'h63, imme,  SRC_2 ,1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                                           : {   addr_nop,8'h63, imme,  SRC_2 ,1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  };
                          state_54 = dont_care;
                          state_54 = dont_care;
                          state_55 = {   ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 };
                          state_55 = {   ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,dest_x,op_mov,  2'b00,2'b00,NXRW2 };
                          state_58 = {   addr_nop,8'h63, (ACCA[3] ? rtmph : SRC_1),             //_M...
                          state_58 = {   addr_nop,8'h63, (ACCA[3] ? rtmph : SRC_1),             //_M...
                                                                                                        imme,  1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };
                                                                                                        imme,  1'b0,dest_x,op_mulf, 2'b11,2'b00,4'h0  };
                          state_59 = dont_care;
                          state_59 = dont_care;
                          state_5A = dont_care;
                          state_5A = dont_care;
                        end
                        end
                default
                default
                        begin
                        begin
Line 940... Line 899...
        always @(*)
        always @(*)
          casex (PHASE)
          casex (PHASE)
                 4'h0 : STATE_GROUP_60 = {       addr_nop,8'h00, src_x, src_x, 1'b1,chkreg,op_adr,  2'b00,2'b00,4'h0  };        // for INDEX
                 4'h0 : STATE_GROUP_60 = {       addr_nop,8'h00, src_x, src_x, 1'b1,chkreg,op_adr,  2'b00,2'b00,4'h0  };        // for INDEX
                 4'h1 : STATE_GROUP_60 = {       addr_nop,8'h62, rtmpl, F0,    1'b1,w_F0_h,op_addl, 2'b10,2'b00,4'h0  };        // for DOTL
                 4'h1 : STATE_GROUP_60 = {       addr_nop,8'h62, rtmpl, F0,    1'b1,w_F0_h,op_addl, 2'b10,2'b00,4'h0  };        // for DOTL
                 4'h2 : STATE_GROUP_60 = {       addr_nop,8'h00, src_x, src_x, 1'b0,w_F0_h,op_addl, 2'b00,2'b00,4'h0  };        // for DOTL & POLYL !
                 4'h2 : STATE_GROUP_60 = {       addr_nop,8'h00, src_x, src_x, 1'b0,w_F0_h,op_addl, 2'b00,2'b00,4'h0  };        // for DOTL & POLYL !
                 4'h3 : STATE_GROUP_60 = {       addr_nop,8'h00, rtmph, F0,    1'b1,w_F0,  op_addf, 2'b00,2'b00,4'h0  };        // for DOTF
                 4'h3 : STATE_GROUP_60 = {       addr_nop,8'h6F, src_x, src_x, 1'b1,temp_h,op_mulf, 2'b00,2'b00,4'h0  };        // for DOTF
 
                 4'hF : STATE_GROUP_60 = {       addr_nop,8'h6E, rtmph, F0,    1'b0,dest_x,op_addf, 2'b11,2'b00,4'h0  };
 
                 4'hE : STATE_GROUP_60 = {       addr_nop,8'h00, src_x, src_x, 1'b1,w_F0,  op_addf, 2'b00,2'b00,4'h0  };        // for DOTF & POLYF
                 4'h4 : STATE_GROUP_60 = ACCA[1] ?      // ..M.
                 4'h4 : STATE_GROUP_60 = ACCA[1] ?      // ..M.
                                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,temp_h,op_mull, 2'b00,2'b00,NXRW2 }
                                                                 {       ADRD2,   phsrc2,IRRW2, REGA2, 1'b0,temp_h,op_mull, 2'b00,2'b00,NXRW2 }
                                                           : {   addr_nop,8'h59, SRC_2, rtmph, 1'b0,temp_h,op_addl, 2'b01,2'b00,4'h0  };        // for POLYL
                                                           : {   addr_nop,8'h59, SRC_2, rtmph, 1'b0,temp_h,op_addl, 2'b01,2'b00,4'h0  };        // for POLYL
                 4'h5 : STATE_GROUP_60 = {       addr_nop,8'h59, src_x, src_x, 1'b1,temp_l,op_kust, 2'b00,2'b00,4'h0  };        // for MOVM/CMPM
                 4'h5 : STATE_GROUP_60 = {       addr_nop,8'h59, src_x, src_x, 1'b1,temp_l,op_kust, 2'b00,2'b00,4'h0  };        // for MOVM/CMPM
                 4'h6 : STATE_GROUP_60 = {       addr_nop,8'h01, rtmph, src_x, 1'b0,dest_x,op_mov,      2'b00,2'b00,4'h0  };    // for JUMP/JSR/CASE
                 4'h6 : STATE_GROUP_60 = {       addr_nop,8'h01, rtmph, src_x, 1'b0,dest_x,op_mov,      2'b00,2'b00,4'h0  };    // for JUMP/JSR/CASE

powered by: WebSVN 2.1.0

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