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

Subversion Repositories 8051

[/] [8051/] [trunk/] [rtl/] [verilog/] [oc8051_memory_interface.v] - Diff between revs 173 and 179

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

Rev 173 Rev 179
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.11  2003/06/20 13:35:10  simont
 
// simualtion `ifdef added
 
//
// Revision 1.10  2003/06/05 11:15:02  simont
// Revision 1.10  2003/06/05 11:15:02  simont
// fix bug.
// fix bug.
//
//
// Revision 1.9  2003/06/03 17:09:57  simont
// Revision 1.9  2003/06/03 17:09:57  simont
// pipelined acces to axternal instruction interface added.
// pipelined acces to axternal instruction interface added.
Line 395... Line 398...
//
//
/////////////////////////////
/////////////////////////////
 
 
always @(rd_sel or sp or ri or rn or imm or dadr_o[15:0] or bank)
always @(rd_sel or sp or ri or rn or imm or dadr_o[15:0] or bank)
begin
begin
  case (rd_sel)
  case (rd_sel) /* synopsys full_case parallel_case */
    `OC8051_RRS_RN   : rd_addr = {3'h0, rn};
    `OC8051_RRS_RN   : rd_addr = {3'h0, rn};
    `OC8051_RRS_I    : rd_addr = ri;
    `OC8051_RRS_I    : rd_addr = ri;
    `OC8051_RRS_D    : rd_addr = imm;
    `OC8051_RRS_D    : rd_addr = imm;
    `OC8051_RRS_SP   : rd_addr = sp;
    `OC8051_RRS_SP   : rd_addr = sp;
 
 
    `OC8051_RRS_B    : rd_addr = `OC8051_SFR_B;
    `OC8051_RRS_B    : rd_addr = `OC8051_SFR_B;
    `OC8051_RRS_DPTR : rd_addr = `OC8051_SFR_DPTR_LO;
    `OC8051_RRS_DPTR : rd_addr = `OC8051_SFR_DPTR_LO;
    `OC8051_RRS_PSW  : rd_addr = `OC8051_SFR_PSW;
    `OC8051_RRS_PSW  : rd_addr = `OC8051_SFR_PSW;
    `OC8051_RRS_ACC  : rd_addr = `OC8051_SFR_ACC;
    `OC8051_RRS_ACC  : rd_addr = `OC8051_SFR_ACC;
    default          : rd_addr = 2'bxx;
//    default          : rd_addr = 2'bxx;
  endcase
  endcase
 
 
end
end
 
 
 
 
//
//
//
//
always @(wr_sel or sp_w or rn_r or imm_r or ri_r or imm2_r or op1_r or dadr_o[15:0])
always @(wr_sel or sp_w or rn_r or imm_r or ri_r or imm2_r or op1_r or dadr_o[15:0])
begin
begin
  case (wr_sel)
  case (wr_sel) /* synopsys full_case parallel_case */
    `OC8051_RWS_RN : wr_addr = {3'h0, rn_r};
    `OC8051_RWS_RN : wr_addr = {3'h0, rn_r};
    `OC8051_RWS_I  : wr_addr = ri_r;
    `OC8051_RWS_I  : wr_addr = ri_r;
    `OC8051_RWS_D  : wr_addr = imm_r;
    `OC8051_RWS_D  : wr_addr = imm_r;
    `OC8051_RWS_SP : wr_addr = sp_w;
    `OC8051_RWS_SP : wr_addr = sp_w;
    `OC8051_RWS_D3 : wr_addr = imm2_r;
    `OC8051_RWS_D3 : wr_addr = imm2_r;
    `OC8051_RWS_B  : wr_addr = `OC8051_SFR_B;
    `OC8051_RWS_B  : wr_addr = `OC8051_SFR_B;
    default        : wr_addr = 2'bxx;
//    default        : wr_addr = 2'bxx;
  endcase
  endcase
end
end
 
 
always @(posedge clk or posedge rst)
always @(posedge clk or posedge rst)
  if (rst)
  if (rst)
Line 496... Line 499...
  end else if (dack_i) begin
  end else if (dack_i) begin
    dwe_o <= #1 1'b0;
    dwe_o <= #1 1'b0;
    dstb_o <= #1 1'b0;
    dstb_o <= #1 1'b0;
    dmem_wait <= #1 1'b0;
    dmem_wait <= #1 1'b0;
  end else begin
  end else begin
    case (mem_act)
    case (mem_act) /* synopsys full_case parallel_case */
      `OC8051_MAS_DPTR_R: begin  // read from external rom: acc=(dptr)
      `OC8051_MAS_DPTR_R: begin  // read from external rom: acc=(dptr)
        dwe_o <= #1 1'b0;
        dwe_o <= #1 1'b0;
        dstb_o <= #1 1'b1;
        dstb_o <= #1 1'b1;
        ddat_o <= #1 8'h00;
        ddat_o <= #1 8'h00;
        dadr_ot <= #1 {7'h0, dptr};
        dadr_ot <= #1 {7'h0, dptr};
Line 564... Line 567...
  end
  end
end
end
 
 
always @(op_pos or idat_cur or idat_old)
always @(op_pos or idat_cur or idat_old)
begin
begin
  case (op_pos)
  case (op_pos)  /* synopsys parallel_case */
    3'b000: begin
    3'b000: begin
       op1 = idat_old[7:0]  ;
       op1 = idat_old[7:0]  ;
       op2 = idat_old[15:8] ;
       op2 = idat_old[15:8] ;
       op3 = idat_old[23:16];
       op3 = idat_old[23:16];
      end
      end
Line 675... Line 678...
//
//
/////////////////////////////
/////////////////////////////
 
 
always @(op1_out)
always @(op1_out)
begin
begin
        casex (op1_out)
        casex (op1_out) /* synopsys parallel_case */
          `OC8051_ACALL :  op_length = 2'h2;
          `OC8051_ACALL :  op_length = 2'h2;
          `OC8051_AJMP :   op_length = 2'h2;
          `OC8051_AJMP :   op_length = 2'h2;
 
 
        //op_code [7:3]
        //op_code [7:3]
          `OC8051_CJNE_R : op_length = 2'h3;
          `OC8051_CJNE_R : op_length = 2'h3;
Line 937... Line 940...
  if (rst) begin
  if (rst) begin
    pc_buf <= #1 `OC8051_RST_PC;
    pc_buf <= #1 `OC8051_RST_PC;
  end else if (pc_wr) begin
  end else if (pc_wr) begin
//
//
//case of writing new value to pc (jupms)
//case of writing new value to pc (jupms)
      case (pc_wr_sel)
      case (pc_wr_sel) /* synopsys full_case parallel_case */
        `OC8051_PIS_ALU: pc_buf        <= #1 alu;
        `OC8051_PIS_ALU: pc_buf        <= #1 alu;
        `OC8051_PIS_AL:  pc_buf[7:0]   <= #1 alu[7:0];
        `OC8051_PIS_AL:  pc_buf[7:0]   <= #1 alu[7:0];
        `OC8051_PIS_AH:  pc_buf[15:8]  <= #1 alu[7:0];
        `OC8051_PIS_AH:  pc_buf[15:8]  <= #1 alu[7:0];
        `OC8051_PIS_I11: pc_buf[10:0]  <= #1 {op1_out[7:5], op2_out};
        `OC8051_PIS_I11: pc_buf[10:0]  <= #1 {op1_out[7:5], op2_out};
        `OC8051_PIS_I16: pc_buf        <= #1 {op2_out, op3_out};
        `OC8051_PIS_I16: pc_buf        <= #1 {op2_out, op3_out};

powered by: WebSVN 2.1.0

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