如何使用AXI Bridge IP 发送MSI中断

部署运行你感兴趣的模型镜像

点击蓝字关注我们

关注、星标公众号,精彩内容每日送达
来源:网络素材

MSI中断简介

Xilinx PCIE IP中MSI中断相关的地址如下图1所示,如果想要成功产生中断,MSI Control, Message Address (Lower), Message Address (Upper)和Message Data这四个字段是必须要进行配置的,此四个字段均可通过主机的软件或者Xilinx的RP(root port)IP进行配置。

525e913bb24b701fcc72cf393ee33a49.png

图1

PCIE的协议对MSI Control字段的定义如图2所示,其中的MSI Enable必须使能,否则EP(endpoint)无法发送中断。Message Address (Lower), Message Address(Upper)和Message Data分别指的是memory write的TLP包的地址和数据。

f39e1c5061bd2ac9c0568fefc7b6bde7.png

图2

MSI中断的生成

在生成MSI中断时,首先需要打开IP的MSI功能,以AXI Bridege IP为例,如图3所示勾选Enable MSI Capability Structure。

1961e50409da43c6686f96ad242b04ba.png

图3

用于产生中断的信号如下图4所示,要发送MSI中断之前需要确定msi_enable是否被拉高,如果msi_enable没有被拉高,IP是无法发送中断的。Usr_irq_req需要一直保持为高直到确认中断已被成功处理,这里需要设置一个·机制,需要软件配合进行实现,如软件在处理完中断后要向FPGA内与逻辑约定好的寄存器写1,逻辑在检查到此寄存器被写1后,再将usr_irq_req置低。

f4dcb86fcda2bc64622162f76f3ca44c.png

图4

通常逻辑在发送MSI中断时不会检测msi_enable信号,此信号一般不会由EP端进行控制,使能MSI功能通常在软件侧进行操作,在linux系统中使用lspci -vvvs 指令即可查看MSI功能是否被使能,若打印信息如下图5所示,显示MSI:Enable-,则表示MSI功能未被使能,此时逻辑即使拉高usr_irq_req信号,主机也不会接收到中断。用户可以通过使用setpci指令来使能MSI功能。从图1和图2可得,Xilinx Pcie EP的MSI Enable在4a的第一位,可以使用setpci –s 24:00.0 4a.w=1 指令来使能MSI功能。使用上述指令写完4a寄存器后,图5的MSI:Enable-会变至MSI:Enable+,表示MSI功能使能成功。

6ae4b05093c3341ced6bf3e93e61e97d.png

图5

在Pcie链路稳定后,RP端将会发送配置写对EP端进行配置,图6为RP侧对EP侧中Pcie MSI的message address和message data字段的配置,RP首先对EP的4C寄存器全写0,表示Message Address(Lower)为全0,随后RP对EP的50寄存器写32‘h800,即Message Address(Upper)的值为32’h800,写完这两个寄存器后,RP也需要写对应的寄存器来进行记录,当随后接收到地址为64’h800_0000_0000 memory write TLP包后,会将此包解析为中断请求。RP在配置EP的message字段时,只需要将所要的message data写入到54寄存器,如图6所示,RP将32’h54写入到了EP的message data字段中,完成了EP侧的message address和message data的配置。

78d096c026bf231bc38d18c616a2bf30.png

图6

7cf8ce96b46540f99d0d4147a32f4cb9.png

图7

RP对EP的MSI功能的使能,可通过对EP的48寄存器写32’h10000即可,本篇文章参考的是PG213中Register(Type0:Enpoint)表格,不同厂商的MSI寄存器所在的位置通常不同,在配置时需要参考对应厂商的IP手册。如图7所示,RP侧在配置完EP的MSI control寄存器后,EP的msi_enable会变为高,至此RP完成了EP侧 MSI功能的必要配置。

在完成上述配置后,用户逻辑在拉高usr_irq_req后,会发现usr_irq_ack随后被拉高,这表示IP已完成中断的发送,如果在拉高usr_irq_req后,usr_irq_ack没有被拉高,又或者usr_irq_fail拉高,这种情况大概率是EP msi_enable没有被成功使能。在EP端拉高usr_irq_req信号一段时间后,会发现RP侧的interrupt_out信号拉高,如图8所示,表RP侧接收并识别了EP发送的中断信号。

56604cbcb3f532970ed1cd8d1247a9a0.png

图8

图9为在Pcie RP IP接口截取的TLP包,EP发送MSI中断即为发送memory write的TLP包到RP,RP在接收到此特定地址和数据的TLP包后,会将其解析为中断,Pcie的CQ接口接收到的包为对端发送的request 包,即EP侧发送的memory write TLP包可在此接口截取到。

77441fd631c536f56057325c714ad8dc.png

图9

在EP发送中断后,RP的m_axis_cq_tvalid会拉高,此时会收到TLP包,经过解析后发现此包的Request_Type为4’h1,在图10中查找,可发现此包为memory write类型的包,此包的地址在m_axis_cq_tdata的前64bit,地址为64’h800_0000_0000,与PR写入至EP配置空间的4C(Message Address (Lower))和50(Message Address (Upper))寄存器的数值一致。RP收到的第一拍数据byte_en为0,表示第一拍中不存在数据载荷,在第二拍中可以看到byte_en的数值为32’hf,表示此拍存在数据,m_axis_cq_tdata的前64bit即图中addr字段的显示的数值为64’h54,表示memory write的数据为54,与RP写入到EP配置空间的54(Message Data)寄存器的内容一致。

78e55a1a0a03e651a0238bebbfe107eb.png

图10

MSI和MSI-X中断都是EP端向RP端发送memory write的TLP包,所以bus master的功能也需要打开,在bus master打开后EP才可以主动发送request到RP端。

ef2293985342a7645dd98068696a340e.png

图11

d9f17b22797cd26790afbf29d50a2115.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>好的,我现在需要帮助用户找到关于Xilinx PCIe IP中断设计的指南,特别是针对UltraScale Devices Gen3 Integrated Block for PCI Express v4.4的。用户之前询问过文档的获取路径和核心资源,现在他们想进一步了解中断设计的具体信息或教程。 首先,我需要回顾之前的对话。用户已经知道PG156是主文档,提到了配置参数、架构和时钟约束,还提到了配套资源如PG194和Xilinx Answer 57945。现在用户的问题更具体,关于中断设计,所以我需要确定PG156是否包含相关内容,或者是否需要参考其他文档。 根据用户的引用[1],提到了PCIe AXI桥接模式,但用户明确说明这个引用仅供参考,不是他们的真正需求。所以重点还是应该放在用户当前的问题上:中断设计指南。 接下来,我应该检查PG156文档的结构,看看是否有关于中断的章节。通常,PCIe IP核的中断设计涉及Legacy中断MSI(Message Signaled Interrupts)和MSI-X。这些内容可能在配置章节或功能描述部分。 另外,用户提到的PG194(AXI Bridge for PCI Express Gen3 Subsystem)可能也包含与中断相关的内容,特别是当使用AXI接口时。需要确认是否需要参考PG194来补充中断设计的信息。 然后,用户可能需要具体的配置步骤,比如在Vivado中如何设置中断参数,如何连接中断信号,以及如何在软件端处理中断。这些步骤可能分散在用户指南的不同部分,或者需要参考应用笔记或示例设计。 还需要考虑用户的实际应用场景,比如他们是作为Endpoint还是Root Complex,中断类型的选择(Legacy, MSI, MSI-X),以及DMA传输是否涉及中断。这些因素会影响设计的具体实现。 此外,用户可能遇到常见问题,比如中断不触发或丢失,这时候需要检查中断向量表配置、地址映射是否正确,以及是否使能了相应的中断类型。参考设计或社区资源(如Xilinx论坛)可能提供解决方案。 最后,生成的相关问题需要围绕用户可能遇到的下一步问题,比如验证中断的正确性,调试方法,性能优化等,这有助于用户进一步探索。</think>关于Xilinx UltraScale系列Gen3 PCIe IP核的中断设计实现,请参考以下核心要点: --- ### 一、中断体系架构(基于PG156文档) PCIe IP核支持三种中断模式: 1. **Legacy中断** 通过$INTA\#$,$INTB\#$,$INTC\#$,$INTD\#$信号线实现,需在Vivado配置界面勾选"Legacy Interrupt Support"选项[^1] 2. **MSI中断** 符合PCIe 3.1规范的Message Signaled Interrupt,需配置: - MSI Capability Structure地址范围$(\text{Base Address} \in [0xFE000000,0xFEFFFFFF])$ - 最大支持32个中断向量$( \text{MSI Vector Width} \leq 5\text{bits} )$ 3. **MSI-X中断** 高级中断模式,需启用AXI Bridge功能(需参考PG194文档): ```tcl set_property CONFIG.en_msix {true} [get_ips pcie3_7x_0] ``` --- ### 二、Vivado配置流程 1. **IP核参数设置** 在"PCIe Block Configuration"标签页: - 勾选`Enable Interrupt Controller` - 设置中断类型:Legacy/MSI/MSI-X组合模式 $$ \text{Interrupt Type} = \begin{cases} 0x01 & \text{Legacy} \\ 0x11 & \text{MSI} \\ 0x21 & \text{MSI-X} \end{cases} $$ 2. **AXI接口连接** 当启用AXI Bridge模式时(需UltraScale+设备): - 连接`cfg_interrupt`/`cfg_interrupt_rdy`信号到用户逻辑 - 配置MSI-X表BAR空间: ```verilog assign msi_x_table_bar = 4'h2; // 使用BAR2存储MSI-X表 ``` --- ### 三、软件层关键操作 1. **中断服务例程注册** Linux驱动示例: ```c request_irq(pdev->irq, interrupt_handler, IRQF_SHARED, "pcie_irq", pdev); ``` 2. **MSI-X向量分配** 通过PCIe配置空间设置: ```c pci_alloc_irq_vectors(pdev, 1, 32, PCI_IRQ_MSIX); ``` 3. **中断触发验证** 使用`lspci -vvv`命令检查中断状态: ``` Capabilities: [a0] MSI-X: Enable+ Count=32 Masked- ``` --- ### 四、调试要点 1. **硬件信号监测** 使用ILA抓取中断信号时序: ```tcl create_debug_core u_ila_0 ila set_property port_width 8 [get_debug_ports u_ila_0/probe0] ``` 2. **常见故障排查** - 中断未触发:检查`cfg_interrupt_rdy`握手信号时序$(\text{tSETUP} \geq 2\text{ns})$ - MSI地址错误:验证配置空间`MSI_ADDR_L`/`MSI_ADDR_H`寄存器值 --- ### 五、扩展资源引用 1. **官方设计示例** - Xilinx Answer 64734提供DMA+中断参考设计[^1] - KCU105评估板包含中断测试用例`pcie_intr_test.c` 2. **进阶文档** - 《PCI Express Technology》第19章详解中断机制(ISBN 978-1-4302-4154-7) - PG194第4章描述AXI桥接模式下的中断增强功能[^1] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值