ベンダー定義メッセージ (VDM) は、PCI Express の既存メッセージ機能の拡張機能です。PCI Express の仕様には、VDM の追加要件、ヘッダー フォーマット、配信情報が定義されています。詳細は、 PCI-SIG 仕様 (https://www.pcisig.com/specifications) を参照してください。
QDMA では VDM の送受信が可能です。この機能をイネーブルにするには、Vivado の [Customize IP] ダイアログ ボックスで Enable Bridge Slave Mode を選択します。これで、st_rx_msg インターフェイスが有効になります。
RX ベンダー定義メッセージは、出力ポートに送信される前に深さが浅い FIFO に格納されます。多数の VDM メッセージが連続する場合は、FIFO がオーバーフローし、これらのメッセージは破棄されます。VDM メッセージは定期的に繰り返すことが推奨されています。
VDM のスループットは、PCIe スピード、データ幅、メッセージ長、内部の VDM パイプラインなどいくつかの要因に依存します。
内部 VDM パイプラインは、ネットワークオンチップ (NoC) アクセスに対応する 64B の浅いバッファーを持つ内部 RX VDM FIFO インターフェイスに置き換える必要があります。
内部 RX VDM FIFOインターフェイスは、連続したメッセージを処理できません。パイプラインのスループットは、4 回に 1 回のアクセスしか処理できません。つまり、ホストからのアクセス効率は約 25% です。
RX ベンダー定義メッセージ:
- QDMA が VDM を受信すると、メッセージが
st_rx_msgポートで受信されます。 - この入力データ ストリームは
st_rx_msg_dataポート (DW ごと) で取り込まれます。 - ユーザー アプリケーションでこの VDM を受領できるかどうかを通知するには、ユーザー アプリケーションで
st_rx_msg_rdyを駆動する必要があります。 -
st_rx_msg_rdyが High になると、VDM がユーザー アプリケーションに転送されます。 - ユーザー アプリケーションは、この VDM を格納し、受信したパケット数を監視する必要があります。
TX ベンダー定義メッセージ:
- QDMA から VDM を送信できるようにするには、AXI4-Lite スレーブ インターフェイスを介して、ブリッジの TX メッセージ レジスタをプログラムします。
- ブリッジには、PCIe TX メッセージ データ FIFO レジスタ (TX_MSG_DFIFO) に示すように、TX メッセージ制御、ヘッダー L (バイト 8 から 11)、ヘッダー H (バイト 12 から 15)、および TX メッセージ データのレジスタがあります。
- TX メッセージ ヘッダー L レジスタの場合は、AXI4-Lite スレーブ インターフェイスを介して、オフセット 0xE64 に書き込みを実行します。
- 必須の VDM TX ヘッダー H レジスタの場合は、オフセット 0xE68 をプログラムします。
- DW0 から DW15 までの VDM メッセージの場合は、オフセット 0xE6C に書き込みを 1 つずつ実行して、16 個の DW ペイロードをプログラムします。
- VDM TX パケットを送信するには、オフセット 0xE60 にある TX_MSG_CTRL レジスタの
msg_routing、msg_code、データ長、リクエスター ファンクション フィールド、およびmsg_executeフィールドをプログラムします。 - TX メッセージ制御レジスタも、ビット 23 でメッセージの完了ステータスを示します。VDM パケットの送信が問題なくできたことを確認するには、このビットを読み出す必要があります。
- レジスタのすべてのフィールドは RW ですが、例外は、TX 制御レジスタのビット 23 (
msg_fail) で、これは 1 を書き込むとクリアになります。 - VDM TX パケットは、AXI-ST RQ 送信インターフェイスで送信されます。