Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析

一. 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向量部分选择
在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。 

   
      [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信号有效


 读操作:

Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析_第1张图片


 Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析_第2张图片

    在读交易中,主设备先发送ARADDR和ARVALID给从设备,从设备回发ARREADY,通知主设备该地址有效,当ARVALID和ARREADY都为高电平时,主设备发出RREADY,表示主设备准备好接受读数据和相应信号了。从设备发送RVALID、RDATA以及RRESP,当RVALID和RREADY都为高电平时,数据被写入主设备。

 


   写操作:

Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析_第3张图片

             Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析_第4张图片

 

       在写操作中,主设备往从设备中写入AWADDR和AWVALID,然后主设备并没有等待从设备的AWREADY,而是继续发送WVALID和WDATA,当从设备回应AWREADY有效后,紧接着从设备发送WREADY表示从设备准备好接受数据,当WVALID和WREADY都为高电平是数据写入从设备。主设备发送的AWVALID和WVALID要有重叠区。

Vivado下产生AXI-Lite Ipcore及AXI-Lite源代码解析_第5张图片

        红色竖线处,将圈圈里的数据写给对应参数。


你可能感兴趣的:(FPGA/Verilog,Vivado)