目录
AXI4系列总线简介
Advanced eXtensible Interface (AXI)是ARM的Advanced Micro controller Bus Architecture(AMBA)总线的一部分,第一个版本的AXI在2003年的AMBA3.0中被提出,在2010年的AMBA4.0中提出了第二个版本AXI4。
AXI4包含三个类型:
AXI4:主要面向高性能地址映射通信的需求;
AXI4-Lite(axi):是AXI的简化版本,例如可以用来进行控制与状态寄存器的配置与读取。
AXI4-stream(axis):是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。在vivado的IPcatalog里可以看到很多IP核的数据传输是基于AXI4或AXI4-stream。
参考文档:
ug1037-vivado-axi-reference-guide.pdf:介绍AXI对xilinx的IP核以及Device的支持特征。
IHI0022D_amba_axi_protocol_spec.pdf: AXI4、AXI4-lite的协议内容。(在http://www.amba.com可以下载到)
IHI0051A_amba4_axi4_stream_v1_0_protocol_spec.pdf:AXI4-stream的协议内容。(在http://www.amba.com可以下载到)
AXI4-lite总线
其包含了5个独立的传输通道:读地址通道、读数据通道、写地址通道、写数据通道、写响应通道。如Table B1-1。
注:我在使用vivado 的JESD204B的jesd core时配置IP核的参数需要使用AXI4-lite的配置接口(Table B1-1中的awport,arport没有用到),但是其example design只给出仿真时序,因此我又写出来了可综合的Verilog设计,主要思想是状态机控制。
AXI是基于VALID/READY的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己已经接受信息。
通道信号时序要求
通道握手信号:每个通道有自己的xVALID/xREADY握手信号对。
写地址通道:当主机驱动有效awaddr与awvalid时,保持有效状态,直到主机在时钟上升沿采样到从机的awready有效后,可以将awaddr与awvalid无效。
写数据通道:当主机驱动有效wdata与wvalid时,保持有效状态,直到主机在时钟上升沿采样到从机的wready有效后,可以将wdata与wvalid无效。
写响应通道:在写地址与写数据均传输后且生效后,从机有效写响应信号bresp与bvalid,直到时钟上升沿采样到主机的bready信号。
读地址通道:当主机驱动有效araddr与arvalid时,保持有效状态,直到主机在时钟上升沿采样到从机的arready有效后,可以将araddr与arvalid无效。
读数据通道:主机传输完地址后就将rready有效表示准备好接收读数据,从机接收到地址后传输所读地址的数据,从机驱动有效rdata与rvalid、rresp,从机在时钟上升沿采样到主机的rready有效后,可以将rdata与rvalid、rresp无效,同时主机采样到有效的rdata与rvalid、rresp后下一个时钟也会使rready无效。
综上可以用状态机来控制读写的过程。
读写的时序图
![](https://i-blog.csdnimg.cn/blog_migrate/27b066bd834580b880d47e53a9d64ea4.png)
写时序的可综合程序
module axi_write(
input s_axi_aclk,
input s_axi_aresetn,
input s_axi_awready,
input s_axi_wready,
input s_axi_bvalid,
input [1:0] s_axi_bresp,
output reg [31:0] s_axi_awaddr,
output reg s_axi_awvalid,
output reg [31:0] s_axi_wdata,
output reg s_axi_wvalid,
output reg s_axi_bready
);
localparam pLanes = 2;
// F = 1 K = 20
localparam pF = 1;///
localparam pK = 20;///
// Setup the link configuration parameters.
localparam [7:0] pDID = 8'h55;//不变
localparam [3:0] pADJCNT = 4'h0;//不变
localparam [3:0] pBID = 4'hA;//不变
localparam pADJDIR = 1'b0;//不变
localparam pPHADJ = 1'b0;//不变
localparam pSCR = 1'b0;/扰码
localparam [4:0] pL = (pLanes-1);///
localparam [7:0] pM = 3;///
localparam [1:0] pCS = 2'd0;
localparam [4:0] pN = 5'd15;//
localparam [4:0] pNt = 5'd15;/
localparam [2:0] pSUBCV = 3'b001;//不变
localparam [2:0] pJESDV = 3'b001;//不变
localparam [4:0] pS = 5'd0;/
localparam pHD = 1'b0;/
localparam [4:0] p