MFB MVB Prepender

ENTITY MFB_MVB_PREPENDER IS

This component inserts MVB Items to the start of input packets. One MVB Item is prepended to one MFB packet. The MVB Items must be as wide as N MFB Blocks (see generic MVB_ITEM_SIZE). Metadata are currently not supported (see generic MFB_META_WIDTH).

Architecture

MFB_MVB_PREPENDER uses MFB Extender to create space for the MVB Items (moves SOF and EOF). Then it calculates a “Prepend vector”, where each each bit corresponds to a MFB Block in the dataword. Before the MVB Item is inserted into the dataword according to the Prepend vector, it is shifted to start at SOF_POS of the current frame.

Does not meet timing constrains with MFB_REGIONS=4!

Resource consumption increases with the MVB_ITEM_SIZE generic! (Or more precisely, with the MAX_PREPEND_REGIONS constant, which depends on this generic.)

Generics

Generic

Type

Default

Description

MFB_REGIONS

natural

1

Number of Regions within a data word, must be power of 2. In this version, only one MFB Region is supported.

MFB_REGION_SIZE

natural

8

Region size (in Blocks). Values under 2 might cause unwanted behaviour.

MFB_BLOCK_SIZE

natural

8

Block size (in Items), must be 8.

MFB_ITEM_WIDTH

natural

8

Item width (in bits), must be 8.

MFB_META_WIDTH

natural

0

Metadata width (in bits). Currently not supported! MFB Frame Extender doesn’t support standard MFB metadata, only metadata on its MVB interface (RX_MVB_USERMETA port). Metadata Extractor could be used to extract metadata on to MVB. These could be then merged with the MVB Items (from MFB Frame Length’s output) going to MFB Frame Extender’s RX_MVB_* interface.

PKT_MTU_IN

natural

2**14

Maximum size of input packets (in Items). Output packets’ MTU is PKT_MTU_IN + MVB_ITEM_SIZE*MFB_BLOCK_SIZE.

MVB_ITEMS

natural

1

Number of MVB Items in a single word.

MVB_ITEM_SIZE

natural

2

Size of each MVB Item (in MFB Blocks!). MVB Items cannot be wider than the MFB word, hence: MVB_ITEMS*MVB_ITEM_SIZE must not be greater than the number of MFB Blocks in a word (MFB_REGIONS*MFB_REGION_SIZE).

MFB_FIFO_DEPTH

natural

1024

Number of Items (MFB words) in the Input MFB_FIFOX.

MVB_FIFO_DEPTH

natural

512

Number of Items (MVB words) in the Input MVB FIFOX.

DEVICE

string

“AGILEX”

FPGA device name: ULTRASCALE, STRATIX10, AGILEX, …

Ports

Port

Type

Mode

Description

=====

Clock and Reset

=====

=====

CLK

std_logic

in

RESET

std_logic

in

=====

RX MFB inf

=====

=====

RX_MFB_DATA

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

in

RX_MFB_META

std_logic_vector(MFB_REGIONS*MFB_META_WIDTH-1 downto 0)

in

Valid with SOF.

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_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

RX_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

RX_MFB_SRC_RDY

std_logic

in

RX_MFB_DST_RDY

std_logic

out

=====

RX MVB inf (prepend data)

=====

=====

RX_MVB_DATA

std_logic_vector(MVB_ITEMS*MVB_ITEM_SIZE*MFB_BLOCK_SIZE*MFB_ITEM_WIDTH-1 downto 0)

in

RX_MVB_VLD

std_logic_vector(MVB_ITEMS-1 downto 0)

in

RX_MVB_SRC_RDY

std_logic

in

RX_MVB_DST_RDY

std_logic

out

=====

TX MFB inf (frames with prepended MVB data)

=====

=====

TX_MFB_DATA

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

out

TX_MFB_META

std_logic_vector(MFB_REGIONS*MFB_META_WIDTH-1 downto 0)

out

Valid with SOF.

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_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

TX_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

TX_MFB_SRC_RDY

std_logic

out

TX_MFB_DST_RDY

std_logic

in