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

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

3天内不再提示

PCIe总线中的链路初始化与训练

SwM2_ChinaAET 来源:未知 作者:李倩 2018-06-05 09:06 次阅读

PCIe总线中的链路初始化与训练(Link Initialization & Training)是一种完全由硬件实现的功能,处于PCIe体系结构中的物理层。整个过程由链路训练状态机(Link Training and Status State Machine,LTSSM)自动完成,也就说基本没有数据链路层和事务层啥事。

LTSSM在PCIe体系结构中的位置的示意图如下:

在系统复位后,会自动进行链路训练,以达成以下目标:位锁定(Bit Lock)、字符锁定(Symbol Lock,Gen1 & Gen2 Only)、块锁定(Block Lock,Gen3 Only)、确定链路宽度(Link Width)、通道位置翻转(Lane Reversal)、信号极性翻转(Polarity Inversion)、确定链路的数据率(Data Rate)和通道对齐(Lane-to-Lane De-skew)等功能。

下面依次的,简要地介绍一下这些目标。

注:本次连载博文主要Gen2为主,所以一些和Gen3相关的内容只会简单提及,并不会深入地介绍,有兴趣的可以阅读PCIe Spec V3.0或者Mindshare的相关书籍。

首先是

位锁定(Bit Lock):

前面的文章中提到过,PCIe总线采用了一种嵌入式时钟的机制,即发送端只向接收端发送数据信号,并不发送时钟信号(时钟信号影藏在数据信号中)。接收端可以通过CDR(Clock and Data Recovery)逻辑将时钟从数据流中恢复出来,然后再用恢复出来的时钟对数据信号进行采样。当然,时钟恢复需要一定的时间,才能保证时钟信号与数据信号的相位对应关系符合要求。一旦CDR完成了时钟的恢复,我们就说PCIe总线完成了位锁定。

字符锁定(Symbol Lock):

完成了位锁定之后,只是能够准确地识别出数据流中的0和1,还是不知道发送的内容是个啥。对于Gen1&Gen2来说,采用的8b/10b编码,即传输的数据是以10bit为一个字符。LTSSM可以引导物理层相关逻辑通过识别COM字符(K28.5)来确定每个字符的开始与结束为止,即字符锁定。

链路宽度(Link Width):

由于PCIe允许将x1的PCIe卡插入x4、x8甚至是x16的PCIe插槽中。因此在链路训练与初始化过程中,相邻的两个PCIe设备需要相互通信来确定其支持的最大链路宽度。

注:实际上PCIe Spec还允许采用动态带宽的机制,即允许链路宽度和数据率动态调整,以实现降低功耗等功能。

通道位置翻转(Lane Reversal):

有的时候两个PCIe设备的通道排列位置可能不太一致,PCIe Spec允许对默认的通道排列位置重新排列,如下图所示。但是,从大部分的PCIe设备(PCIe卡和插槽等)都是按照统一的标准实现的,一般不会出现这种情况,因此这一功能是可选的。

信号极性翻转(Polarity Inversion):

前面的文章中介绍过,PCIe收发的都是差分信号,有的时候Link两端的设备的对应信号的极性可能是相反的。因此,PCIe Spec允许在链路训练与初始化的时候,对其进行调整,如下图所示。和通道位置翻转(Lane Reversal)不一样的是,信号极性翻转(Polarity Inversion)并不是一个可选项,而是所有标准PCIe设备都应支持的。

链路的数据率(Data Rate):

系统刚复位的时候,链路训练和初始化都是基于2.5G T/s的速率的。如果Link两端的设备都支持更高的速率,则会自动进入Re-training状态,以重新切换速率。

注:PCIe Spec规定,高速率的PCIe设备必须能够向下兼容。即Gen2必须同时支持2.5G T/s和5G T/s。

通道对齐(Lane-to-Lane De-skew):

PCIe链路完成字符锁定后,还需要进行通道对齐。因为有的通道的信号可能先到达,有的可能后到达。PCIe Spec规定PCIe链路应有能力对一定范围了的Lane-to-Lane Skew进行移除,使得各个Lane上的信号是同步的。关于通道对齐,会在后续的博文中详细地介绍。

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

    关注

    4983

    文章

    18288

    浏览量

    288527
  • 总线
    +关注

    关注

    10

    文章

    2712

    浏览量

    87223
  • PCIe
    +关注

    关注

    13

    文章

    1083

    浏览量

    80864

原文标题:【博文连载】PCIe扫盲——链路初始化与训练基础(一)

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

收藏 人收藏

    评论

    相关推荐

    在modelsim初始化ROM

    要在modelsim初始化ROM,夏雨闻书上说的是用系统任务readmemb,可是我用了怎么就不能初始化呢,求大神指教!
    发表于 05-13 18:01

    SRIO重复初始化不通了

    专家好: 调试接口时经常会出现重新load程序的情况,发现如果SRIO双方已经进行数据通信,重新加载程序进行SRIO初始化后,srio不通了,需要重新断电重连,这样调试起来比较浪费时间,请问有什么好的方法,可以节省调试时间
    发表于 01-07 11:15

    使用iMPACT无法初始化

    使用iMPACT我无法初始化。在初始边界扫描时,弹出以下错误:有许多未知设备被检测到。按是继续或按否停止。我还收到以下错误:错误:iMPACT - 硬件配置可能存在问题。电缆,扫描
    发表于 09-16 10:32

    初始化影响64bit ||的边界扫描时候显示找不到电缆,请建议我如何处理。

    使用64bit(labtools)冲击初始化边界扫描时,弹出一个错误对话框,说没有找到电缆,请检查电缆设置。所以现在我卸载了xilinx 14.7并安装了vivado 2015.3,在此我没有发现影响64位来
    发表于 04-09 06:16

    PCIe 3.0/4.0的均衡的工作原理

    动态均衡技术,在spec中被称作“Link Equalizati on”(均衡,简称为LEQ)。本文理论篇主要介绍PCIe 3.0/4.0的
    发表于 11-25 06:19

    labview顺序结构初始化问题

    Labview顺序结构,我想让第一帧执行完成后,程序初始化,再执行第二帧,以此类推执行九帧,因为是一个AO,AI口不停地接收发送,不初始化的话,前一帧的值会影响后面的值,请问大家,这种初始化
    发表于 12-25 11:37

    端口初始化初始化中断

    目录PA9(TX),PA10(RX)1、端口初始化2、初始化外设3、初始化中断4、使能中断5、使能外设5、发送数据PA9(TX),PA10(RX)1、端口初始化1.开启PA时钟2.PA
    发表于 08-16 06:54

    CAN总线通信初始化配置流程

    一、CAN总线通信初始化配置流程CAN总线GPIO和时钟配置CAN总线RX0 中断优先级配置CAN总线
    发表于 08-19 08:22

    基于stm32CAN总线初始化

    1、CAN总线初始化void can_init(void){CAN_InitTypeDefCAN_InitStructure;CAN_FilterInitTypeDefCAN_FilterInitStructure;/* CAN register init */CAN_
    发表于 08-19 07:49

    CAN总线配置的初始化程序

    想要实现只接受一个扩展ID发来的数据,尝试对CAN初始化进行配置,配置的初始化程序如下: u32 ext_id=0x1800f001;//需要接收的特定ID数据
    发表于 08-19 09:05

    CAN总线初始化

    1、CAN总线初始化void can_init(void){CAN_InitTypeDefCAN_InitStructure
    发表于 08-19 07:17

    初始化封装

    初始化封装您可以在 Mask Editor 的 Initialization 窗格添加 MATLAB® 代码以初始化封装模块。Simulink® 将执行这些初始化命令以便在关键时刻(
    发表于 08-27 07:17

    PCIe设备的低功耗状态

    standby。对于所有的pcie设备都是强制性的。L0s是一个单向的pcie状态。所以设备在初始化L0s时..
    发表于 12-28 06:18

    PCIe总线必须要先完成Flow Control初始化

    由于VC0是默认使能的,所以当Flow Control初始化开始时,其会被自动的初始化。其他的Virtual Channel是可选的,只有当被配置为使能的时候才会被初始化
    的头像 发表于 05-24 09:18 7570次阅读
    <b class='flag-5'>PCIe</b><b class='flag-5'>总线</b>必须要先完成Flow Control<b class='flag-5'>初始化</b>

    神经网络如何正确初始化?

    初始化训练深度神经网络的收敛性有重要影响。
    的头像 发表于 05-17 16:32 7775次阅读
    神经网络如何正确<b class='flag-5'>初始化</b>?