AR# 61620

Vivado IP Packager - How can I create an option for multiple AXI slave interfaces on my custom IP?


How can I create an option for multiple AXI slave interfaces on my custom IP?


This can be achieved with the following steps:

  1. The initial VHDL/Verilog code must contain multiple interfaces in the port map to reference, the example below is for two interfaces:

        -- Slave side
        s00_axis_tdata    : in  std_logic_vector(C_AXIS_TDATA_WIDTH-1 downto 0);
        s00_axis_tvalid   : in  std_logic_vector(0 downto 0);

        s00_axis_tready   : out std_logic_vector(0 downto 0);
        s00_axis_tstrb    : in  std_logic_vector(C_AXIS_TDATA_WIDTH/8-1 downto 0);

        s00_axis_tkeep    : in  std_logic_vector(C_AXIS_TDATA_WIDTH/8-1 downto 0);
        s00_axis_tlast    : in  std_logic_vector(0 downto 0);

        s00_axis_tid      : in  std_logic_vector(C_AXIS_TID_WIDTH-1 downto 0);
        s00_axis_tdest    : in  std_logic_vector(C_AXIS_TDEST_WIDTH-1 downto 0);

        s00_axis_tuser    : in  std_logic_vector(C_AXIS_TUSER_WIDTH-1 downto 0);

        -- Slave side

        s01_axis_tdata    : in  std_logic_vector(C_AXIS_TDATA_WIDTH-1 downto 0);
        s01_axis_tvalid   : in  std_logic_vector(0 downto 0);
        s01_axis_tready   : out std_logic_vector(0 downto 0);

        s01_axis_tstrb    : in  std_logic_vector(C_AXIS_TDATA_WIDTH/8-1 downto 0);
        s01_axis_tkeep    : in  std_logic_vector(C_AXIS_TDATA_WIDTH/8-1 downto 0);

        s01_axis_tlast    : in  std_logic_vector(0 downto 0);

        s01_axis_tid      : in  std_logic_vector(C_AXIS_TID_WIDTH-1 downto 0);

        s01_axis_tdest    : in  std_logic_vector(C_AXIS_TDEST_WIDTH-1 downto 0);

        s01_axis_tuser    : in  std_logic_vector(C_AXIS_TUSER_WIDTH-1 downto 0);

    When packaging the IP, in the "IP Ports and Interfaces" Tab, you can configure two separate interfaces for the ports as shown.


  2. Once the interfaces are created, you can configure the interface to be visible for certain parameterization.
    You will have to enable whether the port/interface will be optionally present to access the enablement expression box.
    You can place the enablement on the interface and it will infer the same enablement on the child ports.
    To do this, you will have to edit the interface and select that the interface is optionally present, as shown below:


  3. Now that the enablement expression textbox is available, you can set how the interface will be present based on the parameter settings.
    For this case, since this is the 2nd interface, we will only want it shown if the parameter selection was 2 or larger.
    Therefore, the enablement expression in the box should be: C_NUM_SI_SLOTS>=2.
    It is advisable to select greater than or equal to 2 in case more than 2 slave interfaces are required.
    For further instances, you would need to include them in the HDL port mapping and enable them based on C_NUM_SI_SLOTS>=3, 4, etc.
    Note: C_NUM_SI_SLOTS is the generic associated with the number of slave interfaces.

  4. Another thing to keep in mind is the input ports of the interface and how they should be tied off when unused. 
    Whenever a port is disabled, the user can select the driver value that Vivado will use to drive the unused ports.
    To add a driver value to the port, the port will have to be edited from the IP Ports and Interfaces tab similar to the interfaces step above.
    If no value is specified the ports are left unconnected. This is up to the user.



  5. Now that the enablement is set up, you can set the parameter to only accept the number of interfaces that the IP will support.
    In addition, you can also display a more descriptive name for the parameter in the IP GUI.
    In the "Customization Parameters" tab, double-click the C_NUM_SI_SLOTS parameter to open the editor below.


    You can see the Display Name set to "Select the number of Slave Interfaces" and that the values 1 and 2 are permitted.
    This is due to the fact that the HDL example above can only handle 2 Slave interfaces.
    You can modify this according to the number of possible interfaces you have.

  6. The Customization GUI for the IP will then look like the below.
    Please note the default value of 1 for the "Select the number of Slave Interfaces" and on the IP Symbol and that the "s01_axis" interface is grayed out.







AR# 61620
Date 08/01/2014
Status Active
Type General Article