MFB MVB Appender

ENTITY MFB_MVB_APPENDER IS

This component appends input MVB Items to packets (moves EOF). Its simple architecture utilizes MFB reconfigurators: Input MFB words are first reconfigured to MFB#(1,1,MFB_REGION_SIZE*MFB_BLOCK_SIZE,MFB_ITEM_WIDTH), so SOFs are aligned to the start of word (MFB Block 0). The appending process occurs in two steps:

  1. MVB append data are inserted onto a (temporary) MFB word and shifted according to the EOF (POS) of the original packet.

  2. This word is multiplexed with the MFB word containing the original packet according to the so-called “append vector”, which contains 1s from the EOF of the original packet to the offset created by the append data.

Warning

In this first version, the component has certain limitations:

  1. Only one MFB Region is supported. Multiple MFB Reagions are difficult to handle for the shifting mechanism.

  2. MVB Items cannot be wider than the MFB word. This would also cause problems for the shifting mechanism.

Further versions could remove these limitations. They could also utilize MFB Frame Masker instead of the Reconfigurators.

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

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

PKT_MTU_IN

natural

2**14

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

MVB_ITEMS

natural

1

Number of MVB Items in one word.

MVB_ITEM_SIZE

natural

16

Size of each MVB Item (in MFB Items!). MVB_ITEMS*MVB_ITEM_SIZE must not be greater than the number of MFB Items in a word (MFB_REGIONS*MFB_REGION_SIZE*MFB_BLOCK_SIZE).

MFB_FIFO_DEPTH

natural

32

Number of Items in the Input MFB_FIFOX.

APPEND_FIFO_DEPTH

natural

32

Number of Items in the Input APPEND FIFOX.

RX_MFB_CONF_EQ_TX

boolean

True

Whether the input and output MFB configurations are the same. If “false”, TX MFB configuration is 1,1,MFB_REGION_SIZE*MFB_BLOCK_SIZE,MFB_ITEM_WIDTH. Disabling backward configuration saves resources.

DEVICE

string

“STRATIX10”

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 (append data)

=====

=====

RX_MVB_DATA

std_logic_vector(MVB_ITEMS*MVB_ITEM_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 appended 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(tsel(RX_MFB_CONF_EQ_TX, MFB_REGION_SIZE, 1)))-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