用于 PCI Express* 的 Intel® FPGA R-tile Avalon® Streaming IP用户指南

ID 683501
日期 3/28/2022
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

4.4.3.3.1. 实现MSI-X中断

PCI Local Bus Specification的6.8.2小节描述了MSI-X capability和table结构。MSI-X capability结构指向MSI-X Table结构和MSI-X Pending Bit Array (PBA)寄存器。BIOS设置MSI-X Table 和PBA寄存器起始地址的起始地址偏移和该指针相关联的BAR。
MSI-X中断组件
  1. Host软件通过完成如下步骤来在Application Layer中设置MSI-X中断:
    1. Host软件读取0x050寄存器处的Message Control寄存器以确定MSI-X Table大小。table entry的个数是<value read> + 1
      最大table为2048个entry。每个16字节entry分为4个字段,如下图所示。可在任何已配置的BAR访问MSI-X table。MSI-X table的基地址必须与4 KB边界对齐。
    2. 主机设置MSI-X table。它为每个entry的MSI-X地址,数据进行编程并且屏蔽位,如下图所示。
      图 30. MSI-X Table的格式
    3. Host使用如下公式计算<n th > entry的地址:
      nth_address = base address[BAR] + 16<n>
  2. Application Layer有一个中断时,它会向IRQ Source模块发起一个中断请求。
  3. IRQ Source在MSI-X PBA table中设置一个适当的位。
    PBA可以使用四字(qword)或双字(dword)接入。对于qword接入,IRQ Source使用以下方程式计算<m th >位的地址:
    qword address = <PBA base addr> + 8(floor(<m>/64))
    qword bit = <m> mod 64
    图 31. MSI-X PBA Table
  4. IRQ Processor读取MSI-X table中的entry。
    1. 如果中断被MSI-X table的Vector_Control字段屏蔽,则该中断保持待定状态。
    2. 如果中断未被屏蔽,则IRQ Processor向TX从接口发送Memory Write Request。它使用MSI-X table中的地址和数据。如果 Message Upper Address = 0,那么IRQ Processor会创建一个three-dword header。如果 Message Upper Address > 0 ,那么它将创建一个4-dword header。
  5. 主机中断服务例程将TLP检测为中断并对其服务。