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 genericMFB_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
GenericsMVB_ITEM_SIZE
generic! (Or more precisely, with the MAX_PREPEND_REGIONS constant, which depends on this generic.)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, …
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