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.