MTC (MI Transaction Controller)

ENTITY MTC IS

The MI Transaction Controller (MTC) component serves as the MI master endpoint. It provides the conversion of PCIe read and write requests to MI requests. It processes the responses to MI requests and sends them to the host PC as PCIe completion transactions. If the MI slave does not respond to an MI read request, the MTC module will be stuck, the PCIe communication will be broken and the guest PC may get into an unexpected state.

Simple block diagram including wiring:

../../../_images/mtc.drawio.svg Generics

Generic

Type

Default

Description

MFB_REGIONS

natural

2

MFB bus: number of regions in word

MFB_REGION_SIZE

natural

1

MFB bus: number of blocks in region, must be 1

MFB_BLOCK_SIZE

natural

8

MFB bus: number of items in block, must be 8

MFB_ITEM_WIDTH

natural

32

MFB bus: width of one item in bits, must be 32 (dword)

MFB_REGION_WIDTH

natural

MFB_REGION_SIZE*MFB_BLOCK_SIZE*MFB_ITEM_WIDTH

MFB bus: width of single data region in bits, auxiliary parameter, do not change value!

BAR0_BASE_ADDR

std_logic_vector(31 downto 0)

X”01000000”

BAR0 base address for PCIE->MI32 transalation

BAR1_BASE_ADDR

std_logic_vector(31 downto 0)

X”02000000”

BAR1 base address for PCIE->MI32 transalation

BAR2_BASE_ADDR

std_logic_vector(31 downto 0)

X”03000000”

BAR2 base address for PCIE->MI32 transalation

BAR3_BASE_ADDR

std_logic_vector(31 downto 0)

X”04000000”

BAR3 base address for PCIE->MI32 transalation

BAR4_BASE_ADDR

std_logic_vector(31 downto 0)

X”05000000”

BAR4 base address for PCIE->MI32 transalation

BAR5_BASE_ADDR

std_logic_vector(31 downto 0)

X”06000000”

BAR5 base address for PCIE->MI32 transalation

EXP_ROM_BASE_ADDR

std_logic_vector(31 downto 0)

X”0A000000”

Expansion ROM base address for PCIE->MI32 transalation

CC_PIPE

boolean

true

Enable Pipe component on CC interface

CQ_PIPE

boolean

true

Enable Pipe component on CQ interface

MI_PIPE

boolean

true

Enable Pipe component on MI32 interface

MI_DATA_WIDTH

natural

32

MI bus: width of data word in bits, must be 32.

MI_ADDR_WIDTH

natural

32

MI bus: width of address word in bits, must be 32.

DEVICE

string

“ULTRASCALE”

Select correct FPGA device: “ULTRASCALE”, “STRATIX10”, “AGILEX”

ENDPOINT_TYPE

string

“USP”

Intel PCIe endpoint type:

Ports

Port

Type

Mode

Description

CLK

std_logic

in

Clock signal for the whole MTC module. Must be used clock from PCIe Hard IP!

RESET

std_logic

in

Reset synchronized with CLK.

=====

Configuration Status Interface

=====

=====

CTL_MAX_PAYLOAD_SIZE

std_logic_vector(2 downto 0)

in

Maximum allowed size of completion payload: 000b = 128 bytes; 001b = 256 bytes; 010b = 512 bytes; 011b = 1024 bytes

CTL_BAR_APERTURE

std_logic_vector(5 downto 0)

in

BAR aperture value (Intel FPGA only). Defines the size of the address space of BAR in the number of usable address bits.

=====

MFB Completer Request (CQ) Interface

=====

=====

CQ_MFB_DATA

std_logic_vector(MFB_REGIONS*MFB_REGION_WIDTH-1 downto 0)

in

CQ_MFB_META

std_logic_vector(MFB_REGIONS*PCIE_CQ_META_WIDTH-1 downto 0)

in

CQ_MFB_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

CQ_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

in

CQ_MFB_SOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE))-1 downto 0)

in

CQ_MFB_EOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE*MFB_BLOCK_SIZE))-1 downto 0)

in

CQ_MFB_SRC_RDY

std_logic

in

CQ_MFB_DST_RDY

std_logic

out

=====

MFB Completer Completion (CC) Interface

=====

=====

CC_MFB_DATA

std_logic_vector(MFB_REGIONS*MFB_REGION_WIDTH-1 downto 0)

out

CC_MFB_META

std_logic_vector(MFB_REGIONS*PCIE_CC_META_WIDTH-1 downto 0)

out

CC_MFB_SOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

CC_MFB_EOF

std_logic_vector(MFB_REGIONS-1 downto 0)

out

CC_MFB_SOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE))-1 downto 0)

out

CC_MFB_EOF_POS

std_logic_vector(MFB_REGIONS*max(1,log2(MFB_REGION_SIZE*MFB_BLOCK_SIZE))-1 downto 0)

out

CC_MFB_SRC_RDY

std_logic

out

CC_MFB_DST_RDY

std_logic

in

=====

MI32 interface (master)

=====

=====

MI_FUNCTION

std_logic_vector(7 downto 0)

out

MI bus: PCIe function number that generated the current MI request

MI_DWR

std_logic_vector(31 downto 0)

out

MI bus: data from master to slave (write data)

MI_ADDR

std_logic_vector(31 downto 0)

out

MI bus: slave address

MI_BE

std_logic_vector(3 downto 0)

out

MI bus: byte enable

MI_RD

std_logic

out

MI bus: read request

MI_WR

std_logic

out

MI bus: write request

MI_ARDY

std_logic

in

MI bus: ready of slave module

MI_DRD

std_logic_vector(31 downto 0)

in

MI bus: data from slave to master (read data)

MI_DRDY

std_logic

in

MI bus: valid of MI_DRD data signal