0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MSI中断简介和生成方法

Hack电子 来源:Hack电子 2024-02-25 09:24 次阅读

MSI中断简介

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

3064ed72-d2bb-11ee-a297-92fbcf53809c.png

图1

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

308694fe-d2bb-11ee-a297-92fbcf53809c.png

图2

MSI中断的生成

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

3091ce96-d2bb-11ee-a297-92fbcf53809c.png

图3

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

30aa494e-d2bb-11ee-a297-92fbcf53809c.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功能使能成功。

30b65aa4-d2bb-11ee-a297-92fbcf53809c.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的配置。

30c47ef4-d2bb-11ee-a297-92fbcf53809c.png

图6

30da4e96-d2bb-11ee-a297-92fbcf53809c.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发送的中断信号。

30f1a636-d2bb-11ee-a297-92fbcf53809c.png

图8

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

30fc0554-d2bb-11ee-a297-92fbcf53809c.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)寄存器的内容一致。

310f5b68-d2bb-11ee-a297-92fbcf53809c.png

图10

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

311a5fd6-d2bb-11ee-a297-92fbcf53809c.png

图11

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602997
  • 中断
    +关注

    关注

    5

    文章

    898

    浏览量

    41470
  • msi
    msi
    +关注

    关注

    0

    文章

    26

    浏览量

    29867
  • AXI
    AXI
    +关注

    关注

    1

    文章

    127

    浏览量

    16622

原文标题:如何使用AXI Bridge IP 发送MSI中断

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCIE MSI中断的配置

    小弟学习K1_STK(从官网下的最新的例程keystone软件开发包)里面的PCIE(例程),这个是例程里面RC端和EP端用的是MSI中断。PCIE_int_cfg.number_tx_MSI
    发表于 06-21 03:49

    PWM生成方法

    目录一.PWM简介PWM生成方法二、PWM控制单色LED—单色呼吸灯硬件说明代码分析进行验证示波器查看波形呼吸灯一.PWM简介PWM是 Pulse Width Modulation 的缩写,中文
    发表于 08-09 08:34

    OTA完整包与差异包的生成方法分别是什么

    OTA完整包的生成方法是什么?OTA差异包的生成方法又是什么?
    发表于 02-10 07:04

    PCIe设备发出MSI-X中断请求的方法

    x86处理器如何处理MSI-X中断请求PCIe设备发出MSI-X中断请求的方法与发出MSI
    发表于 02-16 06:36

    基于混沌序列的种子密钥表生成方法

    本文提出一种基于混沌动力学模型的加密算法种子密钥表生成方法。该方法通过扩展Tent 映射生成混沌序列,选取二值化后序列一段数据构造安全算法的种子密钥表。实验表明,
    发表于 09-02 08:21 19次下载

    两种空间矢量脉宽调制生成方法的分析与比较

    两种空间矢量脉宽调制生成方法的分析与比较
    发表于 03-30 18:24 11次下载

    一种多尺度多视点特性视图生成方法的研究和应用_谢冰

    一种多尺度多视点特性视图生成方法的研究和应用_谢冰
    发表于 03-15 09:27 0次下载

    一种新颖的自动化攻击图生成方法_武健

    一种新颖的自动化攻击图生成方法_武健
    发表于 03-19 11:45 0次下载

    一种新的DEA公共权重生成方法

    针对传统数据包络分析(DEA)公共权重生成方法不同时具备线性、规模无关优点的问题,根据军事训练绩效评估需求,提出了一种新的DEA公共权重生成方法。该方法以DEA有效单位为计算基础,首先对训练数据进行
    发表于 01-13 11:03 0次下载

    PCIe中断机制介绍(MSI

    当Mask Bits将相关的中断向量(Interrupt Vector)屏蔽后,该MSI将不会被发送。软件可以通过这种方式来使能或者禁止某些MSI的发送。如果相关中断向量没有被屏蔽,则
    的头像 发表于 08-31 15:07 2.1w次阅读
    PCIe<b class='flag-5'>中断</b>机制介绍(<b class='flag-5'>MSI</b>)

    教大家如何处理x86处理器中MSI-X中断请求

    x86处理器如何处理MSI-X中断请求PCIe设备发出MSI-X中断请求的方法与发出MSI
    的头像 发表于 08-12 11:23 7246次阅读

    简述MSIMSI-X中断机制

    MSIMSI-X中断机制 在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而
    的头像 发表于 08-10 17:54 5811次阅读

    基于Python-casacore的射电测量集文件生成方法

    基于Python-casacore的射电测量集文件生成方法(开关电源技术试卷)-该文档为基于Python-casacore的射电测量集文件生成方法讲解文档,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看………………
    发表于 09-15 13:11 3次下载
    基于Python-casacore的射电测量集文件<b class='flag-5'>生成方法</b>

    x86处理器如何处理MSI-X中断请求

    x86处理器如何处理MSI-X中断请求PCIe设备发出MSI-X中断请求的方法与发出MSI
    发表于 12-17 18:28 9次下载
    x86处理器如何处理<b class='flag-5'>MSI</b>-X<b class='flag-5'>中断</b>请求

    PWM信号生成方法 PWM调制原理讲解

    PWM(脉冲宽度调制,Pulse Width Modulation)是一种重要的模拟信号电平数字编码方法,在电子技术和控制领域具有广泛应用。以下是对PWM信号生成方法和PWM调制原理的介绍: PWM
    的头像 发表于 11-28 16:34 880次阅读