PCIe时钟与中断

pcie接线

REFCLK-/REFCLK+: 是一组低压差分信号,PCIe主板提供的REFCLK信号必须满足PCIe规范中的要求。

PERST#: 信号用于复位PCIe设备,同时也指示了系统主电源的稳定时间。

WAKE#: 信号用于给PCIe主机提供复位信号,由PCIe设备驱动,当PCIe主机接收到该信号后,需要向PCIe设备提供主电源和参考时钟,以激活PCIe链路。WAKE#信号也可以和OBFF机制配合使用,当PCIe主机需要调整设备的缓冲行为(如刷新或填充缓冲区)时,可以通过WAKE#信号通知PCIe设备。这样,设备能够在不需要发送或接收数据时进入更低功耗的状态,并在必要时迅速被唤醒以处理数据。

CLKREQ#: 信号由PCIe设备驱动,用于向PCIe主机请求参考时钟,以便于PCIe接口发送和接收数据。 当PCIe设备处于L1 PM Substates状态时,CLKREQ#拉高,参考时钟被关闭,此时PCIe链路处于不活跃状态,PCIe主机或者PCIe设备拉低CLKREQ#后,PCIe设备将退出L1 PM Substates状态。

PRSNT1#和PRSNT2#: 是PCIe卡热插拔探测引脚。

PCIE_TX-/PCIE_TX+和PCIE_RX-/PCIE_RX+: 两组差分信号组成一个lane,用于收发数据

Host跟slave: 两个设备的连接组成一个link,一个link会包含一个或多个lane

 PCIe 参考时钟架构

PCIe Serdes(串行解串器)在时钟驱动下收发串行数据流。Serdes 所用时钟由 PHY 内的 PLL 生成,PLL 的参考时钟由外部提供或从接收数据流中恢复出来。来简单看下PCIE时钟的三种架构

 Common Refclk Architecture

即同源参考时钟架构,PCIe收发设备共用一个时钟源,PCIe链路的RC和EP都使用同一个参考时钟源发出的时钟,是目前是使用最为广泛的方案,也是Spec推荐使用的,三种 PCIe 参考时钟架构中,Common Clock 是最为常用的一种时钟架构。

 Separate Clock Architecture

即独立参考时钟架构,收发端采用独立的参考时钟。 PCIe Spec强烈不推荐使用这种参考时钟架构,尽管这是其提出的三种参考时钟架构之一。PCIe链路的RC和EP使用独立的参考时钟

 Data Clock Architecture

即数据时钟参考时钟架构,仅发送端需要 Refclk,接收端无需外部 RefClk,接收端物理层从数据流中恢复出时钟提供给 CDR(Clock Data Recovery,时钟数据恢复)作为参考时钟。Data Clocked Refclk Architecture在PCIe2.0中首次,PCIe3.0中保留了这项技术,该方案仅适用于 Gen2 及 Gen3,单 lane 单向最高速率 8GT/s。但是在PCIe4.0又丢弃了。因此不推荐使用

PCIe中断

        在PCIe中有三种中断方式,分别是INTx、MSI、MSI-X,下面将对三种中断类型分别进行描述

        在PCIe规范中,虽然已经没有了INTA~D#信号线,但仍然实现了INTx中断且使用配置空间的Interrupt Pin寄存器,以保证对PCI设备的兼容性。实现方式为:INTx中断消息报文 <-> PCIe桥 <-> INTA~D#中断信号。

        PCle总线提供 Legacy中断方式的主要原因是,在PCle体系结构中,存在许多PCI设备,而这些设备通过PCIe桥连接到PCle总线中。这些PCI设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。

        当PCIe桥收到PCI设备的INTx信号后,并不能将其直接转换为MSI/MSI-X中断报文,因为PCI设备使用INTx信号进行中断请求的机制是外部物理电平触发方式,而MSI/MSI-X中断机制是根据报文信息,来内部自己触发。这两种中断触发方式不能直接进行转换。因此当PCI设备的IN-Tx信号有效时,PCle桥将该信号转换为Assert_INTx报文,当这些INTx信号无效时,PCIe 桥将该信号转换为 Deassert_INTx报文。

        当然pcie设备之间,也不是一定要用msi , 比如pcie虽然没有intx线路;如果pcie接口的wifi的固件就只支持了inta ,就会基于报文的方式传输中断信号,再由pcie控制器产生中断信号给中断控制器

INTx

INTx一般被称为传统(lagacy)中断,它有四根线,分别是通过INTA、INTB、INTC、INTD来上报中断,一个简单的例子如下图所示:在PCI总线中,PCI设备配置空间的Interrupt Pin寄存器记录该设备究竟使用哪个INTx信号;;就跟普通中断一样,在中断处理函数中去读设备的对应寄存器,判断是什么原因触发的中断,然后做各种对应的处理

MSI

MSI(Message Signaled Interrupt)与传统的中断方式相比,MSI 提供了更高的灵活性和性能,有以下几个优势:
1、 设备向内存写入数据,然后发起引脚中断,有可能会出现CPU收到中断时,数据还没有达到内存。而使用MSI中断时,产生中断的写不能越过数据的写(PCIE/PCI的transaction order rule可以保证),驱动可以确信所有的数据已经达到内存。
2、 基于引脚的传统中断会被多个设备所共享,中断共享时,如果触发了中断,linux中需要一一调用对应的中断处理函数,这样会有性能上的损失,而MSI不存在共享的问题。
3、 多功能的PCI设备,每一个功能最多只有一个中断引脚,当具体的事件产生时,驱动需要查询设备才能知道是哪一个事件产生,这样会降低中断的处理速度。而一个设备可以支持32个MSI中断,每个中断可以对应特定的功能

MSI-X

        MSI和MSI-X机制的基本原理相同,其中MSI中断机制最多只能支持32个中断请求,而且要求中断向量连续,而MSI-X中断机制可以支持更多的中断请求,而且不要求中断向量连续,这也是最重要的一点。MSI-X在PCIe3.0提出,MSI-X机制对MSI做出了一些升级和改进

        当PCIe设备需要产生一个中断时,则会生成一个Memory Write类型的TLP包;但该操作实际上是通过 Message Transaction 形式进行的,因为它传递的是中断请求的信息,而不仅仅是数据会把Message Address Register、Message Data Register拷贝到TLP对应字段,然后发送给RC,RC收到TLP包并解析,然后通过ITS模块产生LPI中断,最后CPU就能触发对应的中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值