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

Subversion Repositories 8051

[/] [8051/] [trunk/] [rtl/] [verilog/] [oc8051_memory_interface.v] - Diff between revs 132 and 139

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

Rev 132 Rev 139
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.5  2003/04/25 17:15:51  simont
 
// change branch instruction execution (reduse needed clock periods).
 
//
// Revision 1.4  2003/04/16 10:04:09  simont
// Revision 1.4  2003/04/16 10:04:09  simont
// chance idat_ir to 24 bit wide
// chance idat_ir to 24 bit wide
//
//
// Revision 1.3  2003/04/11 10:05:08  simont
// Revision 1.3  2003/04/11 10:05:08  simont
// Change pc add value from 23'h to 16'h
// Change pc add value from 23'h to 16'h
Line 87... Line 90...
  dadr_o, dwe_o, dstb_o, dack_i, ddat_i, ddat_o,
  dadr_o, dwe_o, dstb_o, dack_i, ddat_i, ddat_o,
//interrupt interface
//interrupt interface
  intr, int_v, int_ack,
  intr, int_v, int_ack,
 
 
//alu
//alu
  des1, des2,
  des_acc, des1, des2,
 
 
//sfr's
//sfr's
  dptr, ri, rn_mem, sp,  sp_w, rn, acc, reti);
  dptr, ri, sp,  sp_w, rn, acc, reti);
 
 
input bit_in, sfr_bit, dack_i;
input bit_in, sfr_bit, dack_i;
input [2:0] mem_act;
input [2:0] mem_act;
input [7:0] in_ram, sfr, acc, sp_w;
input [7:0] in_ram, sfr, acc, sp_w;
input [31:0] idat_i;
input [31:0] idat_i;
Line 102... Line 105...
output bit_out, mem_wait, reti;
output bit_out, mem_wait, reti;
output [7:0] iram_out, wr_dat;
output [7:0] iram_out, wr_dat;
 
 
reg bit_out, reti;
reg bit_out, reti;
reg [7:0] iram_out, sp_r;
reg [7:0] iram_out, sp_r;
reg [2:0] rd_addr_r;
reg       rd_addr_r;
input clk, rst, wr_i, wr_bit_i;
input clk, rst, wr_i, wr_bit_i;
output wr_o, wr_bit_o;
output wr_o, wr_bit_o;
 
 
//????
//????
reg dack_ir;
reg dack_ir;
Line 117... Line 120...
//
//
//  rom_addr_sel
//  rom_addr_sel
//
//
/////////////////////////////
/////////////////////////////
input iack_i;
input iack_i;
input [7:0] des1, des2;
input [7:0] des_acc, des1, des2;
output [15:0] iadr_o;
output [15:0] iadr_o;
 
 
wire ea_rom_sel;
wire ea_rom_sel;
 
 
/////////////////////////////
/////////////////////////////
//
//
// ext_addr_sel
// ext_addr_sel
//
//
/////////////////////////////
/////////////////////////////
input [7:0] ri, rn_mem, ddat_i;
input [7:0] ri, ddat_i;
input [15:0] dptr;
input [15:0] dptr;
 
 
output dstb_o, dwe_o;
output dstb_o, dwe_o;
output [7:0] ddat_o;
output [7:0] ddat_o;
output [15:0] dadr_o;
output [15:0] dadr_o;
Line 214... Line 217...
wire [7:0] isr_call;
wire [7:0] isr_call;
 
 
assign bank = rn[4:3];
assign bank = rn[4:3];
assign imm = op2_out;
assign imm = op2_out;
assign imm2 = op3_out;
assign imm2 = op3_out;
assign alu = {des2,des1};
assign alu = {des2, des_acc};
assign ea_rom_sel = ea && ea_int;
assign ea_rom_sel = ea && ea_int;
assign wr_o = wr_i;
assign wr_o = wr_i;
assign wr_bit_o = wr_bit_i;
assign wr_bit_o = wr_bit_i;
 
 
assign mem_wait = dmem_wait || imem_wait;
assign mem_wait = dmem_wait || imem_wait;
Line 232... Line 235...
 
 
/////////////////////////////
/////////////////////////////
//
//
//  ram_select
//  ram_select
//
//
/////////////////////////////
///////////////////////////// ??????????????????????
always @(rd_addr_r or in_ram or sfr or bit_in or sfr_bit or rn_mem or rd_ind)
always @(rd_addr_r or in_ram or sfr or bit_in or sfr_bit or rd_ind)
begin
begin
  if (rd_addr_r[2] && !rd_ind) begin
  if (rd_addr_r && !rd_ind) begin
    iram_out = sfr;
    iram_out = sfr;
    bit_out = sfr_bit;
    bit_out = sfr_bit;
  end else if (~|rd_addr_r[2:0]) begin
 
    iram_out = rn_mem;
 
    bit_out = bit_in;
 
  end else begin
  end else begin
    iram_out = in_ram;
    iram_out = in_ram;
    bit_out = bit_in;
    bit_out = bit_in;
  end
  end
end
end
Line 310... Line 310...
/////////////////////////////
/////////////////////////////
//
//
// output address is alu destination
// output address is alu destination
// (instructions MOVC)
// (instructions MOVC)
 
 
assign iadr_ot = istb_t ? iadr_t : pc;
assign iadr_ot = (istb_t & !iack_i) ? iadr_t : pc;
assign iadr_o = iadr_ot;
assign iadr_o = iadr_ot;
 
 
 
 
always @(posedge clk or posedge rst)
always @(posedge clk or posedge rst)
begin
begin
Line 330... Line 330...
  end else if (ea_rom_sel && imem_wait) begin
  end else if (ea_rom_sel && imem_wait) begin
    imem_wait <= #1 1'b0;
    imem_wait <= #1 1'b0;
  end else if (ea_rom_sel && !imem_wait && istb_t) begin
  end else if (ea_rom_sel && !imem_wait && istb_t) begin
    istb_t <= #1 1'b0;
    istb_t <= #1 1'b0;
  end else if (mem_act==`OC8051_MAS_CODE) begin
  end else if (mem_act==`OC8051_MAS_CODE) begin
    iadr_t <= #1 {des2, des1};
    iadr_t <= #1 alu;
    istb_t <= #1 1'b1;
    istb_t <= #1 1'b1;
    imem_wait <= #1 1'b1;
    imem_wait <= #1 1'b1;
  end
  end
end
end
 
 
Line 495... Line 495...
//
//
//  pc
//  pc
//
//
/////////////////////////////
/////////////////////////////
 
 
always @(pc_buf or op1_out or pc_wait or int_buff or int_buff1 or alu[7:0] or ea_rom_sel or iack_i)
always @(pc_buf or op1_out or pc_wait or int_buff or int_buff1 or ea_rom_sel or iack_i)
begin
begin
    if (int_buff || int_buff1) begin
    if (int_buff || int_buff1) begin
//
//
//in case of interrupt hold valut, to be written to stack
//in case of interrupt hold valut, to be written to stack
      pc= pc_buf;
      pc= pc_buf;
Line 653... Line 653...
  if (rst) begin
  if (rst) begin
    rn_r <= #1 5'd0;
    rn_r <= #1 5'd0;
    ri_r <= #1 8'h00;
    ri_r <= #1 8'h00;
    imm_r <= #1 8'h00;
    imm_r <= #1 8'h00;
    imm2_r <= #1 8'h00;
    imm2_r <= #1 8'h00;
    rd_addr_r <= #1 3'h0;
    rd_addr_r <= #1 1'b0;
    op1_r <= #1 8'h0;
    op1_r <= #1 8'h0;
    dack_ir <= #1 1'b0;
    dack_ir <= #1 1'b0;
    sp_r <= #1 1'b0;
    sp_r <= #1 1'b0;
  end else begin
  end else begin
    rn_r <= #1 rn;
    rn_r <= #1 rn;
    ri_r <= #1 ri;
    ri_r <= #1 ri;
    imm_r <= #1 imm;
    imm_r <= #1 imm;
    imm2_r <= #1 imm2;
    imm2_r <= #1 imm2;
    rd_addr_r <= #1 rd_addr[7:5];
    rd_addr_r <= #1 rd_addr[7];
    op1_r <= #1 op1_out;
    op1_r <= #1 op1_out;
    dack_ir <= #1 dack_i;
    dack_ir <= #1 dack_i;
    sp_r <= #1 sp;
    sp_r <= #1 sp;
  end
  end
 
 

powered by: WebSVN 2.1.0

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