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:
Generics0x00 -- TX to RX loopback (0 -> disable, 1 -> enable) 0x04 -- RX to TX loopback (0 -> disable, 1 -> enable)
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
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