MFB Loopback

ENTITY MFB_LOOPBACK IS

This component provides the capability to set loopback on MFB interfaces. Both near-end and far-end type is possible. The module is controlled by the MI interface where address space is set as follows:

0x00      -- TX to RX loopback (0 -> disable, 1 -> enable)
0x04      -- RX to TX loopback (0 -> disable, 1 -> enable)
Generics

Generic

Type

Default

Description

DEVICE

string

“ULTRASCALE”

REGIONS

natural

1

Number of regions in a data word

REGION_SIZE

natural

8

Number of blocks in a region

BLOCK_SIZE

natural

8

Number of items in a block

ITEM_WIDTH

natural

8

Number of bits in an item

META_WIDTH

natural

24

Size of metadata in bits

FAKE_LOOPBACK

boolean

FALSE

When true, simple interconnect from input to output is inserted, the loopback logic is not applied

PIPED_PORTS

boolean

FALSE

Puts MFB pipes to all of the ports

SAME_CLK

boolean

TRUE

When true, the MI bus and the internal logic use the same clock, otherwise the asynchronous crossing is inserted

Ports

Port

Type

Mode

Description

=====

MI32 interface

=====

=====

MI_CLK

std_logic

in

MI_RESET

std_logic

in

MI_DWR

std_logic_vector(32-1 downto 0)

in

MI_ADDR

std_logic_vector(32-1 downto 0)

in

MI_RD

std_logic

in

MI_WR

std_logic

in

MI_ARDY

std_logic

out

MI_DRD

std_logic_vector(32-1 downto 0)

out

MI_DRDY

std_logic

out

=====

Internal clock and reset for all interfaces besides MI32

=====

=====

CLK

std_logic

in

RESET

std_logic

in

=====

Input of the RX MFB interface

=====

=====

RX_DATA_IN

std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH -1 downto 0)

in

RX_META_IN

std_logic_vector(META_WIDTH -1 downto 0)

in

RX_SOF_IN

std_logic_vector(REGIONS -1 downto 0)

in

RX_EOF_IN

std_logic_vector(REGIONS -1 downto 0)

in

RX_SOF_POS_IN

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE)) -1 downto 0)

in

RX_EOF_POS_IN

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE*BLOCK_SIZE)) -1 downto 0)

in

RX_SRC_RDY_IN

std_logic

in

RX_DST_RDY_IN

std_logic

out

=====

Output of the RX MFB interface

=====

=====

RX_DATA_OUT

std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH -1 downto 0)

out

RX_META_OUT

std_logic_vector(META_WIDTH -1 downto 0)

out

RX_SOF_OUT

std_logic_vector(REGIONS -1 downto 0)

out

RX_EOF_OUT

std_logic_vector(REGIONS -1 downto 0)

out

RX_SOF_POS_OUT

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE)) -1 downto 0)

out

RX_EOF_POS_OUT

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE*BLOCK_SIZE)) -1 downto 0)

out

RX_SRC_RDY_OUT

std_logic

out

RX_DST_RDY_OUT

std_logic

in

=====

Output of the TX MFB interface

=====

=====

TX_DATA_OUT

std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH -1 downto 0)

out

TX_META_OUT

std_logic_vector(META_WIDTH -1 downto 0)

out

TX_SOF_OUT

std_logic_vector(REGIONS -1 downto 0)

out

TX_EOF_OUT

std_logic_vector(REGIONS -1 downto 0)

out

TX_SOF_POS_OUT

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE)) -1 downto 0)

out

TX_EOF_POS_OUT

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE*BLOCK_SIZE)) -1 downto 0)

out

TX_SRC_RDY_OUT

std_logic

out

TX_DST_RDY_OUT

std_logic

in

=====

Input of the TX MFB interface

=====

=====

TX_DATA_IN

std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH -1 downto 0)

in

TX_META_IN

std_logic_vector(META_WIDTH -1 downto 0)

in

TX_SOF_IN

std_logic_vector(REGIONS -1 downto 0)

in

TX_EOF_IN

std_logic_vector(REGIONS -1 downto 0)

in

TX_SOF_POS_IN

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE)) -1 downto 0)

in

TX_EOF_POS_IN

std_logic_vector(REGIONS*max(1, log2(REGION_SIZE*BLOCK_SIZE)) -1 downto 0)

in

TX_SRC_RDY_IN

std_logic

in

TX_DST_RDY_IN

std_logic

out