Line 91... |
Line 91... |
// Wishbone outputs
|
// Wishbone outputs
|
output reg o_wb_ack;
|
output reg o_wb_ack;
|
output reg o_wb_stall;
|
output reg o_wb_stall;
|
output reg [31:0] o_wb_data;
|
output reg [31:0] o_wb_data;
|
// DDR3 RAM Controller
|
// DDR3 RAM Controller
|
output wire o_ddr_reset_n, o_ddr_cke;
|
output reg o_ddr_reset_n, o_ddr_cke;
|
// Control outputs
|
// Control outputs
|
output reg o_ddr_cs_n, o_ddr_ras_n, o_ddr_cas_n,o_ddr_we_n;
|
output wire o_ddr_cs_n, o_ddr_ras_n, o_ddr_cas_n,o_ddr_we_n;
|
// DQS outputs:set to 3'b010 when data is active, 3'b100 (i.e. 2'bzz) ow
|
// DQS outputs:set to 3'b010 when data is active, 3'b100 (i.e. 2'bzz) ow
|
output wire o_ddr_dqs;
|
output wire o_ddr_dqs;
|
output reg o_ddr_dm, o_ddr_odt, o_ddr_bus_oe;
|
output reg o_ddr_dm;
|
|
output wire o_ddr_odt, o_ddr_bus_oe;
|
// Address outputs
|
// Address outputs
|
output reg [13:0] o_ddr_addr;
|
output wire [13:0] o_ddr_addr;
|
output reg [2:0] o_ddr_ba;
|
output wire [2:0] o_ddr_ba;
|
// And the data inputs and outputs
|
// And the data inputs and outputs
|
output reg [31:0] o_ddr_data;
|
output reg [31:0] o_ddr_data;
|
input [31:0] i_ddr_data;
|
input [31:0] i_ddr_data;
|
|
|
reg drive_dqs;
|
reg drive_dqs;
|
Line 212... |
Line 213... |
begin
|
begin
|
if (reset_instruction[`DDR_RSTDONE])
|
if (reset_instruction[`DDR_RSTDONE])
|
reset_override <= 1'b0;
|
reset_override <= 1'b0;
|
reset_cmd <= reset_instruction[20:0];
|
reset_cmd <= reset_instruction[20:0];
|
end
|
end
|
always @(posedge i_clk)
|
|
if (i_reset)
|
|
o_ddr_cke <= 1'b0;
|
|
else if ((reset_override)&&(reset_ztimer))
|
|
o_ddr_cke <= reset_instruction[`DDR_CKEBIT];
|
|
|
|
initial reset_ztimer = 1'b0; // Is the timer zero?
|
initial reset_ztimer = 1'b0; // Is the timer zero?
|
initial reset_timer = 17'h02;
|
initial reset_timer = 17'h02;
|
always @(posedge i_clk)
|
always @(posedge i_clk)
|
if (i_reset)
|
if (i_reset)
|
Line 471... |
Line 467... |
assign w_ckREFRst[12: 0] = CKRFC-2-12;
|
assign w_ckREFRst[12: 0] = CKRFC-2-12;
|
assign w_ckREFRst[16:13] = 4'h0;
|
assign w_ckREFRst[16:13] = 4'h0;
|
|
|
always @(posedge i_clk)
|
always @(posedge i_clk)
|
if (reset_override)
|
if (reset_override)
|
refresh_instruction <= { 3'h0, `DDR_NOOP, w_ckREFIn };
|
refresh_cmd <= { 3'h0, `DDR_NOOP, w_ckREFIn };
|
else if (refresh_ztimer)
|
else if (refresh_ztimer)
|
refresh_cmd <= refresh_instruction[20:0];
|
refresh_cmd <= refresh_instruction[20:0];
|
always @(posedge i_clk)
|
always @(posedge i_clk)
|
if (reset_override)
|
if (reset_override)
|
need_refresh <= 1'b0;
|
need_refresh <= 1'b0;
|
Line 649... |
Line 645... |
|
|
maybe_open_next_bank <= (r_pending)
|
maybe_open_next_bank <= (r_pending)
|
&&(bank_status[r_bank][0] == 1'b1)
|
&&(bank_status[r_bank][0] == 1'b1)
|
&&(bank_status[r_nxt_bank][1:0] == 2'b00)
|
&&(bank_status[r_nxt_bank][1:0] == 2'b00)
|
&&(!w_this_maybe_open)&&(!last_maybe_open);
|
&&(!w_this_maybe_open)&&(!last_maybe_open);
|
last_maybe_open <= (w_this_maybe_open);
|
|
|
|
activate_bank_cmd<= { `DDR_ACTIVATE, r_bank, r_row[13:0] };
|
activate_bank_cmd<= { `DDR_ACTIVATE, r_bank, r_row[13:0] };
|
maybe_open_cmd <= { `DDR_ACTIVATE,r_nxt_bank, r_nxt_row[13:0] };
|
maybe_open_cmd <= { `DDR_ACTIVATE,r_nxt_bank, r_nxt_row[13:0] };
|
|
|
|
|