1、设计方案
该模块是AXI接口与DDR3控制器的访问接口,属于AXI slave。主机AXI master通过发送对应的读写地址和对应的读写数据,这些地址和数据通过异步FIFO缓存模块进行跨时钟域的处理和起到提高总线访问带宽的作用。
axi接口模块将写命令通道的写地址(row、bank、col)、axi_awburst、axi_awsize、axi_awlength、axi_awid、读写标志拼接成一个数据帧存到AW_FIFO中;将读命令通道的读地址(row、bank、col)、axi_arsize、axi_arlength、axi_arid拼成一个数据帧存到AR_FIFO中;将写数据通道的wdata、wstrb、wlast拼成一个数据帧存到WFIFO中;将读缓冲模块的读数据rdata和rlast拼成一个数据帧存到RFIFO中。为了支持AXI outstanding功能,写响应通道的w_fifo在接收完一个Trans的数据后,检测到wlast信号,立即返回一个写响应bresp 和 写响应ID,以便axi slave能够接收下一个TRANSTIONS。
AWFIFO 的数据输入:{写标志(1’b1),axi_awid_i,axi_awlen_i,axi_awsize_i,axi_awburst_i,command_valid,complete,axi_awaddr_i[28:0]};
ARFIFO的数据输入:={读标志(1’b0),axi_arid_i,axi_arlen_i,axi_arsize_i,axi_arburst_i,command_valid,axi_araddr_i[29:0]};
WFIFO的数据输入:{axi_wdata_i,axi_wstrb_i,axi_wlast_i};
RFIFO的数据输入(这是DDR3控制器送过来的):wire [132:0] ram_r_w ={rdata_id,rdata_i,rdata_last};
深度依次为:16、16、16*256、256;
2、axi接口协议,AMBA4:
后续可能增加功能,采用AXI_LITE或者APB对信号寄存器进行配置;AXIDMA进行访问;
3、axi outstanding功能
outstanding功能是指主机可以连续发送N个读写命令到AXI总线上,而无需等待一个写响应或者读数据返回才发送下一个命令。axi cache功能是指总线缓冲功能,即本设计采用异步FIFO缓冲多个axi translation;
假设没有outstanding、axi cache功能,则总线的行为是:
读操作:读地址命令->等待数据返回->读地址命令->等待数据返回;
写操作:写地址命令-写数据-写响应返回-写地址命令-写数据-写响应返回。
假设有outstanding功能和axi cache功能时:
读操作:连续发送 N 个读命令,发送过程中如果有数据返回,返回了几组数据,那么仍然可以再发几个命令;如果没有数据返回,则等待数据返回后再发命令。 “在路上”的读命令或读数据最多可以为 N 个/N 组。因此通过提高 Outstanding 能力,弥补 “路上”(总线)引入的延时。从而提高效率。
写操作: 可以连续发多组交易, 一组地址/数据全部存入 FIFO 后返回写响应,当写地址异步 FIFO 缓冲空间已满时,将写地址 ready 信号拉低,不再接收写命令。
本文设计的内存控制器采用 AXI 读 Outstanding 功能, Outstanding 能力 N=16;以及 AXI 读写 Bufferable 功能(Ax_cache=4’b0011),提高写效率。 具体设计方法如
下: DDRC 中设置异步 FIFO,使写命令、写数据、读命令在 FIFO 以及 DDRC 系统内部排队,读访问时有一个计数器进行计数。 当 wlast 信号拉高时(即一组写数据全部存入 FIFO)返回写响应(bresp), 若写地址异步 FIFO 已满时, awready 拉低,不再接收写命令。 当读命令进入读命令异步 FIFO(ar_afifo)后,读命令计数器 cnt_rd 加1,待返回一个读数据和 rlast 信号时, cnt_rd 减 1, 若 cnt_rd 计数到最大值 63 时,arready 拉低,不再接收读命令。 AXI 读 Outstanding 时序如图 3.6 所示,黑色线是主机发送的 AXI 信号,红色线是从机发送的 AXI 信号。 因为总线发送第一个读命令到返回第一个读数据大约需要 300ns,因此 Outstanding 能力设计为 64, 在效率和资源利用率方面达到平衡。