PCIe热插拔技术

某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。

注:本文将简单地介绍一下PCIe总线的热插拔机制,关于热切换(Hot Swap),请参考PCIe Spec的相关章节。

PCIe设备使用两种电源信号供电,分别是Vcc与Vaux,其额定电压为3.3V。其中Vcc为主电源,PCIe设备使用的主要逻辑模块均使用Vcc供电,而一些与电源管理相关的逻辑使用Vaux供电。在PCIe设备中,一些特殊的寄存器通常使用Vaux供电,如Sticky Register,此时即使PCIe设备的Vcc被移除,这些与电源管理相关的逻辑状态和这些特殊寄存器的内容也不会发生改变。

在PCIe总线中,使用Vaux的主要原因是为了降低功耗和缩短系统恢复时间。因为Vaux在多数情况下并不会被移除,因此当PCIe设备的Vcc恢复后,该设备不用重新恢复使用Vaux供电的逻辑,从而设备可以很快地恢复到正常工作状状态。

PCIe链路的最大宽度为×32,但是在实际应用中,×32的链路宽度极少使用。在一个处理器系统中,一般提供×16的PCIe插槽,并使用PETp0~15、PETn0~15和PERp0~15、PERn0~15共64根信号线组成32对差分信号,其中16对PETxx信号用于发送链路,另外16对PERxx信号用于接收链路。除此之外PCIe总线还使用了下面重要的辅助信号-PRSNT1#和PRSNT2#信号。

PCIe总线的热插拔主要指的是PCIe卡设备的热插拔,以及相关的实现机制等。PRSNT1#和PRSNT2#信号与PCIe设备的热插拔相关。在基于PCIe总线的Add-in卡中,PRSNT1#和PRSNT2#信号直接相连,而在处理器主板中,PRSNT1#信号接地,而PRSNT2#信号通过上拉电阻接为高。PCIe设备的热插拔结构如图所示。


 

如上图所示,当Add-In卡没有插入时,处理器主板的PRSNT2#信号由上拉电阻接为高,而当Add-In卡插入时主板的PRSNT2#信号将与PRSNT1#信号通过Add-In卡连通,此时PRSNT2#信号为低。处理器主板的热插拔控制逻辑将捕获这个“低电平”,得知Add-In卡已经插入,从而触发系统软件进行相应地处理。

Add-In卡拔出的工作机制与插入类似。当Add-in卡连接在处理器主板时,处理器主板的PRSNT2#信号为低,当Add-In卡拔出后,处理器主板的PRSNT2#信号为高。处理器主板的热插拔控制逻辑将捕获这个“高电平”,得知Add-In卡已经被拔出,从而触发系统软件进行相应地处理。

不同的处理器系统处理PCIe设备热拔插的过程并不相同,在一个实际的处理器系统中,热拔插设备的实现也远比图4‑3中的示例复杂得多。值得注意的是,在实现热拔插功能时,Add-inCard需要使用“长短针”结构。

如图4‑3所示,PRSNT1#和PRSNT2#信号使用的金手指长度是其他信号的一半。因此当PCIe设备插入插槽时,PRSNT1#和PRSNT2#信号在其他金手指与PCIe插槽完全接触,并经过一段延时后,才能与插槽完全接触;当PCIe设备从PCIe插槽中拔出时,这两个信号首先与PCIe插槽断连,再经过一段延时后,其他信号才能与插槽断连。系统软件可以使用这段延时,进行一些热拔插处理。

注:PCIe总线除了有一个Base Spec之外,还有一个关于PCIe卡设备的Spec——PCIe Card ElectroMechanical Spec(CEM)。

与PCI总线不同,PCIe总线采用的是点到点的连接(Point-to-Point Connections),因此其并不像PCI总线那样需要用于卡设备的隔离逻辑(Isolation Logic),但是每个端口(桥设备中的,如Root和Switch)都必须包含一个独立的热插拔控制器(Hot Plug Controller),如下图所示:

当然,热插拔不仅仅是硬件的事,其需要软硬件协同实现。要想实现热插拔功能,操作系统、主板热插拔驱动器、PCIe卡设备驱动以及PCIe卡硬件功能都必须支持热插拔,缺一不可。从PCIe卡设备硬件功能的角度来看,其需要支持Quiesce命令、Pause命令(可选)、Start命令和Resume命令。

桥设备(Switch等)中还需要支持热插拔控制器(Hot Plug Controller),如下图所示,这里就不详细介绍了。具体请参考PCIe Spec相关章节内容。

配置空间中,与热插拔相关的寄存器如下图所示:

NOW现在行动!
推荐阅读
【Vivado那些事】如何查找官网例程及如何使用官网例程【Vivado使用误区与进阶】总结篇【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键SystemVerilog数字系统设计_夏宇闻 PDFVerilog 里面,always,assign和always@(*)区别图书推荐|ARM Cortex-M0 全可编程SoC原理及实现
简谈:如何学习FPGA1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程谈谈Xilinx FPGA设计的实现过程
Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目
AD936x+ZYNQ搭建收音机(一)AD936x+ZYNQ搭建OpenWIFI
Verilog 版本:Verilog-95、Verilog-2001与System Verilog区别简谈
FPGA时钟设计方案无招胜有招-Vivado非工程模式下的详细设计
追寻ARM的起源-Acorn电脑简史及FPGA实现
面试中经常会遇到的FPGA基本概念,你会几个?
Xilinx FPGA MIPI 接口简单说明
介绍一些新手入门FPGA的优秀网站
Vivado ML(机器学习) 2021尝鲜
推荐一些可以获取免费的国外的原版书籍(电子版)网站
【Vivado那些事】FPGA的配置方式
FPGA 的重构
浅析FPGA局部动态可重构技术
ISP(图像信号处理)算法概述、工作原理、架构、处理流程
国产CPU概括
浅谈PCI Express体系结构(一)
浅谈PCI Express体系结构(二)
从电子游戏历史看IC发展的助推剂
点击上方字体即可跳转阅读
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值