XPM_FIFO_AXIS_SV - 2025.2 English - Parameterized Macro: AXI Memory Mapped (AXI Stream) FIFO - UG1485

Versal Architecture Premium Series Libraries Guide (UG1485)

Document ID
UG1485
Release Date
2025-12-17
Version
2025.2 English

Parameterized Macro: AXI Memory Mapped (AXI Stream) FIFO

  • MACRO_GROUP: XPM
  • MACRO_SUBGROUP: XPM_FIFO
Page-1 Sheet.8 Sheet.11 s_axi_awaddr[AXI_ADDR_WIDTH-1:0] S_AXIS Sheet.17 Sheet.18 m_axi_awready Injectdbiterror_axis Sheet.32 Sheet.33 s_axi_bready Injectbiterror_axis Sheet.83 m_axi_awaddr[AXI_ADDR_WIDTH-1:0] M_AXIS Sheet.87 s_axi_awready almost empty_axit Sheet.96 Sheet.100 Sheet.114 m_axi_wvalid almost_full_axis Sheet.117 m_axi_wlast dbiterr_axis Sheet.118 s_axi_wready prog_empty_axis Sheet.120 m_axi_bready prog_full_axis Sheet.125 Sheet.128 Sheet.129 Sheet.132 Sheet.146 Sheet.147 m_axi_arready m_aclk Sheet.163 m_axi_araddr[AXI_ADDR_WIDTH-1:0] rd_data_count_axis Sheet.176 Sheet.188 Sheet.191 m_axi_rvalid s_aclk Sheet.194 Sheet.195 m_axi_rlast s_aresetn Sheet.230 XPM_FIFO_AXIF XPM_FIFO_AXIS_SV Sheet.233 s_axi_arready sbiterr_axis Sheet.234 Sheet.235 s_axi_rdata[AXI_DATA_WIDTH-1:0] wr_data_count_axis Sheet.236 Sheet.232 X50884-120625 X50884-120625

Introduction

This macro is used to instantiate AXI Stream FIFO.

AXI Stream FIFO is derived from the XPM_FIFO_SYNC and XPM_FIFO_ASYNC. The AXI Stream protocol uses a two-way valid and ready handshake mechanism. The information source uses the valid signal to show when valid data or control information is available on the channel. The information destination uses the ready signal to show when it can accept the data.

Timing Diagrams

Figure 1. Timing for Read and Write Operations to the AXI Stream FIFO

In the timing diagram above, the information source generates a valid signal to indicate when data is available. The destination generates a ready signal to indicate that it can accept data, and transfer occurs only when both the valid and ready signals are High.

Because the AXI Stream FIFO is derived from XPM_FIFO_SYNC and XPM_FIFO_ASYNC, much of the behavior is common between them. The ready signal is generated based on availability of space in the FIFO and is held high to allow writes to the FIFO. The ready signal is pulled Low only when there is no space in the FIFO left to perform additional writes. The valid signal is generated based on availability of data in the FIFO and is held High to allow reads to be performed from the FIFO. The valid signal is pulled Low only when there is no data available to be read from the FIFO. The information signals are mapped to the din and dout bus of Native interface FIFOs. The width of the AXI FIFO is determined by concatenating all of the information signals of the AXI interface. The information signals include all AXI signals except for the valid and ready handshake signals.

The AXI Stream FIFO operates only in First-Word Fall-Through mode. The First-Word Fall-Through (FWFT) feature provides the ability to look ahead to the next word available from the FIFO without issuing a read operation. When data is available in the FIFO, the first word falls through the FIFO and appears automatically on the output data bus.

Module Ports

The vivado_interfaces.svh file includes the following module ports for AXI4, AXI4-Stream, and AXI4-Lite interfaces.

Interface Type Ports
vivado_axis_v1_0 TID, TDEST, TDATA, TSTRB, TKEEP, TLAST, TUSER, TVALID, TREADY
vivado_aximm_v1_0 AWID, AWADDR, AWLEN, AWSIZE, AWBURST, AWLOCK, AWCACHE, AWPROT, AWREGION, AWQOS, AWUSER, AWVALID, WID, WDATA, WSTRB, WLAST, WUSER, WVALID, BREADY, ARID, ARADDR, ARLEN, ARSIZE, ARBURST, ARLOCK, ARCACHE, ARPROT, ARREGION, ARQOS, ARUSER, ARVALID, RREADY, AWREADY, WREADY, BID, BRESP, BUSER, BVALID, ARREADY, RID, RDATA, RRESP, RLAST, RUSER, RVALID
vivado_axi4_lite_v1_0 AWADDR, AWPROT, AWVALID, WDATA, WSTRB, WVALID, BREADY, ARADDR, ARPROT, ARVALID, RREADY, AWREADY, WREADY, BRESP, BVALID, ARREADY, RDATA, RRESP, RVALID
Note: The parameter values passed to the interfaces must match the port mapping in the module instantiations.

Port Descriptions

Port Direction Width Domain Sense Handling if Unused Function
almost_empty_axis Output 1 m_aclk LEVEL_HIGH DoNotCare Almost Empty : When asserted, this signal indicates that only one more read can be performed before the FIFO goes to empty.
almost_full_axis Output 1 s_aclk LEVEL_HIGH DoNotCare Almost Full: When asserted, this signal indicates that only one more write can be performed before the FIFO is full.
dbiterr_axis Output 1 m_aclk LEVEL_HIGH DoNotCare Double Bit Error- Indicates that the ECC decoder detected a double-bit error and data in the FIFO core is corrupted.
S_AXIS Inteface         Slave AXI-Stream interface.
M_AXIS Interface         Master AXI-Steam interface.
prog_empty_axis Output 1 m_aclk LEVEL_HIGH DoNotCare

Programmable Empty- This signal is asserted when the number of words in the FIFO is less than or equal to the programmable empty threshold value.

It is de-asserted when the number of words in the FIFO exceeds the programmable empty threshold value.

prog_full_axis Output 1 s_aclk LEVEL_HIGH DoNotCare

Programmable Full: This signal is asserted when the number of words in the FIFO is greater than or equal to the programmable full threshold value.

It is de-asserted when the number of words in the FIFO is less than the programmable full threshold value.

rd_data_count_axis Output RD_DATA_COUNT_WIDTH m_aclk NA DoNotCare Read Data Count- This bus indicates the number of words available for reading in the FIFO.
sbiterr_axis Output 1 m_aclk LEVEL_HIGH DoNotCare Single Bit Error- Indicates that the ECC decoder detected and fixed a single-bit error.
wr_data_count_axis Output WR_DATA_COUNT_WIDTH s_aclk NA DoNotCare Write Data Count: This bus indicates the number of words written into the FIFO.
injectdbiterr_axis Input 1 s_aclk LEVEL_HIGH 0 Double Bit Error Injection- Injects a double bit error if the ECC feature is used.
injectsbiterr_axis Input 1 s_aclk LEVEL_HIGH 0 Single Bit Error Injection- Injects a single bit error if the ECC feature is used.
m_aclk Input 1 NA EDGE_RISING Active Master Interface Clock: All signals on master interface are sampled on the rising edge of this clock.
s_aclk Input 1 NA EDGE_RISING Active Slave Interface Clock: All signals on slave interface are sampled on the rising edge of this clock.
s_aresetn Input 1 NA LEVEL_LOW Active Active low asynchronous reset.

Design Entry Method

Instantiation Yes
Inference No
IP and IP Integrator Catalog No

Available Attributes

Attribute Type Allowed Values Default Description
CASCADE_HEIGHT DECIMAL 0 to 64 0

0- No Cascade Height, Allow Vivado Synthesis to choose.

1 or more - Vivado Synthesis sets the specified value as Cascade Height.

CDC_SYNC_STAGES DECIMAL 2 to 8 2

Specifies the number of synchronization stages on the CDC path.

Applicable only if CLOCKING_MODE = "independent_clock"

CLOCKING_MODE STRING "common_clock", "independent_clock" "common_clock" Designate whether AXI Stream FIFO is clocked with a common clock or with independent clocks-
  • "common_clock"- Common clocking; clock both write and read domain s_aclk
  • "independent_clock"- Independent clocking; clock write domain with s_aclk and read domain with m_aclk
ECC_MODE STRING "no_ecc", "en_ecc" "no_ecc"
  • "no_ecc" - Disables ECC
  • "en_ecc" - Enables both ECC Encoder and Decoder
NOTE: ECC_MODE should be "no_ecc" if FIFO_MEMORY_TYPE is set to "auto". Violating this may result incorrect behavior.
EN_SIM_ASSERT_ERR STRING String "warning"
  • "warning" - Report warning message for FIFO overflow and underflow in simulation.
  • "error" - Report error message for FIFO overflow and underflow in simulation.
  • "fatal" - Report fatal message for FIFO overflow and underflow in simulation.
FIFO_DEPTH DECIMAL 16 to 4194304 2048 Defines the AXI Stream FIFO Write Depth, must be power of two NOTE: The maximum FIFO size (width x depth) is limited to 150-Megabits.
FIFO_MEMORY_TYPE STRING "auto", "block", "distributed", "ultra" "auto" Designate the fifo memory primitive (resource type) to use-
  • "auto"- Allow Vivado Synthesis to choose
  • "block"- Block RAM FIFO
  • "distributed"- Distributed RAM FIFO
  • "ultra"- URAM FIFO
NOTE: There may be a behavior mismatch if Block RAM or Ultra RAM specific features, like ECC or Asymmetry, are selected with FIFO_MEMORY_TYPE set to "auto".
PACKET_FIFO STRING "false", "true" "false"
  • "true"- Enables Packet FIFO mode
  • "false"- Disables Packet FIFO mode
PROG_EMPTY_THRESH DECIMAL 5 to 4194301 10

Specifies the minimum number of read words in the FIFO at or below which prog_empty is asserted.

  • Min_Value = 5
  • Max_Value = FIFO_WRITE_DEPTH - 5
NOTE: The default threshold value is dependent on default FIFO_WRITE_DEPTH value. If FIFO_WRITE_DEPTH value is changed, ensure the threshold value is within the valid range though the programmable flags are not used.
PROG_FULL_THRESH DECIMAL 5 to 4194301 10

Specifies the maximum number of write words in the FIFO at or above which prog_full is asserted.

  • Min_Value = 5 + CDC_SYNC_STAGES
  • Max_Value = FIFO_WRITE_DEPTH - 5
NOTE: The default threshold value is dependent on default FIFO_WRITE_DEPTH value. If FIFO_WRITE_DEPTH value is changed, ensure the threshold value is within the valid range though the programmable flags are not used.
RD_DATA_COUNT_WIDTH DECIMAL 1 to 23 1 Specifies the width of rd_data_count_axis. To reflect the correct value, the width should be log2(FIFO_DEPTH)+1.
RELATED_CLOCKS DECIMAL 0 to 1 0

Specifies if the s_aclk and m_aclk are related having the same source but different clock ratios.

Applicable only if CLOCKING_MODE = "independent_clock"
SIM_ASSERT_CHK DECIMAL 0 to 1 0

0- Disable simulation message reporting. Messages related to potential misuse will not be reported.

1- Enable simulation message reporting. Messages related to potential misuse will be reported.

TDATA_WIDTH DECIMAL 8 to 2048 32 Defines the width of the TDATA port, s_axis_tdata and m_axis_tdata NOTE: The maximum FIFO size (width x depth) is limited to 150-Megabits.
TDEST_WIDTH DECIMAL 1 to 32 1 Defines the width of the TDEST port, s_axis_tdest and m_axis_tdest
TID_WIDTH DECIMAL 1 to 32 1 Defines the width of the ID port, s_axis_tid and m_axis_tid
TUSER_WIDTH DECIMAL 1 to 4086 1 Defines the width of the TUSER port, s_axis_tuser and m_axis_tuser
USE_ADV_FEATURES STRING String "1000"

Enables almost_empty_axis, rd_data_count_axis, prog_empty_axis, almost_full_axis, wr_data_count_axis, prog_full_axis sideband signals.

  • Setting USE_ADV_FEATURES[1] to 1 enables prog_full flag; Default value of this bit is 0
  • Setting USE_ADV_FEATURES[2] to 1 enables wr_data_count; Default value of this bit is 0
  • Setting USE_ADV_FEATURES[3] to 1 enables almost_full flag; Default value of this bit is 0
  • Setting USE_ADV_FEATURES[9] to 1 enables prog_empty flag; Default value of this bit is 0
  • Setting USE_ADV_FEATURES[10] to 1 enables rd_data_count; Default value of this bit is 0
  • Setting USE_ADV_FEATURES[11] to 1 enables almost_empty flag; Default value of this bit is 0
WR_DATA_COUNT_WIDTH DECIMAL 1 to 23 1 Specifies the width of wr_data_count_axis. To reflect the correct value, the width should be log2(FIFO_DEPTH)+1.

System Verilog Instantiation Template

// xpm_fifo_axis_sv 	: In order to incorporate this function into the design,
//   System Verilog     : the following instance declaration needs to be placed
//   instance    		: in the body of the design code.  The instance name
//  declaration  		: (xpm_fifo_axis_sv_inst) and/or the port declarations within the
//     code      		: parenthesis may be changed to properly reference and
//               		: connect this function to the design.  All inputs
//               		: and outputs must be connected.

// -------------- Begin Cut here for INTERFACE Include ------- // INCLUDE_TAG
`include "vivado_interfaces.svh" 
// -- INCLUDE_TAG_END ------ End INTERFACE Include ------------

// -------------- Begin Cut here for INTERFACE Template ------- // INTF_TAG 
// Default parameter used by the module are for S_AXI
vivado_axis_v1_0 #(
    .TDATA_NUM_BYTES(1),
    .TDEST_WIDTH(4),
    .TID_WIDTH(6)
) S_AXIS();

//  -- INTF_TAG_END -------------- End INTERFACE Template ------------------ 

//  <-----Cut code below this line---->
// xpm_fifo_axis_sv: AXI Stream FIFO
// Xilinx Parameterized Macro, version 2025.2

xpm_fifo_axis_sv #(
    .TDATA_WIDTH(TDATA_NUM_BYTES*8),     // DECIMAL
    .TDEST_WIDTH(TDEST_WIDTH),            // DECIMAL
    .TID_WIDTH(TID_WIDTH),                // DECIMAL
    .TUSER_WIDTH(1),                      // DECIMAL
    .CASCADE_HEIGHT(0),                   // DECIMAL
    .CDC_SYNC_STAGES(2),                  // DECIMAL
    .CLOCKING_MODE("common_clock"),      // String
    .ECC_MODE("no_ecc"),                  // String
    .EN_SIM_ASSERT_ERR("warning"),       // String
    .FIFO_DEPTH(2048),                   // DECIMAL
    .FIFO_MEMORY_TYPE("auto"),           // String
    .PACKET_FIFO("false"),               // String
    .PROG_EMPTY_THRESH(10),              // DECIMAL
    .PROG_FULL_THRESH(10),               // DECIMAL
    .RD_DATA_COUNT_WIDTH(1),             // DECIMAL
    .RELATED_CLOCKS(0),                  // DECIMAL
    .SIM_ASSERT_CHK(0),                  // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
    .USE_ADV_FEATURES("1000"),           // String
    .WR_DATA_COUNT_WIDTH(1)              // DECIMAL
)
xpm_fifo_axis_sv_inst (
    .almost_empty_axis(almost_empty_axis),   // 1-bit output: Almost Empty : When asserted, this signal indicates that only one more read can be
                                             // performed before the FIFO goes to empty.

    .almost_full_axis(almost_full_axis),     // 1-bit output: Almost Full: When asserted, this signal indicates that only one more write can be
                                             // performed before the FIFO is full.

    .dbiterr_axis(dbiterr_axis),             // 1-bit output: Double Bit Error- Indicates that the ECC decoder detected a double-bit error and data
                                             // in the FIFO core is corrupted.

    .S_AXIS (S_AXIS.slave),

    .M_AXIS (M_AXIS.master),

    .prog_empty_axis(prog_empty_axis),       // 1-bit output: Programmable Empty- This signal is asserted when the number of words in the FIFO is
                                             // less than or equal to the programmable empty threshold value. It is de-asserted when the number of
                                             // words in the FIFO exceeds the programmable empty threshold value.

    .prog_full_axis(prog_full_axis),         // 1-bit output: Programmable Full: This signal is asserted when the number of words in the FIFO is
                                             // greater than or equal to the programmable full threshold value. It is de-asserted when the number
                                             // of words in the FIFO is less than the programmable full threshold value.

    .rd_data_count_axis(rd_data_count_axis), // RD_DATA_COUNT_WIDTH-bit output: Read Data Count- This bus indicates the number of words available
                                             // for reading in the FIFO.

    .sbiterr_axis(sbiterr_axis),             // 1-bit output: Single Bit Error- Indicates that the ECC decoder detected and fixed a single-bit
                                             // error.

    .wr_data_count_axis(wr_data_count_axis), // WR_DATA_COUNT_WIDTH-bit output: Write Data Count: This bus indicates the number of words written
                                             // into the FIFO.

    .injectdbiterr_axis(injectdbiterr_axis), // 1-bit input: Double Bit Error Injection- Injects a double bit error if the ECC feature is used.

    .injectsbiterr_axis(injectsbiterr_axis), // 1-bit input: Single Bit Error Injection- Injects a single bit error if the ECC feature is used.

    .m_aclk(m_aclk),                         // 1-bit input: Master Interface Clock: All signals on master interface are sampled on the rising edge
                                             // of this clock.

    .s_aclk(s_aclk),                         // 1-bit input: Slave Interface Clock: All signals on slave interface are sampled on the rising edge
                                             // of this clock.

    .s_aresetn(s_aresetn)                    // 1-bit input: Active low asynchronous reset.
);

// End of xpm_fifo_axis_sv_inst instantiation