用于 PCIe* 解决方案的 Intel® Stratix® 10 Avalon® -ST和Single Root I/O Virtualization (SR-IOV)接口用户指南

ID 683111
日期 12/06/2017
Public
文档目录

7.1.1. MSI和传统中断

IP core生成一个双字Memory Write TLP,用于在PCI Express链路上发送MSI中断信号。Application Layer Interrupt Handler Module app_msi_req输出端口控制MSI中断生成。置位时,导致生成一个MSI posted Memory Write TLP。IP core使用源自以下的信息构建TLP:
  • MSI Capability寄存器
  • l流量类(traffic class)(app_msi_tc)
  • app_msi_num指定的消息数据
要使能MSI中断,Application Layer必须首先设置MSI enable比特。然后,必须通过设置Command寄存器的bit 10,Interrupt Disable来禁止传统中断。

图 54. 应用层中的中断处理程序模块(Interrupt Handler Module in the Application Layer)

下图显示了通过一个per vector enable bit可能实现的Interrupt Handler Module。或者,Application Layer可以实现全局中断使能,而不是实现该per vector MSI。

图 55. 中断处理程序模块的实例实现(Example Implementation of the Interrupt Handler Block)

有32个可能的MSI消息。由一个特定组件请求的消息数量未必对应于分配的消息数量。例如,在下图中,Endpoint请求八个MSI,但只分配两个。在这种情况下,您必须将Application Layer设计为仅使用两个分配的消息。

图 56. MSI请求实例(MSI Request Example)

下表描述了三个实例实现。第一个实例分配全部32个MSI消息。第二个和第三个实例只分配4个中断。

表 49.  请求,分配的和映射的MSI消息

MSI

Allocated

32

4

4

System Error

31

3

3

Hot Plug and Power Management Event

30

2

3

Application Layer

29:0

1:0

2:0

为Hot Plug,Power Management Events和System Errors生成的MSI中断始终使用Traffic Class 0。Application Layer生成的MSI中断能够使用任何的Traffic Class。例如,在传输结束时生成MSI的DMA可以使用与用于传输数据相同的流量控制。

下图显示了Root Port的MSI中断信号之间的交互。app_msi_reqapp_msi_ack之间的可能最小延迟是一个时钟周期。在此时序图中,app_msi_req置低前可以扩展到app_msi_ack以外。然而,app_msi_req必须在与app_msi_ack相同的时钟置低之前置低,以避免推断新的中断。

图 57. MSI中断信号时序