MSI-X 中断外部接口 - 1.3 简体中文

UltraScale+ 器件 Integrated Block for PCI Express 产品指南 (PG213)

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文
表 1. MSI-X 中断外部接口端口描述
名称 I/O 宽度 描述
cfg_interrupt_msix_enable 输出 4 配置中断 MSI-X 功能启用

这些输出可反映物理功能 0 - 3 的 MSI-X 控制寄存器的 MSI-X 使能位的设置。

cfg_interrupt_msix_mask 输出 4 配置中断 MSI-X 功能掩码

这些输出可反映物理功能 0 - 3 的 MSI-X 控制寄存器的 MSI-X 功能掩码位的设置。

cfg_interrupt_msix_vf_enable 输出 252 来自 VF 的配置中断 MSI-X 启用

这些输出可反映虚拟功能 0 - 251 的 MSI-X 控制寄存器的 MSI-X 使能位的设置。

cfg_interrupt_msix_vf_mask 输出 252 配置中断 MSI-X VF 掩码

这些输出可反映虚拟功能 0 - 251 的 MSI-X 控制寄存器的 MSI-X 功能掩码位的设置。

cfg_interrupt_msix_address 输入 64 配置中断 MSI-X 地址

当核配置为支持 MSI-X 中断并且在用户存储器中实现 MSI-X 表时,该总线可供用户逻辑用于传达将用于生成 MSI-X 中断的地址。

cfg_interrupt_msix_data 输入 32 配置中断 MSI-X 数据

当核配置为支持 MSI-X 中断并且在用户存储器中实现 MSI-X 表时,该总线可供用户逻辑用于传达将用于生成 MSI-X 中断的数据。

cfg_interrupt_msix_int 输入 1 配置中断 MSI-X 数据有效

用户断言此信号有效表示用户请求发送 MSI-X 中断。用户必须将识别信息置于指定输入上之后才能断言此中断有效。

当 MSI-X 表和暂挂位阵列均在用户存储器中实现时,识别信息由中断的存储器地址、数据和源功能编号组成。

这些信息必须分别置于 cfg_interrupt_msix_address[63:0]、cfg_interrupt_msix_data[31:0] 和 cfg_interrupt_msi_function_number[7:0] 上。核会在内部寄存这些参数,寄存位置为 cfg_interrupt_msix_int 的 0 到 1 转换。

当 MSI-X 表和暂挂位阵列均由核来实现时,识别信息由中断的源功能编号与中断矢量组成。

这些信息必须分别置于 cfg_interrupt_msi_function_number[7:0] 和 cfg_interrupt_msi_int[31:0] 上。

cfg_interrupt_msi_int[31:0] 的位 i 表示中断矢量 i,当 cfg_interrupt_msix_int 断言有效时,只能将该总线中的 1 个位设为 1。

断言中断有效后,用户逻辑必须等待至收到来自核 cfg_interrupt_msi_sent 或 cfg_interrupt_msi_fail 指示之后才能断言新中断有效。

cfg_interrupt_msix_vec_pending 输入 2 配置中断 MSI-X 暂挂位查询/清除

仅当核配置为包含 MSI-X 表和暂挂位阵列时,才使用这些模式位。当 cfg_interrupt_msix_int 断言有效以发送 MSI-X 中断时,通过设置这 2 个位即可在与选定功能和中断矢量关联的 MSI-X 暂挂位上执行某些操作。适用模式包括:

  • 00b:正常中断生成。如果断言 cfg_interrupt_msix_int 有效时与矢量关联的掩码位为 0,那么核会在链路上发射 MSI-X 请求 TLP。如果掩码位为 1,那么核不会立即发送中断,而是改为在其 MSI-X 暂挂位阵列中设置与中断矢量关联的暂挂位(后续当清除掩码后再发射 MSI-X 请求 TLP)。在上述 2 种情况下,核会断言 cfg_interrupt_msi_sent 有效,并保持 1 个周期,以指示已接受中断请求。用户可通过对 cfg_interrupt_msix_vec_pending_status 输出进行采样来区分这 2 种情况,此输出会反映对应于中断矢量的 MSI-X 暂挂位的当前设置。
  • 01b:暂挂位查询。在此模式下,当 cfg_interrupt_msix_int 的任一位断言有效时,核会将此视为查询其暂挂位状态的请求来进行处理。用户还必须将要查询的暂挂位的功能编号置于 cfg_interrupt_msi_function_number 输入上。核不会在响应中发射 MSI-X 请求,而是断言 cfg_interrupt_msi_sent 有效并保持 1 个周期,同时在 cfg_interrupt_msix_vec_pending_status 输出上显示 MSI-X 暂挂位的状态。
  • 10b:暂挂位清除。在此模式下,当 cfg_interrupt_msix_int 的任一位断言有效时,核会将此视为清除其暂挂位的请求来进行处理。用户还必须将要查询的暂挂位的功能编号置于 cfg_interrupt_msi_function_number 输入上。核不会在响应中发射 MSI-X 请求,而是改为清除矢量的 MSI-X 暂挂位(如果已设置),并激活 cfg_interrupt_msi_sent 并保持 1 个周期以作为确认。核还会在 cfg_interrupt_msix_vec_pending_status 输出上提供 MSI-X 暂挂位的先前状态,用户可通过对其进行采样来判定核是否已清除暂挂位,然后再发出用户请求(因为暂挂中断实际已发射)。此模式可用于实现 MSI-X 中断的“轮询模式”,即永久屏蔽中断,软件会轮询暂挂位以对中断进行检测并维护。处理完成每个中断后,可通过此接口清除暂挂位。
cfg_interrupt_msix_vec_pending_status 输出 1 配置中断 MSI-X 暂挂位状态

此输出可提供与 MSI-X 中断关联的暂挂位的状态,以作为使用 cfg_interrupt_msix_vec_pending 输入进行查询的响应。

仅当核配置为包含 MSI-X 表和暂挂位阵列时,此位才会处于活动状态。