Line 35... |
Line 35... |
//// ////
|
//// ////
|
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
|
|
// CVS Log
|
// CVS Log
|
//
|
//
|
// $Id: mc_timing.v,v 1.3 2001-09-02 02:28:28 rudi Exp $
|
// $Id: mc_timing.v,v 1.4 2001-09-24 00:38:21 rudi Exp $
|
//
|
//
|
// $Date: 2001-09-02 02:28:28 $
|
// $Date: 2001-09-24 00:38:21 $
|
// $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/02 02:28:28 rudi
|
|
//
|
|
// Many fixes for minor bugs that showed up in gate level simulations.
|
|
//
|
// 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 413... |
Line 417... |
|
|
always @(posedge clk)
|
always @(posedge clk)
|
rsts <= #1 rsts1;
|
rsts <= #1 rsts1;
|
|
|
// Control Signals Output Enable
|
// Control Signals Output Enable
|
always @(posedge clk)
|
always @(posedge clk or posedge rst)
|
if(!rst) mc_c_oe <= #1 1'b0;
|
if(rst) mc_c_oe <= #1 1'b0;
|
else mc_c_oe <= #1 mc_c_oe_d;
|
else mc_c_oe <= #1 mc_c_oe_d;
|
|
|
always @(posedge clk or negedge rsts)
|
always @(posedge clk or posedge rsts)
|
if(!rsts) mc_le <= #1 1'b0;
|
if(rsts) mc_le <= #1 1'b0;
|
else mc_le <= #1 ~mc_le;
|
else mc_le <= #1 ~mc_le;
|
|
|
always @(posedge clk)
|
always @(posedge clk)
|
pack_le0 <= #1 pack_le0_d;
|
pack_le0 <= #1 pack_le0_d;
|
|
|
Line 512... |
Line 516... |
|
|
always @(posedge clk)
|
always @(posedge clk)
|
lookup_ready2 <= #1 lookup_ready1;
|
lookup_ready2 <= #1 lookup_ready1;
|
|
|
// Keep Track if it is a SDRAM write cycle
|
// Keep Track if it is a SDRAM write cycle
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
if(!rst) wr_cycle <= #1 1'b0;
|
if(rst) wr_cycle <= #1 1'b0;
|
else
|
else
|
if(wr_set) wr_cycle <= #1 1'b1;
|
if(wr_set) wr_cycle <= #1 1'b1;
|
else
|
else
|
if(wr_clr) wr_cycle <= #1 1'b0;
|
if(wr_clr) wr_cycle <= #1 1'b0;
|
|
|
// Track when a cycle is *still* active
|
// Track when a cycle is *still* active
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
if(!rst) wb_cycle <= #1 1'b0;
|
if(rst) wb_cycle <= #1 1'b0;
|
else
|
else
|
if(wb_cycle_set) wb_cycle <= #1 1'b1;
|
if(wb_cycle_set) wb_cycle <= #1 1'b1;
|
else
|
else
|
if(!wb_cyc_i) wb_cycle <= #1 1'b0;
|
if(!wb_cyc_i) wb_cycle <= #1 1'b0;
|
|
|
// Track ack's for read cycles
|
// Track ack's for read cycles
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
if(!rst) ack_cnt <= #1 4'h0;
|
if(rst) ack_cnt <= #1 4'h0;
|
else
|
else
|
if(!wb_read_go & !wb_write_go) ack_cnt <= #1 4'h0;
|
if(!wb_read_go & !wb_write_go) ack_cnt <= #1 4'h0;
|
else
|
else
|
if(dv & !mem_ack_s) ack_cnt <= #1 ack_cnt + 4'h1;
|
if(dv & !mem_ack_s) ack_cnt <= #1 ack_cnt + 4'h1;
|
else
|
else
|
Line 561... |
Line 565... |
rfr_ack_r <= #1 rfr_ack;
|
rfr_ack_r <= #1 rfr_ack;
|
|
|
// Suspend Select Logic
|
// Suspend Select Logic
|
assign susp_sel = susp_sel_r | susp_sel_set;
|
assign susp_sel = susp_sel_r | susp_sel_set;
|
|
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
if(!rst) susp_sel_r <= #1 0;
|
if(rst) susp_sel_r <= #1 0;
|
else
|
else
|
if(susp_sel_set) susp_sel_r <= #1 1'b1;
|
if(susp_sel_set) susp_sel_r <= #1 1'b1;
|
else
|
else
|
if(susp_sel_clr) susp_sel_r <= #1 1'b0;
|
if(susp_sel_clr) susp_sel_r <= #1 1'b0;
|
|
|
Line 608... |
Line 612... |
wire [3:0] twrp;
|
wire [3:0] twrp;
|
|
|
assign twrp = tms_x[16:15] + tms_x[23:20];
|
assign twrp = tms_x[16:15] + tms_x[23:20];
|
|
|
// SDRAM Memories timing tracker
|
// SDRAM Memories timing tracker
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
`ifdef MC_POR_DELAY
|
`ifdef MC_POR_DELAY
|
if(!rst) timer <= #1 `MC_POR_DELAY_VAL ;
|
if(rst) timer <= #1 `MC_POR_DELAY_VAL ;
|
else
|
else
|
`endif
|
`endif
|
if(tmr_ld_twr2) timer <= #1 { 4'h0, tms_x[15:12] };
|
if(tmr_ld_twr2) timer <= #1 { 4'h0, tms_x[15:12] };
|
else
|
else
|
if(tmr_ld_trdz) timer <= #1 { 4'h0, tms_x[11:8] };
|
if(tmr_ld_trdz) timer <= #1 { 4'h0, tms_x[11:8] };
|
Line 681... |
Line 685... |
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Main State Machine
|
// Main State Machine
|
//
|
//
|
|
|
always @(posedge clk or negedge rst)
|
always @(posedge clk or posedge rst)
|
`ifdef MC_POR_DELAY
|
`ifdef MC_POR_DELAY
|
if(!rst) state <= #1 POR;
|
if(rst) state <= #1 POR;
|
`else
|
`else
|
if(!rst) state <= #1 IDLE;
|
if(rst) state <= #1 IDLE;
|
`endif
|
`endif
|
else state <= #1 next_state;
|
else state <= #1 next_state;
|
|
|
always @(state or cs_a or
|
always @(state or cs_a or
|
twd_is_zero or wb_stb_i or
|
twd_is_zero or wb_stb_i or
|