Vendor Defined Messages (VDMs) are an expansion of the existing messaging capabilities with PCI Express. PCI Express Specification defines additional requirements for Vendor Defined Messages, header formats and routing information. For details, see PCI-SIG Specifications (https://www.pcisig.com/specifications).
QDMA allows the transmission and reception of VDMs. To enable this feature,
select Enable Bridge Slave Mode in the Vivado Customize IP dialog box. This enables the
st_rx_msg
interface.
RX Vendor Defined Messages are stored in shallow FIFO before they are transmitted to the output port. When there are many back-to-back VDM messages, FIFO will overflow and these message will be dropped. So it is better to repeat VDM messages at regular intervals.
Throughput for VDMs depend on several factors: PCIe speed, data width, message length, and the internal VDM pipeline.
Internal VDM pipelines must be replaced with the Internal RX VDM FIFO interface for network on chip (NoC) access, which has a shallow buffer of 64B.
Internal RX VDM FIFO interface cannot handle back-to-back messages. Pipeline throughput can only handle one in every four accesses, which is about 25% efficiency from the host access.
RX Vendor Defined Messages:
- When QDMA receives a VDM, the incoming messages will be received on
the
st_rx_msg
port. - The incoming data stream will be captured on the
st_rx_msg_data
port (per-DW). - The user application needs to drive the
st_rx_msg_rdy
to signal if it can accept the incoming VDMs. - Once
st_rx_msg_rdy
is High, the incoming VDM is forwarded to the user application. - The user application needs to store this incoming VDMs and track of how many packets were received.
TX Vendor Defined Messages:
- To enable transmission of VDM from QDMA, program the TX Message registers in the Bridge through the AXI4 Slave interface.
- Bridge has TX Message Control, Header L (bytes 8-11), Header H (bytes 12-15) and TX Message Data registers as shown in the PCIe TX Message Data FIFO Register (TX_MSG_DFIFO).
- Issue a Write to offset 0xE64 through AXI4 Slave interface for the TX Message Header L register.
- Program offset 0xE68 for the required VDM TX Header H register.
- Program up to 16DW of Payload for the VDM message starting from DW0 – DW15 by sending Writes to offset 0xE6C one by one.
- Program the
msg_routing
,msg_code
, data length, requester function field andmsg_execute
field in the TX_MSG_CTRL register in offset 0xE60 to send the VDM TX packet. - The TX Message Control register also indicates the completion status of the message in bit 23. User needs to read this bit to confirm the successful transmission of the VDM packet.
- All the fields in the registers are RW except bit 23 (
msg_fail
) in TX Control register which is cleared by writing a 1. - VDM TX packet will be sent on the AXI-ST RQ transmit interface.