The core optionally supports built-in MSI-X vector tables including the Pending Bit Array.
- As shown in the following figure, the user application first asserts
cfg_interrupt_msix_intwith the vector number set incfg_interrupt_msi_int. - The core asserts
cfg_interrupt_msi_sentto signal that the interrupt is accepted. Ifcfg_interrupt_msix_vec_pending_statusis clear, the core sends a MSI-X Memory Write TLP. Otherwise, the core waits to send a MSI-X Memory Write TLP until the function mask is cleared.
Figure 1. MSI-X Signaling with Built-In MSI-X Vector Tables
- Instead of generating an interrupt, the user application can query
or clear the Pending Bit Array by additionally setting
cfg_interrupt_msix_vec_pendingto2'b01or2'b10respectively, as shown in the following figure. - In the query and clear cases,
cfg_interrupt_msix_vec_pending_statusreflects the pending status before the query or clear. -
cfg_interrupt_msi_int[31:0]is a shared signal between MSI [31:0] and MSI-X [7:0].
Figure 2. MSI-X Pending Bit Array Query and Clear
Note: Applications that need to generate MSI/MSI-X
interrupts with traffic class bits not equal to 0 or address translation bits not equal
to 0 must use the RQ interface to generate the interrupt (memory write
descriptor).