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

Subversion Repositories mem_ctrl

[/] [mem_ctrl/] [trunk/] [rtl/] [verilog/] [mc_wb_if.v] - Diff between revs 12 and 16

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

Rev 12 Rev 16
Line 36... Line 36...
////                                                             ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
//  CVS Log
//
//
//  $Id: mc_wb_if.v,v 1.3 2001-09-24 00:38:21 rudi Exp $
//  $Id: mc_wb_if.v,v 1.4 2001-11-29 02:16:28 rudi Exp $
//
//
//  $Date: 2001-09-24 00:38:21 $
//  $Date: 2001-11-29 02:16:28 $
//  $Revision: 1.3 $
//  $Revision: 1.4 $
//  $Author: rudi $
//  $Author: rudi $
//  $Locker:  $
//  $Locker:  $
//  $State: Exp $
//  $State: Exp $
//
//
// Change History:
// Change History:
//               $Log: not supported by cvs2svn $
//               $Log: not supported by cvs2svn $
 
//               Revision 1.3  2001/09/24 00:38:21  rudi
 
//
 
//               Changed Reset to be active high and async.
 
//
//               Revision 1.2  2001/08/10 08:16:21  rudi
//               Revision 1.2  2001/08/10 08:16:21  rudi
//
//
//               - Changed IO names to be more clear.
//               - Changed IO names to be more clear.
//               - Uniquifyed define names to be core specific.
//               - Uniquifyed define names to be core specific.
//               - Removed "Refresh Early" configuration
//               - Removed "Refresh Early" configuration
Line 61... Line 65...
//               2) Fixed several minor bugs
//               2) Fixed several minor bugs
//
//
//               Revision 1.3  2001/06/12 15:19:49  rudi
//               Revision 1.3  2001/06/12 15:19:49  rudi
//
//
//
//
//               Minor changes after running lint, and a small bug fix reading csr and ba_mask registers.
//              Minor changes after running lint, and a small bug
 
//              fix reading csr and ba_mask registers.
//
//
//               Revision 1.2  2001/06/03 11:37:17  rudi
//               Revision 1.2  2001/06/03 11:37:17  rudi
//
//
//
//
//               1) Fixed Chip Select Mask Register
//               1) Fixed Chip Select Mask Register
Line 90... Line 95...
`include "mc_defines.v"
`include "mc_defines.v"
 
 
module mc_wb_if(clk, rst,
module mc_wb_if(clk, rst,
                wb_addr_i, wb_cyc_i, wb_stb_i, wb_we_i, wb_err, wb_ack_o,
                wb_addr_i, wb_cyc_i, wb_stb_i, wb_we_i, wb_err, wb_ack_o,
                wb_read_go, wb_write_go,
                wb_read_go, wb_write_go,
                wb_first, wb_wait, mem_ack, wr_hold);
                wb_first, wb_wait, mem_ack, wr_hold,
 
                err, par_err, wp_err,
 
                wb_data_o, mem_dout, rf_dout);
 
 
input           clk, rst;
input           clk, rst;
input   [31:0]   wb_addr_i;
input   [31:0]   wb_addr_i;
input           wb_cyc_i;
input           wb_cyc_i;
input           wb_stb_i;
input           wb_stb_i;
input           wb_we_i;
input           wb_we_i;
input           wb_err;
output          wb_err;
output          wb_ack_o;
output          wb_ack_o;
output          wb_read_go;
output          wb_read_go;
output          wb_write_go;
output          wb_write_go;
output          wb_first;
output          wb_first;
output          wb_wait;
output          wb_wait;
input           mem_ack;
input           mem_ack;
output          wr_hold;
output          wr_hold;
 
input           err, par_err, wp_err;
 
output  [31:0]   wb_data_o;
 
input   [31:0]   mem_dout, rf_dout;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Local Wires and Registers
// Local Wires and Registers
//
//
Line 122... Line 132...
wire            wb_first_set;
wire            wb_first_set;
reg             wr_hold;
reg             wr_hold;
wire            rmw;
wire            rmw;
reg             rmw_r;
reg             rmw_r;
reg             rmw_en;
reg             rmw_en;
 
reg             wb_ack_o;
 
reg             wb_err;
 
reg     [31:0]   wb_data_o;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Memory Go Logic
// Memory Go Logic
//
//
Line 133... Line 146...
assign mem_sel = `MC_MEM_SEL;
assign mem_sel = `MC_MEM_SEL;
 
 
always @(posedge clk or posedge rst)
always @(posedge clk or posedge rst)
        if(rst)                 rmw_en <= #1 1'b0;
        if(rst)                 rmw_en <= #1 1'b0;
        else
        else
        if(mem_ack)             rmw_en <= #1 1'b1;
        if(wb_ack_o)            rmw_en <= #1 1'b1;
        else
        else
        if(!wb_cyc_i)           rmw_en <= #1 1'b0;
        if(!wb_cyc_i)           rmw_en <= #1 1'b0;
 
 
always @(posedge clk)
always @(posedge clk)
        rmw_r <= #1 !wr_hold & wb_we_i & wb_cyc_i & wb_stb_i & rmw_en;
        rmw_r <= #1 !wr_hold & wb_we_i & wb_cyc_i & wb_stb_i & rmw_en;
 
 
assign rmw = rmw_r | (!wr_hold & wb_we_i & wb_cyc_i & wb_stb_i & rmw_en);
assign rmw = rmw_r | (!wr_hold & wb_we_i & wb_cyc_i & wb_stb_i & rmw_en);
 
 
 
 
always @(posedge clk)
always @(posedge clk)
        read_go_r1 <= #1 !rmw & wb_cyc_i & ((wb_stb_i & mem_sel & !wb_we_i) | read_go_r);
        read_go_r1 <= #1 !rmw & wb_cyc_i &
 
                        ((wb_stb_i & mem_sel & !wb_we_i) | read_go_r);
 
 
always @(posedge clk)
always @(posedge clk)
        read_go_r <= #1 read_go_r1 & wb_cyc_i;
        read_go_r <= #1 read_go_r1 & wb_cyc_i;
 
 
assign  wb_read_go   =  !rmw & read_go_r1 & wb_cyc_i;
assign  wb_read_go   =  !rmw & read_go_r1 & wb_cyc_i;
Line 162... Line 175...
 
 
assign wb_write_go   = !rmw & write_go_r1 & wb_cyc_i &
assign wb_write_go   = !rmw & write_go_r1 & wb_cyc_i &
                        ((wb_we_i & wb_stb_i) | !wb_stb_i);
                        ((wb_we_i & wb_stb_i) | !wb_stb_i);
 
 
assign wb_first_set = mem_sel & wb_cyc_i & wb_stb_i & !(read_go_r | write_go_r);
assign wb_first_set = mem_sel & wb_cyc_i & wb_stb_i & !(read_go_r | write_go_r);
assign wb_first = wb_first_set | (wb_first_r & !mem_ack & !wb_err);
assign wb_first = wb_first_set | (wb_first_r & !wb_ack_o & !wb_err);
 
 
always @(posedge clk or posedge rst)
always @(posedge clk or posedge rst)
        if(rst)                 wb_first_r <= #1 1'b0;
        if(rst)                 wb_first_r <= #1 1'b0;
        else
        else
        if(wb_first_set)        wb_first_r <= #1 1'b1;
        if(wb_first_set)        wb_first_r <= #1 1'b1;
        else
        else
        if(mem_ack | wb_err)    wb_first_r <= #1 1'b0;
        if(wb_ack_o | wb_err)   wb_first_r <= #1 1'b0;
 
 
always @(posedge clk)
always @(posedge clk)
        if(wb_cyc_i & wb_stb_i) wr_hold <= #1 wb_we_i;
        if(wb_cyc_i & wb_stb_i) wr_hold <= #1 wb_we_i;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// WB Ack
// WB Ack
//
//
 
 
assign wb_ack_o = mem_ack;
always @(posedge clk)
 
        wb_ack_o <= #1 `MC_MEM_SEL ? mem_ack :
 
                        `MC_REG_SEL & wb_cyc_i & wb_stb_i & !wb_ack_o;
 
 
 
always @(posedge clk)
 
        wb_err <= #1 wb_cyc_i & wb_stb_i & `MC_MEM_SEL &
 
                        (par_err | err | wp_err) & !wb_err;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Memory Wait Logic
// Memory Wait Logic
//
//
 
 
assign wb_wait = wb_cyc_i & !wb_stb_i & (wb_write_go | wb_read_go);
assign wb_wait = wb_cyc_i & !wb_stb_i & (wb_write_go | wb_read_go);
 
 
 
////////////////////////////////////////////////////////////////////
 
//
 
// WISHBONE Data Output
 
//
 
 
 
always @(posedge clk)
 
        wb_data_o <= #1 `MC_MEM_SEL ? mem_dout : rf_dout;
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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