Gen Loop Switch (GLS)
- ENTITY GEN_LOOP_SWITCH IS
This unit contains MI32-configurable switch plane for connection between DMA Module and Ethernet side in both RX and TX stream. By default the connection is ETH_RX->DMA_RX and DMA_TX->ETH_TX. It allows for loopback between ETH_RX->ETH_TX and DMA_TX->DMA_RX as well as connection of MFB generators on DMA_RX and ETH_TX. These generators have their own part of MI32 address space.
Connection diagram:
+--------+ +---\ | RX Gen +--+ 1 \ +---\ ETH_RX +--------+ |MUX_C+------------+ 0 \ +------+ DMA_RX >--------------------------+------+ 0 / |MUX_A+--+ FIFO +------> | +---/ +---+ 1 / +------+ | | +---/ | | | | | | /---+ | | +------+ / 1 +---+ /---+ | <------+ FIFO +--+MUX_B| / 0 +------+--------------------------< ETH_TX +------+ \ 0 +------------+MUX_D| +-----------------+ DMA_TX \---+ \ 1 +--+ TX Gen / Player | \---+ +-----------------+
MI address offsets:
0x000 -- RX loopback MUX_A (0 -> RX stream, 1 -> TX stream loopback) 0x004 -- TX loopback MUX_B (0 -> TX stream, 1 -> RX stream loopback) 0x008 -- RX generator MUX_C (0 -> RX stream, 1 -> RX generator) 0x00C -- TX generator MUX_D (0 -> TX stream, 1 -> TX generator, 2 -> TX Frame Player) 0x040-0x04C -- DMA RX MFB speed meter (0x0 - tics, 0x4 - status, 0x8 - items, 0xC - clear) 0x050-0x05C -- DMA TX MFB speed meter (0x0 - tics, 0x4 - status, 0x8 - items, 0xC - clear) 0x060-0x06C -- ETH RX MFB speed meter (0x0 - tics, 0x4 - status, 0x8 - items, 0xC - clear) 0x070-0x07C -- ETH TX MFB speed meter (0x0 - tics, 0x4 - status, 0x8 - items, 0xC - clear) 0x080-0x0BF -- RX generator address space 0x0C0-0x0FF -- TX generator address space free address space from 0x100-0x17F 0x180-0x1BF -- RX Frame Player address space 0x1C0-0x1FF -- TX Frame Player address space Notes: - Only the lowest 8 bits of address considered. - Generator address offsets -> see entity of subcomponent MFB_GENERATOR_MI32
Warning
Only switch mux selection registers when there is no data on the input!
Generic
Type
Default
Description
REGIONS
natural
2
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
PKT_MTU
natural
16383
maximum supported packet MTU in bytes
RX_DMA_CHANNELS
natural
32
number of supported DMA channels on RX
NPP_HDR_SIZE
natural
4
size of NPP Header (in bytes) must not be greater than BLOCK_SIZE*ITEM_WIDTH/8
TX_DMA_CHANNELS
natural
32
number of supported DMA channels on TX
HDR_META_WIDTH
natural
12
Width of User Header Metadata information
PLAYER_FIFO_DEPTH
natural
512
Depth of FIFO memory in MFB FRAME PLAYERs
RX_HDR_INS_EN
boolean
false
enable inserting generated NPP Header at the start of each MFB frame in RX generator
SAME_CLK
boolean
false
MI_CLK and CLK are the same set this to True to remove MI asynch conversion
MI_PIPE_EN
boolean
true
MI PIPE enable
FAKE_SWITCH
boolean
false
Setting this to True will disable the component and create direct connection from DMA interfaces to ETH interfaces
DEVICE
string
“STRATIX10”
FPGA device string
Port
Type
Mode
Description
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_BE
std_logic_vector(32/8-1 downto 0)
in
Not supported!
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
CLK
std_logic
in
Internal clock and reset for all interfaces besides MI32
RESET
std_logic
in
ETH_RX_MVB_LEN
std_logic_vector(REGIONS*log2(PKT_MTU+1)-1 downto 0)
in
MVB interface with DMA instructions
ETH_RX_MVB_CHANNEL
std_logic_vector(REGIONS*log2(RX_DMA_CHANNELS)-1 downto 0)
in
ETH_RX_MVB_HDR_META
std_logic_vector(REGIONS*HDR_META_WIDTH-1 downto 0)
in
ETH_RX_MVB_DISCARD
std_logic_vector(REGIONS*1-1 downto 0)
in
ETH_RX_MVB_VLD
std_logic_vector(REGIONS-1 downto 0)
in
ETH_RX_MVB_SRC_RDY
std_logic
in
ETH_RX_MVB_DST_RDY
std_logic
out
ETH_RX_MFB_DATA
std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH-1 downto 0)
in
MFB interface with data packets
ETH_RX_MFB_SOF
std_logic_vector(REGIONS-1 downto 0)
in
ETH_RX_MFB_EOF
std_logic_vector(REGIONS-1 downto 0)
in
ETH_RX_MFB_SOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE))-1 downto 0)
in
ETH_RX_MFB_EOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE*BLOCK_SIZE))-1 downto 0)
in
ETH_RX_MFB_SRC_RDY
std_logic
in
ETH_RX_MFB_DST_RDY
std_logic
out
ETH_TX_MVB_LEN
std_logic_vector(REGIONS*log2(PKT_MTU+1)-1 downto 0)
out
MVB interface with DMA instructions
ETH_TX_MVB_CHANNEL
std_logic_vector(REGIONS*log2(TX_DMA_CHANNELS)-1 downto 0)
out
ETH_TX_MVB_HDR_META
std_logic_vector(REGIONS*HDR_META_WIDTH-1 downto 0)
out
ETH_TX_MVB_VLD
std_logic_vector(REGIONS-1 downto 0)
out
ETH_TX_MVB_SRC_RDY
std_logic
out
ETH_TX_MVB_DST_RDY
std_logic
in
ETH_TX_MFB_DATA
std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH-1 downto 0)
out
MFB interface with data packets
ETH_TX_MFB_SOF
std_logic_vector(REGIONS-1 downto 0)
out
ETH_TX_MFB_EOF
std_logic_vector(REGIONS-1 downto 0)
out
ETH_TX_MFB_SOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE))-1 downto 0)
out
ETH_TX_MFB_EOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE*BLOCK_SIZE))-1 downto 0)
out
ETH_TX_MFB_SRC_RDY
std_logic
out
ETH_TX_MFB_DST_RDY
std_logic
in
DMA_RX_MVB_LEN
std_logic_vector(REGIONS*log2(PKT_MTU+1)-1 downto 0)
out
MVB interface with DMA instructions
DMA_RX_MVB_CHANNEL
std_logic_vector(REGIONS*log2(RX_DMA_CHANNELS)-1 downto 0)
out
DMA_RX_MVB_HDR_META
std_logic_vector(REGIONS*HDR_META_WIDTH-1 downto 0)
out
DMA_RX_MVB_DISCARD
std_logic_vector(REGIONS*1-1 downto 0)
out
DMA_RX_MVB_VLD
std_logic_vector(REGIONS-1 downto 0)
out
DMA_RX_MVB_SRC_RDY
std_logic
out
DMA_RX_MVB_DST_RDY
std_logic
in
DMA_RX_MFB_DATA
std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH-1 downto 0)
out
MFB interface with data packets
DMA_RX_MFB_SOF
std_logic_vector(REGIONS-1 downto 0)
out
DMA_RX_MFB_EOF
std_logic_vector(REGIONS-1 downto 0)
out
DMA_RX_MFB_SOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE))-1 downto 0)
out
DMA_RX_MFB_EOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE*BLOCK_SIZE))-1 downto 0)
out
DMA_RX_MFB_SRC_RDY
std_logic
out
DMA_RX_MFB_DST_RDY
std_logic
in
DMA_TX_MVB_LEN
std_logic_vector(REGIONS*log2(PKT_MTU+1)-1 downto 0)
in
MVB interface with DMA instructions
DMA_TX_MVB_CHANNEL
std_logic_vector(REGIONS*log2(TX_DMA_CHANNELS)-1 downto 0)
in
DMA_TX_MVB_HDR_META
std_logic_vector(REGIONS*HDR_META_WIDTH-1 downto 0)
in
DMA_TX_MVB_VLD
std_logic_vector(REGIONS-1 downto 0)
in
DMA_TX_MVB_SRC_RDY
std_logic
in
DMA_TX_MVB_DST_RDY
std_logic
out
DMA_TX_MFB_DATA
std_logic_vector(REGIONS*REGION_SIZE*BLOCK_SIZE*ITEM_WIDTH-1 downto 0)
in
MFB interface with data packets
DMA_TX_MFB_SOF
std_logic_vector(REGIONS-1 downto 0)
in
DMA_TX_MFB_EOF
std_logic_vector(REGIONS-1 downto 0)
in
DMA_TX_MFB_SOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE))-1 downto 0)
in
DMA_TX_MFB_EOF_POS
std_logic_vector(REGIONS*max(1,log2(REGION_SIZE*BLOCK_SIZE))-1 downto 0)
in
DMA_TX_MFB_SRC_RDY
std_logic
in
DMA_TX_MFB_DST_RDY
std_logic
out