MFB FRAME EXTENDER

ENTITY MFB_FRAME_EXTENDER IS

The MFB_FRAME_EXTENDER component allows an MFB frame to be extended by adding empty MFB blocks to its beginning. This component can be used, for example, to efficiently insert metadata into the framework. The component has a pair of MVB+MFB interfaces on the input and output. For each MFB frame you need to send one MVB item. Instructions to extend the MFB frame are passed through the RX MVB interface. User metadata can be sent only through the MVB interface. In addition, the component also copies this metadata to the TX MFB interface where it is valid with SOF.

Generics

Generic

Type

Default

Description

MFB_REGIONS

natural

4

The number of MFB regions

MFB_REGION_SIZE

natural

8

MFB region size in blocks, must be power of two

MFB_BLOCK_SIZE

natural

8

MFB block size in items, must be 8

MFB_ITEM_WIDTH

natural

8

MFB item size in bits, must be 8

PKT_MTU

natural

2**14

Maximum size of a MFB frame (in bytes)

MVB_FIFO_DEPTH

natural

32

Set the depth of RX MVB FIFOX Multi

MFB_FIFO_DEPTH

natural

32

Set the depth of RX MFB FIFOX Multi

USERMETA_WIDTH

natural

32

Width of User Metadata information

DEVICE

string

“AGILEX”

Target device: AGILEX, STRATIX10, ULTRASCALE,…

Ports

Port

Type

Mode

Description

=====

Clock and Resets inputs

=====

=====

CLK

std_logic

in

RESET

std_logic

in

=====

RX MFB+MVB interface

=====

=====

RX_MVB_USERMETA

std_logic_vector(MFB_REGIONS*USERMETA_WIDTH-1 downto 0)

in

RX_MVB_FRAME_LENGTH

std_logic_vector(MFB_REGIONS*log2(PKT_MTU+1)-1 downto 0)

in

RX MFB frame size in MFB items Maximum size is PKT_MTU MFB items

RX_MVB_EXT_SIZE

std_logic_vector(MFB_REGIONS*log2(PKT_MTU+1)-1 downto 0)

in

Frame extension size in MFB items, but must be divisible by MFB_BLOCK_SIZE Minimum size is 60 MFB items If EXT_EN is active and EXT_ONLY is not, then the sum of RX_MVB_FRAME_LENGTH and RX_MVB_EXT_SIZE cannot be higher than PKT_MTU If both EXT_EN and EXT_ONLY are active, then RX_MVB_EXT_SIZE cannot be higher than PKT_MTU

RX_MVB_EXT_ONLY

std_logic_vector(MFB_REGIONS-1 downto 0)

in

It only uses the new part (EXT_SIZE) of the frame, the rest is discarded. This can be useful, for example, when we need to send only metadata instead of the frame.

RX_MVB_EXT_EN

std_logic_vector(MFB_REGIONS-1 downto 0)

in

Enables the extension of the MFB frame

RX_MVB_VLD

std_logic_vector(MFB_REGIONS-1 downto 0)

in

RX_MVB_SRC_RDY

std_logic

in

RX_MVB_DST_RDY

std_logic

out

RX_MFB_DATA

std_logic_vector(MFB_REGIONS*MFB_REGION_SIZE*MFB_BLOCK_SIZE*MFB_ITEM_WIDTH-1 downto 0)

in

RX_MFB_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

RX_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

RX_MFB_SOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE))-1 downto 0)

in

RX_MFB_EOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE*MFB_BLOCK_SIZE))-1 downto 0)

in

RX_MFB_SRC_RDY

std_logic

in

RX_MFB_DST_RDY

std_logic

out

=====

TX MFB+MVB interface

=====

=====

TX_MVB_USERMETA

std_logic_vector(MFB_REGIONS*USERMETA_WIDTH-1 downto 0)

out

TX_MVB_VLD

std_logic_vector(MFB_REGIONS-1 downto 0)

out

TX_MVB_SRC_RDY

std_logic

out

TX_MVB_DST_RDY

std_logic

in

TX_MFB_DATA

std_logic_vector(MFB_REGIONS*MFB_REGION_SIZE*MFB_BLOCK_SIZE*MFB_ITEM_WIDTH-1 downto 0)

out

TX_MFB_USERMETA

std_logic_vector(MFB_REGIONS*USERMETA_WIDTH-1 downto 0)

out

The TX_MFB_USERMETA signal is valid with SOF and the transmitted items are the same as on the TX_MVB_USERMETA signal.

TX_MFB_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

TX_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

TX_MFB_SOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE))-1 downto 0)

out

TX_MFB_EOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE*MFB_BLOCK_SIZE))-1 downto 0)

out

TX_MFB_SRC_RDY

std_logic

out

TX_MFB_DST_RDY

std_logic

in