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.

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 downto 0)

in

RX MFB frame size in MFB items

RX_MVB_EXT_SIZE

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

in

Frame extension size in MFB items, but must be divisible by MFB_BLOCK_SIZE

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 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

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