核可选择支持内置 MSI-X 矢量表,包括暂挂位阵列。
- 如下图所示,用户应用首先以
cfg_interrupt_msi_int
中所设矢量数来断言cfg_interrupt_msix_int
有效。 - 核通过断言
cfg_interrupt_msi_sent
有效来发出信号,表明已接受中断。如果cfg_interrupt_msix_vec_pending_status
已清除,则核会发送 MSI-X 存储器写入 TLP。否则,核会等待至清除功能掩码后再发送 MSI-X 存储器写入 TLP。
图 1. 含内置 MSI-X 矢量表的 MSI-X 信号
- 除了生成中断外,用户应用也可以改为通过额外将
cfg_interrupt_msix_vec_pending
分别设置为2'b01
或2'b10
来查询或清除暂挂位阵列,如下图所示。 - 查询和清除时,
cfg_interrupt_msix_vec_pending_status
会在查询或清除前反映暂挂状态。 -
cfg_interrupt_msi_int[31:0]
是 MSI [31:0] 与 MSI-X [7:0] 之间的共享信号。
图 2. MSI-X 暂挂位阵列查询和清除
注释: 如果应用需生成 MSI/MSI-X 中断,且流量类位不等于 0 或者地址转换位不等于 0,则此类应用必须使用 RQ 接口来生成中断(存储器写入描述符)。