一. AXI-Lite接口Ipcore的生成
Xilinx开发工具EDK和Vivado都可自动生成AXI-Lite、AXI-Stream主从模式接口。关于生成Ipcore的过程可参考下面这两篇文章,这里就不在赘述:
http://comm.chinaaet.com/adi/blogdetail/37170.html
http://www.cnblogs.com/surpassal/archive/2012/10/09/Zynq_Lab4.html
这里只说明一下有一行语句的理解:
for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )
if ( S_AXI_WSTRB[byte_index] == 1 ) begin
// Respective byte enables are asserted as per write strobes
// Slave register 1
slv_reg1[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];
end
这是Verilog2001新加的语法:Verilog-2001向量部分选择
[base_expr +: width_expr] //positive offset
[base_expr -: width_expr] //negative offset
其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。例如:
reg [63:0] word;
reg [3:0] byte_num; //a value from 0 to 7
wire [7:0] byteN = word[byte_num*8 +: 8];
如果byte_num的值为4,则word[39:32]赋值给byteN。
二. AXI 4总线协议解析
AXI4:主要面向高性能地址映射通信的需求;
AXI4-Lite:是一个简单地吞吐量地址映射性通信总线;
AXI4-Stream:面向高速流数据传输;
AXI4总线分为主、从两端,两者间可以连续的进行通信。
AXI 4总线采用READY,VALID握手通信机制,主设备收到从设备发送的READY,主设备将数据和VALID信号同时发送给从设备。
AXI 4-Lite所有的猝发长度为1,数据总线宽度为32位或64位
AXI 4-Stream数据总线宽度:8、16、32、64、128、256、512和1024位;
axi总线分为五个通道:
--读地址通道,包含ARVALID,ARADDR, ARREADY信号;
--写地址通道,包含AWVALID,AWADDR,AWREADY信号;
--读数据通道,包含RVALID,RDATA, RREADY, RRESP信号;
--写数据通道,包含WVALID, WDATA,WSTRB,WREADY信号;
--写应答通道,包含BVALID,BRESP, BREADY信号;
AWLEN,猝发长度,是一个猝发中传送的数据个数,传送个数=AWLEN+1;如AWLEN=5,传送6个数据。
AWSIZE,猝发大小,猝发中每个传送的数据的大小,字节数为=2^AWSIZE;如AWSIZE=0,每个数据是1个字节,AWSIZE=3,每个数据大小是8个字节
axis信号分为:
--TREADY信号:从告诉主做好传输准备;
--TVALID信号:主告诉从数据传输有效;
--TLAST信号:主告诉从该次传输为突发传输结尾;
--TDATA信号:数据,可选宽度32,64,128,256bit
--TSTRB信号:为1的bit为对应tdata有效字节,宽度为tdata/8
--TUSER信号 :用户定义信号,宽度为128bit
--ACLK信号:总线时钟,上升沿有效;
--ARESETn信号:总线复位,低电平有效;
AXI 4-Stream的信号一般表示成:s_axis_s2mm_t*格式
Valid信号必须保持有效直到ready信号有效。
读操作:
写操作:
在写操作中,主设备往从设备中写入AWADDR和AWVALID,然后主设备并没有等待从设备的AWREADY,而是继续发送WVALID和WDATA,当从设备回应AWREADY有效后,紧接着从设备发送WREADY表示从设备准备好接受数据,当WVALID和WREADY都为高电平是数据写入从设备。主设备发送的AWVALID和WVALID要有重叠区。
红色竖线处,将圈圈里的数据写给对应参数。