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;// Inputsreg ACLK;reg ARESETN;reg [23:0] S_AXIS_TDATA;reg S_AXIS_TLAST;reg S_AXIS_TVALID;reg M_AXIS_TREADY;// Outputswire 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 InputsACLK = 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 hereendalways #1 ACLK = ~ACLK;always beginbeginS_AXIS_TDATA = 1;S_AXIS_TVALID = 1;#2S_AXIS_TDATA = 2;#2S_AXIS_TDATA = 3;#2;endendalways @(posedge ACLK)beginif(M_AXIS_TVALID == 1)beginM_AXIS_TREADY = 1;endendendmodule
最终仿真波形如下:
对波形分析可以看出如果每个时钟上升沿的TDATA上的数据都是有效数据,那么TVALID可以一直为高,TREADY也可以一直为高,直至一次传输结束,这样的情况效率是很高的,ACLK其实是100MHz,那么传输速度理论可达100M*位宽bit/s 通常位宽32,那么就是100M*4Bytes/s = 400Mbyte/s.