AXI4-STREAM DATA FIFO的学习
第一次使用这个IP核,fifo配置图如下:(first in first out)
vivado版本为2019.2
Component Name:器件名字
FIFO depth:FIFO的深度,可以在16到32768之间变化,具体情况视情况而定,但要是2的n次幂。
Enable packet mode:使能包模式:此项设定需要TLAST信号被使能。FIFO的操作在包模式下被修改为存储传送的数据,直到TLAST信号被响应。当TLAST信号被响应或者FIFO满了,存储的数据将被送至AXI4-Stream master interface.
ACLKEN Conversion Mode:1.此选项用来选择ACLKEN信号的转换模式。;2.None 没有和这个IP相关的ACLKEN 信号相关;3.S AXIS Only 有一个与S_AXIS_ACLKEN 相关联的 S_AXIS_ACLK信号,但没有M_AXIS_ACLKEN信号;4.M AXIS Only 有一个与M_AXIS_ACLKEN 相关联的 M_AXIS_ACLK信号,但没有S_AXIS_ACLKEN 信号;5.S AXIS & M AXIS 两个时钟都有与它们相关的ACLKEN信号。
Signal Properties:信号特性:可以看到,软件可以自动计算,当然我们也可以手动修改。
TDATA width (bytes)参数指定axi4流上TData信号的宽度(以字节为单位接口。此参数是一个整数,可以从0到512不等。设置为0以忽略TDATA信号。如果省略了tdata信号,则tkeep和tstb信号也会省略。如图设置为4则可以看到位宽为32bit。
Enable TSTRB:是否使能TSTRB信号,只有当TData width(bytes)参数大于0时,才能启用此选项。
Enable TKEEP:是否使能TKEEP信号,只有当TData width(bytes)参数大于0时,才能启用此选项。
Enable TLAST:是否使能TLAST信号,只有当TData width(bytes)参数大于0时,才能启用此选项。
TID width (bits):用来指定TID信号的位宽,0为忽略,1~32为相应的位宽。
TDEST width (bits):用来指定TDEST 信号的位宽,0为忽略,1~32为相应的位宽。
TUSER Width (bits):用来指定TUSER 信号的位宽,0为忽略,1~32为相应的位宽。
关于这些信号的具体含义以及时序关系,可以通过仿真观察。
通过仿真可以看出只有当 S_AXIS_tvalid和S_AXIS_tready同时为高时,数据才能写入,而S_AXIS_tready表示FIFO非满,S_AXIS_tvalid由用户控制。
testbench如下:
module sim;
wire [7:0]M_AXIS_tdata;
reg M_AXIS_tready = 0;
wire M_AXIS_tvalid;
reg [7:0]S_AXIS_tdata = 0;
wire S_AXIS_tready;
reg S_AXIS_tvalid = 0;
reg s_axis_aclk = 0;
reg s_axis_aresetn = 1;
always #10 s_axis_aclk = ~s_axis_aclk;
initial begin
#20 s_axis_aresetn = 0;
// #20 s_axis_aresetn = 1;
#40 S_AXIS_tvalid = 1;
#40 S_AXIS_tdata = 16;
#40 S_AXIS_tvalid = 0;
#60 M_AXIS_tready = 1;
end
design_1_wrapper sss
(M_AXIS_tdata,
M_AXIS_tready,
M_AXIS_tvalid,
S_AXIS_tdata,
S_AXIS_tready,
S_AXIS_tvalid,
s_axis_aclk,
s_axis_aresetn);
endmodule