供应商定义报文 (VDM) 是对 PCI Express 现有报文传递功能的扩展。PCI Express 规范定义了针对供应商定义报文、报头格式和路由信息的附加要求。欲知详情,请参阅 PCI-SIG 规范(https://www.pcisig.com/specifications)。
QDMA 允许传输和接收 VDM。要启用该功能,请选中 Vivado 的“Customize IP”(自定义 IP)对话框中的Enable Bridge Slave Mode(启用 Bridge 从模式)。这将启用 st_rx_msg
接口。
RX 供应商定义报文先存储在浅 FIFO 中,然后再发射到输出端口。如有大量连续 VDM 报文,FIFO 将发生上溢,这些报文将被丢弃。因此,最好定期重复 VDM 报文。
VDM 的吞吐量取决于几个因素:PCIe 速度、数据宽度、报文长度和内部 VDM 流水线。
内部 VDM 流水线必须替换为内部 RX VDM FIFO 接口,以便进行片上网络 (NoC) 访问,NoC 有 64B 的浅缓冲器。
注释: 如果在通过 NoC 维护 FIFO 之前收到的 VDM 超过 64B,那么新 VDM 报文将被丢弃。
内部 RX VDM FIFO 接口不能处理连续报文。流水线吞吐量只能处理每四次访问中的一次访问,即约为主机访问效率的 25%。
重要: 请勿使用连续 VDM 访问。
RX 供应商定义报文:
- 当 QDMA 收到 VDM 时,将在
st_rx_msg
端口接收传入的报文。 - 将在
st_rx_msg_data
端口捕获(按 DW)传入的数据串流。 - 用户应用需驱动
st_rx_msg_rdy
以发出信号,指明它是否能接受传入 VDM。 - 当
st_rx_msg_rdy
为高位时,传入 VDM 将被转发至用户应用。 - 用户应用需存储此传入 VDM,并跟踪接收到的包数量。
TX 供应商定义报文:
- 要启用从 QDMA 发射到 VDM 的操作,请在 Bridge 中通过 从接口对 TX Message 寄存器进行编程。
- Bridge 具有 TX Message Control、Header L(字节 8-11)、Header H(字节 12-15)和 TX Message Data 寄存器,如 PCIe TX Message Data FIFO Register (TX_MSG_DFIFO) 中所示。
- 通过 从接口对偏移 0xE64 发出 Write(写入),供 TX Message Header L 寄存器使用。
- 对偏移 0xE68 进行编程,以供所需 VDM TX Header H 寄存器使用。
- 向偏移 0xE6C 逐一发送 Write,对最多 16 个 DW 有效载荷进行编程,以供从 DW0 开始到 DW15 为止的 VDM 报文使用。
- 对 TX_MSG_CTRL 寄存器中的偏移 0xE60 的
msg_routing
、msg_code
、数据长度、请求器功能字段和msg_execute
字段进行编程以发送 VDM TX 包。 - TX Message Control 寄存器还会在位 23 处指明报文的完成状态。用户需读取该位,以确认是否成功发射 VDM 包。
- 这些寄存器中的所有字段均为 RW,TX Control 中的位 23 (
msg_fail
) 除外,写入 1 即可将该位清零。 - VDM TX 包将在 AXI-ST RQ 发射接口上发送。