add more comments
This commit is contained in:
parent
22bd2f1118
commit
910a4d00a3
|
|
@ -17,8 +17,8 @@
|
||||||
// Engineer: Angelo C. Jacobo
|
// Engineer: Angelo C. Jacobo
|
||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// NOTE TO SELF are questions which I still need to answer
|
||||||
|
// Comments are continuously added on this RTL for better readability
|
||||||
|
|
||||||
//`define FORMAL_COVER //skip reset sequence to fit in cover depth
|
//`define FORMAL_COVER //skip reset sequence to fit in cover depth
|
||||||
`default_nettype none
|
`default_nettype none
|
||||||
|
|
@ -994,7 +994,7 @@ module ddr3_controller #(
|
||||||
stage2_stall = 0;
|
stage2_stall = 0;
|
||||||
stage2_update = 1;
|
stage2_update = 1;
|
||||||
cmd_odt = 1'b1;
|
cmd_odt = 1'b1;
|
||||||
shift_reg_read_pipe_d[READ_ACK_PIPE_WIDTH-1] = {stage2_aux, 1'b1}; // ack bit is sent to shift_reg
|
shift_reg_read_pipe_d[READ_ACK_PIPE_WIDTH-1] = {stage2_aux, 1'b1}; // ack is sent to shift_reg which will be shifted until the wb ack output
|
||||||
|
|
||||||
//write acknowledge will use the same logic pipeline as the read acknowledge.
|
//write acknowledge will use the same logic pipeline as the read acknowledge.
|
||||||
//This would mean write ack latency will be the same for
|
//This would mean write ack latency will be the same for
|
||||||
|
|
@ -1008,7 +1008,6 @@ module ddr3_controller #(
|
||||||
//outstanding read ack or none on the pipeline. But this is
|
//outstanding read ack or none on the pipeline. But this is
|
||||||
// acceptable in my opinion since this is a pipelined wishbone
|
// acceptable in my opinion since this is a pipelined wishbone
|
||||||
// where the transaction can continue regardless when ack returns
|
// where the transaction can continue regardless when ack returns
|
||||||
///////////// CONTINUTE HERE
|
|
||||||
|
|
||||||
//set-up delay before precharge, read, and write
|
//set-up delay before precharge, read, and write
|
||||||
if(delay_before_precharge_counter_q[stage2_bank] <= WRITE_TO_PRECHARGE_DELAY) begin
|
if(delay_before_precharge_counter_q[stage2_bank] <= WRITE_TO_PRECHARGE_DELAY) begin
|
||||||
|
|
@ -1022,7 +1021,7 @@ module ddr3_controller #(
|
||||||
delay_before_precharge_counter_d[stage2_bank] = WRITE_TO_PRECHARGE_DELAY;
|
delay_before_precharge_counter_d[stage2_bank] = WRITE_TO_PRECHARGE_DELAY;
|
||||||
end
|
end
|
||||||
for(index=0; index < (1<<BA_BITS); index=index+1) begin //the write to read delay applies to all banks (odt must be turned off properly before reading)
|
for(index=0; index < (1<<BA_BITS); index=index+1) begin //the write to read delay applies to all banks (odt must be turned off properly before reading)
|
||||||
delay_before_read_counter_d[index] = WRITE_TO_READ_DELAY + 1;
|
delay_before_read_counter_d[index] = WRITE_TO_READ_DELAY + 1; //NOTE TO SELF: why plus 1?
|
||||||
end
|
end
|
||||||
delay_before_read_counter_d[stage2_bank] = WRITE_TO_READ_DELAY + 1;
|
delay_before_read_counter_d[stage2_bank] = WRITE_TO_READ_DELAY + 1;
|
||||||
delay_before_write_counter_d[stage2_bank] = WRITE_TO_WRITE_DELAY;
|
delay_before_write_counter_d[stage2_bank] = WRITE_TO_WRITE_DELAY;
|
||||||
|
|
@ -1030,9 +1029,8 @@ module ddr3_controller #(
|
||||||
if(COL_BITS <= 10) begin
|
if(COL_BITS <= 10) begin
|
||||||
cmd_d[WRITE_SLOT] = {1'b0, CMD_WR[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank,{{ROW_BITS-32'd11}{1'b0}} , 1'b0 , stage2_col[9:0]};
|
cmd_d[WRITE_SLOT] = {1'b0, CMD_WR[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank,{{ROW_BITS-32'd11}{1'b0}} , 1'b0 , stage2_col[9:0]};
|
||||||
end
|
end
|
||||||
else begin
|
else begin // COL_BITS > 10 has different format from <= 10
|
||||||
cmd_d[WRITE_SLOT] = {1'b0, CMD_WR[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank,{{ROW_BITS-32'd12}{1'b0}} ,
|
cmd_d[WRITE_SLOT] = {1'b0, CMD_WR[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank,{{ROW_BITS-32'd12}{1'b0}} , stage2_col[(COL_BITS <= 10) ? 0 : 10] , 1'b0 , stage2_col[9:0]};
|
||||||
stage2_col[(COL_BITS <= 10) ? 0 : 10] , 1'b0 , stage2_col[9:0]};
|
|
||||||
end
|
end
|
||||||
//turn on odt at same time as write cmd
|
//turn on odt at same time as write cmd
|
||||||
cmd_d[0][CMD_ODT] = cmd_odt;
|
cmd_d[0][CMD_ODT] = cmd_odt;
|
||||||
|
|
@ -1041,7 +1039,6 @@ module ddr3_controller #(
|
||||||
cmd_d[3][CMD_ODT] = cmd_odt;
|
cmd_d[3][CMD_ODT] = cmd_odt;
|
||||||
write_dqs_d=1;
|
write_dqs_d=1;
|
||||||
write_dq_d=1;
|
write_dq_d=1;
|
||||||
// write_data = 1;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
//read request
|
//read request
|
||||||
|
|
@ -1054,19 +1051,18 @@ module ddr3_controller #(
|
||||||
delay_before_precharge_counter_d[stage2_bank] = READ_TO_PRECHARGE_DELAY;
|
delay_before_precharge_counter_d[stage2_bank] = READ_TO_PRECHARGE_DELAY;
|
||||||
end
|
end
|
||||||
delay_before_read_counter_d[stage2_bank] = READ_TO_READ_DELAY;
|
delay_before_read_counter_d[stage2_bank] = READ_TO_READ_DELAY;
|
||||||
delay_before_write_counter_d[stage2_bank] = READ_TO_WRITE_DELAY + 1; //temporary solution since its possible odt to go hig already while reading previously
|
delay_before_write_counter_d[stage2_bank] = READ_TO_WRITE_DELAY + 1; //temporary solution since its possible odt to go high already while reading previously
|
||||||
for(index=0; index < (1<<BA_BITS); index=index+1) begin //the read to write delay applies to all banks (odt must be turned on properly before writing)
|
for(index=0; index < (1<<BA_BITS); index=index+1) begin //the read to write delay applies to all banks (odt must be turned on properly before writing and this delay is for ODT to settle)
|
||||||
delay_before_write_counter_d[index] = READ_TO_WRITE_DELAY + 1;
|
delay_before_write_counter_d[index] = READ_TO_WRITE_DELAY + 1; // NOTE TO SELF: why plus 1?
|
||||||
end
|
end
|
||||||
shift_reg_read_pipe_d[READ_ACK_PIPE_WIDTH-1] = {stage2_aux, 1'b1};
|
shift_reg_read_pipe_d[READ_ACK_PIPE_WIDTH-1] = {stage2_aux, 1'b1}; // ack is sent to shift_reg which will be shifted until the wb ack output
|
||||||
|
|
||||||
//issue read command
|
//issue read command
|
||||||
if(COL_BITS <= 10) begin
|
if(COL_BITS <= 10) begin
|
||||||
cmd_d[READ_SLOT] = {1'b0, CMD_RD[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank, {{ROW_BITS-32'd11}{1'b0}} , 1'b0 , stage2_col[9:0]};
|
cmd_d[READ_SLOT] = {1'b0, CMD_RD[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank, {{ROW_BITS-32'd11}{1'b0}} , 1'b0 , stage2_col[9:0]};
|
||||||
end
|
end
|
||||||
else begin
|
else begin // COL_BITS > 10 has different format from <= 10
|
||||||
cmd_d[READ_SLOT] = {1'b0, CMD_RD[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank, {{ROW_BITS-32'd12}{1'b0}} ,
|
cmd_d[READ_SLOT] = {1'b0, CMD_RD[2:0], cmd_odt, cmd_ck_en, cmd_reset_n, stage2_bank, {{ROW_BITS-32'd12}{1'b0}} , stage2_col[(COL_BITS <= 10) ? 0 : 10] , 1'b0 , stage2_col[9:0]};
|
||||||
stage2_col[(COL_BITS <= 10) ? 0 : 10] , 1'b0 , stage2_col[9:0]};
|
|
||||||
end
|
end
|
||||||
//turn off odt at same time as read cmd
|
//turn off odt at same time as read cmd
|
||||||
cmd_d[0][CMD_ODT] = cmd_odt;
|
cmd_d[0][CMD_ODT] = cmd_odt;
|
||||||
|
|
@ -1606,7 +1602,7 @@ module ddr3_controller #(
|
||||||
// write to address 1 is also a burst of 8 writes, where all lanes has same data written: 128'h80dbcfd275f12c3d
|
// write to address 1 is also a burst of 8 writes, where all lanes has same data written: 128'h80dbcfd275f12c3d
|
||||||
state_calibrate <= ISSUE_READ;
|
state_calibrate <= ISSUE_READ;
|
||||||
end
|
end
|
||||||
// NOTE WHY THERE ARE TWO ISSUE_WRITE
|
// NOTE: WHY THERE ARE TWO ISSUE_WRITE
|
||||||
// address 0 and 1 is written with a deterministic data, if the DQ trace has long delay then the data will be delayed
|
// address 0 and 1 is written with a deterministic data, if the DQ trace has long delay then the data will be delayed
|
||||||
// compared to the write command so the data aligned to the write command for address 0 MIGHT START AT MIDDLE OF EXPECTED OUTPUT
|
// compared to the write command so the data aligned to the write command for address 0 MIGHT START AT MIDDLE OF EXPECTED OUTPUT
|
||||||
// DATA (64'h9177298cd0ad51c1) e.g. the data written might be 64'h[2c3d][9177298cd0ad] where the data written starts
|
// DATA (64'h9177298cd0ad51c1) e.g. the data written might be 64'h[2c3d][9177298cd0ad] where the data written starts
|
||||||
|
|
@ -1636,7 +1632,7 @@ module ddr3_controller #(
|
||||||
calib_stb <= 0;
|
calib_stb <= 0;
|
||||||
end
|
end
|
||||||
// extract burst_0-to-burst_7 data for a specified lane then determine which byte in write_pattern does it starts
|
// extract burst_0-to-burst_7 data for a specified lane then determine which byte in write_pattern does it starts
|
||||||
// NOTE TO ME: all "8" here assume DQ_BITS are 8? parameterize this properly
|
// NOTE TO SELF: all "8" here assume DQ_BITS are 8? parameterize this properly
|
||||||
// data_start_index for a specified lane determine how many bits are off the data from the write command
|
// data_start_index for a specified lane determine how many bits are off the data from the write command
|
||||||
// so for every 1 ddr3 clk cycle delay of DQ from write command, each lane will be 1 burst off:
|
// so for every 1 ddr3 clk cycle delay of DQ from write command, each lane will be 1 burst off:
|
||||||
// e.g. LANE={burst7, burst6, burst5, burst4, burst3, burst2, burst1, burst0} then with 1 ddr3 cycle delay between DQ and command
|
// e.g. LANE={burst7, burst6, burst5, burst4, burst3, burst2, burst1, burst0} then with 1 ddr3 cycle delay between DQ and command
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue