深入了解DDR3(AXI接口例程)的知识点笔记
本文以7035开发板中的DDR3master例程对DDR3中所涉及的知识点梳理下笔记。
①DDR支持的突发长度是2,4,8。即如果芯片的数据位宽是16bit的话那么接口数据位宽是32bit,64bit以及128bit。因为 L-Bank一次就存取两倍于芯片位宽的数据,所以芯片至少也要进行两次传输才可以。我认为芯片位宽就是DDR3中bank中每个地址存储的数据的位宽,这个是芯片型号以及确定的,是DDR3存储的最小单位位宽。而根据突发长度,其外部接口位宽可以有3种。
②根据DDR突发传输类型的选择,当选择类型是INCR(没传输一次地址增加一次)其突发长度在1-256之间(AXI中规定)但是DDR是2,4,8。
③每次突发传输一次都要握手。握手成功后将要传输的数据放在数据通道的总线上。根据7035例程17_1。
———————————————————————————————————————————
assign M_AXI_AWLEN[7:0] = reg_w_len[7:0];
assign WR_FIFO_RE = rd_first_data | (reg_wvalid & ~WR_FIFO_EMPTY & M_AXI_WREADY & rd_fifo_enable);
S_WD_PROC: begin
if(M_AXI_WREADY & ~WR_FIFO_EMPTY) begin
if(reg_w_len[7:0] == 8'd0) begin
wr_state <= S_WR_WAIT;
reg_wvalid <= 1'b0;
reg_w_stb[7:0] <= 8'h00;
end else begin
reg_w_len[7:0] <= reg_w_len[7:0] -8'd1;
end
end
end
.WR_ADRS ({wr_burst_addr,3'd0} ),
reg_wr_adrs[31:0] <= WR_ADRS[31:0];
assign M_AXI_AWADDR[31:0] = reg_wr_adrs[31:0];
S_WR_WAIT: begin
if(M_AXI_BVALID) begin
reg_wr_status[1:0] <= reg_wr_status[1:0] | M_AXI_BRESP[1:0];
if(reg_w_last) begin
wr_state <= S_WR_DONE;
end else begin
wr_state <= S_WA_WAIT;
reg_wr_adrs[31:0] <= reg_wr_adrs[31:0] + 32'd2048;
end
end
end