• AXI Stream传输协议的一些研究与XPS外设模板


    AXI Stream 是 AMBA AXI4协议中的一部分,主要是高效的流传输.

    包含的信号有

    ACLK 时钟

    ARESET 复位

    TDATA 数据

    TVALID 

    TREADY

    TSTRB

    TKEEP

    TLAST

    TID

    TDEST

    TUSER

    在XPS中Hardware-->Create or Import Peripheral

    具体设置如下三图

    选择 AXI4-Stream

    这两个数值可以任意设置,不过最好设置成相等的.具体原因,看代码就知道了.

    把这三项全打上勾,因为我们要用ISE进行仿真,而且我本人对VHDL几乎算一窍不通,对于Verilog还稍微能看懂一点,所以生成的IP核的语言选择Verilog

    创建好了这个用户IP之后

    可以在ISE中对其进行仿真.

    创建好的IP的/hdl/Verilog文件夹中有IP的源代码,而devl/projnav文件夹中有ise工程

    打开ISE工程,

    选择到Simulation,并创建测试波形输入

    我自己写的testbench如下:(我把S_AXIS_TDATA宽度改成24bit了,读取和输出的num都改成了3)

    `timescale 1ns / 1ps
    
    ////////////////////////////////////////////////////////////////////////////////
    // Company: 
    // Engineer:
    //
    // Create Date:   10:00:35 04/20/2014
    // Design Name:   axis_24to32
    // Module Name:   G:/Atyls_hdmi_osd2/pcores/axis_24to32_v1_00_a/devl/projnav/testbench.v
    // Project Name:  axis_24to32
    // Target Device:  
    // Tool versions:  
    // Description: 
    //
    // Verilog Test Fixture created by ISE for module: axis_24to32
    //
    // Dependencies:
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    ////////////////////////////////////////////////////////////////////////////////
    
    module testbench;
    
        // Inputs
        reg ACLK;
        reg ARESETN;
        reg [23:0] S_AXIS_TDATA;
        reg S_AXIS_TLAST;
        reg S_AXIS_TVALID;
        reg M_AXIS_TREADY;
    
        // Outputs
        wire S_AXIS_TREADY;
        wire M_AXIS_TVALID;
        wire [31:0] M_AXIS_TDATA;
        wire M_AXIS_TLAST;
    
        // Instantiate the Unit Under Test (UUT)
        axis_24to32 uut (
            .ACLK(ACLK), 
            .ARESETN(ARESETN), 
            .S_AXIS_TREADY(S_AXIS_TREADY), 
            .S_AXIS_TDATA(S_AXIS_TDATA), 
            .S_AXIS_TLAST(S_AXIS_TLAST), 
            .S_AXIS_TVALID(S_AXIS_TVALID), 
            .M_AXIS_TVALID(M_AXIS_TVALID), 
            .M_AXIS_TDATA(M_AXIS_TDATA), 
            .M_AXIS_TLAST(M_AXIS_TLAST), 
            .M_AXIS_TREADY(M_AXIS_TREADY)
        );
    
        initial begin
            // Initialize Inputs
            ACLK = 0;
            ARESETN = 0;
            S_AXIS_TDATA = 0;
            S_AXIS_TLAST = 0;
            S_AXIS_TVALID = 0;
            M_AXIS_TREADY = 0;
    
            // Wait 100 ns for global reset to finish
            #94;
          ARESETN = 1;  
            // Add stimulus here
    
        end
        
        always #1 ACLK = ~ACLK;
        
        always begin
            begin
                S_AXIS_TDATA = 1;
                S_AXIS_TVALID = 1;
                #2
                S_AXIS_TDATA = 2;
                #2
                S_AXIS_TDATA = 3;
                #2;
            end
        end
        
        always @(posedge ACLK)begin
            if(M_AXIS_TVALID == 1)
                begin
                    M_AXIS_TREADY = 1;
                end
        end
          
    endmodule

    最终仿真波形如下:

    对波形分析可以看出如果每个时钟上升沿的TDATA上的数据都是有效数据,那么TVALID可以一直为高,TREADY也可以一直为高,直至一次传输结束,这样的情况效率是很高的,ACLK其实是100MHz,那么传输速度理论可达100M*位宽bit/s 通常位宽32,那么就是100M*4Bytes/s = 400Mbyte/s.

  • 相关阅读:
    poj 2362 Square (dfs+剪枝)
    三种素数筛法汇总
    2009’河北省高教网络技能大赛一网站建设部分
    寒假每一天
    寒假每一天
    寒假每一天
    寒假每一天
    统计文本文件
    寒假每一天
    寒假每一天
  • 原文地址:https://www.cnblogs.com/elitezhe/p/axi-stream-xps.html
Copyright © 2020-2023  润新知