| Line 43... | 
        Line 43... | 
      
      
        //////////////////////////////////////////////////////////////////////
  | 
        //////////////////////////////////////////////////////////////////////
  | 
      
      
        //
  | 
        //
  | 
      
      
        // CVS Revision History
  | 
        // CVS Revision History
  | 
      
      
        //
  | 
        //
  | 
      
      
        // $Log: not supported by cvs2svn $
  | 
        // $Log: not supported by cvs2svn $
  | 
      
      
           | 
        // Revision 1.21  2003/06/03 17:09:57  simont
  | 
      
      
           | 
        // pipelined acces to axternal instruction interface added.
  | 
      
      
           | 
        //
  | 
      
      
        // Revision 1.20  2003/05/06 11:10:38  simont
  | 
        // Revision 1.20  2003/05/06 11:10:38  simont
  | 
      
      
        // optimize state machine.
  | 
        // optimize state machine.
  | 
      
      
        //
  | 
        //
  | 
      
      
        // Revision 1.19  2003/05/06 09:41:35  simont
  | 
        // Revision 1.19  2003/05/06 09:41:35  simont
  | 
      
      
        // remove define OC8051_AS2_PCL, chane signal src_sel2 to 2 bit wide.
  | 
        // remove define OC8051_AS2_PCL, chane signal src_sel2 to 2 bit wide.
  | 
      
      
        | Line 163... | 
        Line 166... | 
      
      
        //
  | 
        //
  | 
      
      
        // main block
  | 
        // main block
  | 
      
      
        // unregisterd outputs
  | 
        // unregisterd outputs
  | 
      
      
        always @(op_cur or eq or state_dec or mem_wait)
  | 
        always @(op_cur or eq or state_dec or mem_wait)
  | 
      
      
        begin
  | 
        begin
  | 
      
      
            case (state_dec)
  | 
            case (state_dec) /* synopsys full_case parallel_case */
  | 
      
      
              2'b01: begin
  | 
              2'b01: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_DIV : begin
  | 
                  `OC8051_DIV : begin
  | 
      
      
                      ram_rd_sel = `OC8051_RRS_B;
  | 
                      ram_rd_sel = `OC8051_RRS_B;
  | 
      
      
                    end
  | 
                    end
  | 
      
      
                  `OC8051_MUL : begin
  | 
                  `OC8051_MUL : begin
  | 
      
      
                      ram_rd_sel = `OC8051_RRS_B;
  | 
                      ram_rd_sel = `OC8051_RRS_B;
  | 
      
      
        | Line 184... | 
        Line 187... | 
      
      
                pc_sel = `OC8051_PIS_DC;
  | 
                pc_sel = `OC8051_PIS_DC;
  | 
      
      
                comp_sel =  `OC8051_CSS_DC;
  | 
                comp_sel =  `OC8051_CSS_DC;
  | 
      
      
                rmw = `OC8051_RMW_N;
  | 
                rmw = `OC8051_RMW_N;
  | 
      
      
              end
  | 
              end
  | 
      
      
              2'b10: begin
  | 
              2'b10: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_SJMP : begin
  | 
                  `OC8051_SJMP : begin
  | 
      
      
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
      
      
                      pc_wr = `OC8051_PCW_Y;
  | 
                      pc_wr = `OC8051_PCW_Y;
  | 
      
      
                      pc_sel = `OC8051_PIS_SO1;
  | 
                      pc_sel = `OC8051_PIS_SO1;
  | 
      
      
                      comp_sel =  `OC8051_CSS_DC;
  | 
                      comp_sel =  `OC8051_CSS_DC;
  | 
      
      
        | Line 331... | 
        Line 334... | 
      
      
                endcase
  | 
                endcase
  | 
      
      
                rmw = `OC8051_RMW_N;
  | 
                rmw = `OC8051_RMW_N;
  | 
      
      
                stb_i = 1'b1;
  | 
                stb_i = 1'b1;
  | 
      
      
              end
  | 
              end
  | 
      
      
              2'b11: begin
  | 
              2'b11: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_CJNE_R : begin
  | 
                  `OC8051_CJNE_R : begin
  | 
      
      
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
      
      
                      pc_wr = `OC8051_PCW_N;
  | 
                      pc_wr = `OC8051_PCW_N;
  | 
      
      
                      pc_sel = `OC8051_PIS_DC;
  | 
                      pc_sel = `OC8051_PIS_DC;
  | 
      
      
                    end
  | 
                    end
  | 
      
      
        | Line 393... | 
        Line 396... | 
      
      
                comp_sel =  `OC8051_CSS_DC;
  | 
                comp_sel =  `OC8051_CSS_DC;
  | 
      
      
                rmw = `OC8051_RMW_N;
  | 
                rmw = `OC8051_RMW_N;
  | 
      
      
                stb_i = 1'b1;
  | 
                stb_i = 1'b1;
  | 
      
      
                bit_addr = 1'b0;
  | 
                bit_addr = 1'b0;
  | 
      
      
              end
  | 
              end
  | 
      
      
              default: begin
  | 
              2'b00: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_ACALL :begin
  | 
                  `OC8051_ACALL :begin
  | 
      
      
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
                      ram_rd_sel = `OC8051_RRS_DC;
  | 
      
      
                      pc_wr = `OC8051_PCW_Y;
  | 
                      pc_wr = `OC8051_PCW_Y;
  | 
      
      
                      pc_sel = `OC8051_PIS_I11;
  | 
                      pc_sel = `OC8051_PIS_I11;
  | 
      
      
                      comp_sel =  `OC8051_CSS_DC;
  | 
                      comp_sel =  `OC8051_CSS_DC;
  | 
      
      
        | Line 1196... | 
        Line 1199... | 
      
      
            psw_set <= #1 `OC8051_PS_NOT;
  | 
            psw_set <= #1 `OC8051_PS_NOT;
  | 
      
      
            cy_sel <= #1 `OC8051_CY_0;
  | 
            cy_sel <= #1 `OC8051_CY_0;
  | 
      
      
            src_sel3 <= #1 `OC8051_AS3_DC;
  | 
            src_sel3 <= #1 `OC8051_AS3_DC;
  | 
      
      
            wr_sfr <= #1 `OC8051_WRS_N;
  | 
            wr_sfr <= #1 `OC8051_WRS_N;
  | 
      
      
          end else if (!wait_data) begin
  | 
          end else if (!wait_data) begin
  | 
      
      
            case (state_dec)
  | 
            case (state_dec) /* synopsys parallel_case */
  | 
      
      
              2'b01: begin
  | 
              2'b01: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_MOVC_DP :begin
  | 
                  `OC8051_MOVC_DP :begin
  | 
      
      
                      ram_wr_sel <= #1 `OC8051_RWS_DC;
  | 
                      ram_wr_sel <= #1 `OC8051_RWS_DC;
  | 
      
      
                      src_sel1 <= #1 `OC8051_AS1_OP1;
  | 
                      src_sel1 <= #1 `OC8051_AS1_OP1;
  | 
      
      
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
      
      
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
      
      
        | Line 1294... | 
        Line 1297... | 
      
      
                endcase
  | 
                endcase
  | 
      
      
                cy_sel <= #1 `OC8051_CY_0;
  | 
                cy_sel <= #1 `OC8051_CY_0;
  | 
      
      
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
      
      
              end
  | 
              end
  | 
      
      
              2'b10: begin
  | 
              2'b10: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_ACALL :begin
  | 
                  `OC8051_ACALL :begin
  | 
      
      
                      ram_wr_sel <= #1 `OC8051_RWS_SP;
  | 
                      ram_wr_sel <= #1 `OC8051_RWS_SP;
  | 
      
      
                      src_sel1 <= #1 `OC8051_AS1_PCH;
  | 
                      src_sel1 <= #1 `OC8051_AS1_PCH;
  | 
      
      
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
      
      
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
      
      
        | Line 1350... | 
        Line 1353... | 
      
      
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
      
      
                wr_sfr <= #1 `OC8051_WRS_N;
  | 
                wr_sfr <= #1 `OC8051_WRS_N;
  | 
      
      
              end
  | 
              end
  | 
      
      
         
  | 
         
  | 
      
      
              2'b11: begin
  | 
              2'b11: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_RET : begin
  | 
                  `OC8051_RET : begin
  | 
      
      
                      src_sel1 <= #1 `OC8051_AS1_RAM;
  | 
                      src_sel1 <= #1 `OC8051_AS1_RAM;
  | 
      
      
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
      
      
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
      
      
                      psw_set <= #1 `OC8051_PS_NOT;
  | 
                      psw_set <= #1 `OC8051_PS_NOT;
  | 
      
      
        | Line 1389... | 
        Line 1392... | 
      
      
                cy_sel <= #1 `OC8051_CY_0;
  | 
                cy_sel <= #1 `OC8051_CY_0;
  | 
      
      
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
                src_sel3 <= #1 `OC8051_AS3_DC;
  | 
      
      
                wr_sfr <= #1 `OC8051_WRS_N;
  | 
                wr_sfr <= #1 `OC8051_WRS_N;
  | 
      
      
              end
  | 
              end
  | 
      
      
              default: begin
  | 
              default: begin
  | 
      
      
                casex (op_cur)
  | 
                casex (op_cur) /* synopsys parallel_case */
  | 
      
      
                  `OC8051_ACALL :begin
  | 
                  `OC8051_ACALL :begin
  | 
      
      
                      ram_wr_sel <= #1 `OC8051_RWS_SP;
  | 
                      ram_wr_sel <= #1 `OC8051_RWS_SP;
  | 
      
      
                      src_sel1 <= #1 `OC8051_AS1_PCL;
  | 
                      src_sel1 <= #1 `OC8051_AS1_PCL;
  | 
      
      
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
                      src_sel2 <= #1 `OC8051_AS2_DC;
  | 
      
      
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
                      alu_op <= #1 `OC8051_ALU_NOP;
  | 
      
      
        | Line 2635... | 
        Line 2638... | 
      
      
        always @(posedge clk or posedge rst)
  | 
        always @(posedge clk or posedge rst)
  | 
      
      
        begin
  | 
        begin
  | 
      
      
          if (rst)
  | 
          if (rst)
  | 
      
      
            state <= #1 2'b11;
  | 
            state <= #1 2'b11;
  | 
      
      
          else if  (!mem_wait & !wait_data) begin
  | 
          else if  (!mem_wait & !wait_data) begin
  | 
      
      
            case (state)
  | 
            case (state) /* synopsys parallel_case */
  | 
      
      
              2'b10: state <= #1 2'b01;
  | 
              2'b10: state <= #1 2'b01;
  | 
      
      
              2'b11: state <= #1 2'b10;
  | 
              2'b11: state <= #1 2'b10;
  | 
      
      
              2'b00:
  | 
              2'b00:
  | 
      
      
                  casex (op_in)
  | 
                  casex (op_in) /* synopsys full_case parallel_case */
  | 
      
      
                    `OC8051_ACALL   : state <= #1 2'b10;
  | 
                    `OC8051_ACALL   : state <= #1 2'b10;
  | 
      
      
                    `OC8051_AJMP    : state <= #1 2'b10;
  | 
                    `OC8051_AJMP    : state <= #1 2'b10;
  | 
      
      
                    `OC8051_CJNE_R  : state <= #1 2'b10;
  | 
                    `OC8051_CJNE_R  : state <= #1 2'b10;
  | 
      
      
                    `OC8051_CJNE_I  : state <= #1 2'b10;
  | 
                    `OC8051_CJNE_I  : state <= #1 2'b10;
  | 
      
      
                    `OC8051_CJNE_D  : state <= #1 2'b10;
  | 
                    `OC8051_CJNE_D  : state <= #1 2'b10;
  | 
      
      
        | Line 2669... | 
        Line 2672... | 
      
      
                    `OC8051_JNB     : state <= #1 2'b10;
  | 
                    `OC8051_JNB     : state <= #1 2'b10;
  | 
      
      
                    `OC8051_JNZ     : state <= #1 2'b10;
  | 
                    `OC8051_JNZ     : state <= #1 2'b10;
  | 
      
      
                    `OC8051_JZ      : state <= #1 2'b10;
  | 
                    `OC8051_JZ      : state <= #1 2'b10;
  | 
      
      
                    `OC8051_DIV     : state <= #1 2'b11;
  | 
                    `OC8051_DIV     : state <= #1 2'b11;
  | 
      
      
                    `OC8051_MUL     : state <= #1 2'b11;
  | 
                    `OC8051_MUL     : state <= #1 2'b11;
  | 
      
      
                    default         : state <= #1 2'b00;
  | 
        //            default         : state <= #1 2'b00;
  | 
      
      
                  endcase
  | 
                  endcase
  | 
      
      
              default: state <= #1 2'b00;
  | 
              default: state <= #1 2'b00;
  | 
      
      
            endcase
  | 
            endcase
  | 
      
      
          end
  | 
          end
  | 
      
      
        end
  | 
        end
  | 
      
      
        | Line 2686... | 
        Line 2689... | 
      
      
          if (rst) begin
  | 
          if (rst) begin
  | 
      
      
            mem_act <= #1 `OC8051_MAS_NO;
  | 
            mem_act <= #1 `OC8051_MAS_NO;
  | 
      
      
          end else if (!rd) begin
  | 
          end else if (!rd) begin
  | 
      
      
            mem_act <= #1 `OC8051_MAS_NO;
  | 
            mem_act <= #1 `OC8051_MAS_NO;
  | 
      
      
          end else
  | 
          end else
  | 
      
      
            casex (op_cur)
  | 
            casex (op_cur) /* synopsys parallel_case */
  | 
      
      
              `OC8051_MOVX_AI : mem_act <= #1 `OC8051_MAS_RI_W;
  | 
              `OC8051_MOVX_AI : mem_act <= #1 `OC8051_MAS_RI_W;
  | 
      
      
              `OC8051_MOVX_AP : mem_act <= #1 `OC8051_MAS_DPTR_W;
  | 
              `OC8051_MOVX_AP : mem_act <= #1 `OC8051_MAS_DPTR_W;
  | 
      
      
              `OC8051_MOVX_IA : mem_act <= #1 `OC8051_MAS_RI_R;
  | 
              `OC8051_MOVX_IA : mem_act <= #1 `OC8051_MAS_RI_R;
  | 
      
      
              `OC8051_MOVX_PA : mem_act <= #1 `OC8051_MAS_DPTR_R;
  | 
              `OC8051_MOVX_PA : mem_act <= #1 `OC8051_MAS_DPTR_R;
  | 
      
      
              `OC8051_MOVC_DP : mem_act <= #1 `OC8051_MAS_CODE;
  | 
              `OC8051_MOVC_DP : mem_act <= #1 `OC8051_MAS_CODE;
  |