注意:部分图片和表述来源于网络,引用处会说明。

一、PCIE简介

PCIE总线技术,也叫计算机内部总线技术”Peripheral Component Interconnect”,即外围组件互联。PCIe一般用在大型数据中心,可以接显卡,网卡等片外设备。

1.1 PCIe相关概念

PCIe的基本结构包括根组件(Root Complex),交换器(Switch)和各种终端设备(Endpoint)

  • 设备类型
    PCIe子系统有4种设备类型,分别是Root Complex(RC),PCIe switch,PCIe End Point和PCIe Bridge。如下图所示,switch设备和RC设备可以向上或向下连接PCIe总线,PCIe总线的最底层为EP设备。
  1. RC
    在PCI规范中也被称为HOST主桥,RC模块需要接受操作系统相关的硬件信号(例如接口寄存器、状态寄存器、异常寄存器、数据缓存等,小型状态机等),主要完成的事务有:
    1)PCI域与IO域地址映射机制
    2)实现兼容PCI设备的中断映射以及PCIe中断写事务机制
    3)实现核与PCIe接口间的报文与消息类型转换
    4)存储PCIe设备的配置数据
  2. switch
  3. EP
    RC和EP在PCIE树形结构中扮演的角色不一样,Rp是根,EP是叶结点。从PCIE角度来看,RP可以发起CFG Rd和Wr,但是EP是不可以的。
    二者在物理层和部分链路层来说可以相互访问,但是传输层却不行
  4. bridge
    PCIe bridge可以用于扩展PCI总线,也可以用于连接慢速设备,在PCI总线树中起到呈上起下的作用。例如pcie转网卡bridge、pcie转USBbridge等

    如图,PCI总线可以通过PCI桥组成一个胖树结构,其中每一个桥片都是父节点,而PCI Agent设备只能是子节点,每一个PCI总线的下方都可以挂接一个到多个PCI桥,每个PCI桥都可以推出一条新的PCI总线。在同一条PCI总线上的设备之间的数据交换不会影响其他PCI总线
  • PCIe的数据传输速率计算
    如下图所示是PCI到PCIe 5.0的所有版本的带宽和数据传输频率。

    以PCIe3.0 x16情况举例,由于PCIe是一种全双共传输总线,因此计算其双向传输带宽和频率的关系为:8GHz * 16bit / 8bit * 2 = 32 GB/s
    实际上由于PCIe采取8/10bit、128/130bit编码传输,实际有效代码需要乘以对应的系数。
    参考链接:PCIe带宽的计算

  • NTB
    有些特殊场景下,比如传统存储系统中的多个控制器,它们之间需要同步很多数据和控制信息,希望使用PCI-E链路直接通信。但是在switch上有多个RC设备时并不可以直接通信,因为主机的BIOS或者OS在枚举同一堆PCIe总线内的设备,并为其分配访问地址,此时会出现冲突。为了满足这个需求,出现了NTB技术。
    其基本原理是地址翻译,因为两个不同的系统(术语System Image,SI)各有各的地址空间,会产生重叠。那么只要 在PCI-E Switch内部将对应的数据包进行地址映射翻译,便可以实现双方通信。这种带有地址翻译的桥接技术叫做None Transparent Bridge,非透明桥。

  • PCIe总线的缺点

  1. 由于采用了基于总线的共享传输模式,在PCI总线上不可能同时传送两组以上的数据,当一个PCI设备占用总线时,其他设备只能等待;
  2. 随着总线频率从33MHz提高到66MHz,甚至133MHz(PCI-X),信号线之间的相互干扰变得越来越严重,在一块主板上布设多条总线的难度也就越来越大;
  3. 由于PCI设备采用了内存映射I/O地址的方式建立与内存的联系,热添加PCI设备变成了一件非常困难的工作。目前的做法是在内存中为每一个PCI设备划出一块50M到100M的区域,这段空间用户是不能使用的,因此如果一块主板上支持的热插拔PCI接口越多,用户损失的内存就越多;
  4. PCI的总线上虽然有buffer作为数据的缓冲区,但是它不具备纠错的功能,如果在传输的过程中发生了数据丢失或损坏的情况,控制器只能触发一个NMI中断通知操作系统在PCI总线上发生了错误
  • ARI功能
    参考链接:link

  • PCI和PCIe的关系

  1. PCI是共享型总线,多个设备共享一条总线,这种情况下必然存在总线总裁。PCIe则是点对点连接,一个设备直接连接到另一个设备,不存在总线竞争和仲裁。

  2. PCI总线上是单向传输,任意时刻只有一个方向的传输,PCIe则是任意时刻都可以双向传输。

  3. PCI有很多的边带控制信号,如FRAME#, IRDY#, TRDY, STOP#等。PCIe总线上传输的都是基于包(packet),控制和其他处理都嵌入在包里。

1.2 PCIe板级电气特征

本节主要参考《PCI Express® Card Electromechanical Specification 3.0》一文,主要针对PCIe的板级设计

参考链接:PCIe控制器——PCIe电气特征

1.3 PCIE 硬件主要模块

PCIe的设计可以分为controller和PHY,整体设计较为复杂,一般可向IP厂商定制设计,controller和PHY模块的接口是PIPE接口

1.3.1 PCIE控制器

控制器逻辑包含了IP的host设计,以及PCIe协议中所规定的事务层、数据链路层、物理层实现逻辑,通常包含如下模块:

  • reset逻辑:通常会设置复位逻辑,通过总复位控制子复位;
  • debug逻辑:监测IP状态,供设计人员debug用;
  • msg处理逻辑:IP的某些信号由message处理,有CPU内核来处理;
  • 子系统配置处理逻辑;
  • 错误处理逻辑:查找寄存器,并记录,产生中断;
  • MSI逻辑:对地址,数据通道进行监测;
  • 中断逻辑:IP中某些中断可以合并;
  • PHY控制逻辑:直通PHY模块的寄存器配置和控制;
  • DFT:IP中会提供专门用于DFT的引脚。

1.3.2 PHY模块

PHY模块用于连接协议层和链路,包含了驱动和锁相环、串转并、并转串等所有与接口操作相关的所有电路。
从PCIe协议来讲,物理层分为逻辑子模块和物理子模块,逻辑子模块又分为媒介访问层(MAC)和物理编码子层(PCS);PMA层包含串行器/解串器(SerDes)和其他模拟电路;

  • PCIE Serdes
    SerDes(Serializer-Deserializer)是串行器和解串器的简称,串行器(Serializer)也称为SerDes发送端(Tx),(Deserializer)也称为接收端Rx。
    SerDes的主要构成可以分为三部分,PLL模块,发送模块Tx,接收模块Rx。

1.3.3 PIPE接口

physical interface of PCI Express,PCIe的PHY层接口。

1.4 PCIe地址空间划分

参考链接:1.4 PCIE控制器——地址空间划分

二、PCIe控制器的层次结构

PCI Express是一种分层协议,由设备核心层、传输事务层,数据链路层和物理层组成。

2.1 设备核心层(Host)

该层级术语PCIe的上层逻辑,负责报文生成、报文分发、控制序列。

  1. outbound机制,接收系统总线请求
  2. inbound机制,接收协议层的解析包数据

2.2 事务层(TL)

传输事务层定义了PCIe总线使用的总线事务,这些事务可以通过switch等设备传送到RC等其他PCIe设备,RC也可以使用这些事务访问其他PCIe设备。其主要工作包括:

  1. 传输层接收来自核心层的数据,将其封装为TLP(Transaction layer packet)后发向数据链路层
  2. 传输层接收DLL层来的TLP并解析,分离事务后发送给核心层。
  3. 虚拟信道管理机制
  4. 流量控制,追踪credit值,使用流量控制机制保护PCIe链路的使用效率
  5. 处理PCIe总线的“序”

2.2.1 TLP相关

当PCIe设备相互访问时,传送的数据报文将被事务层打包为一个或多个TLP,这些TLP会向下层次继续传送,最终通过PCIe总线发送给被请求设备。
实际上一个完整的TLP包由多个字段组成,并且这些字段分别由三个层次各自构建,最后经过物理层形成最终的TLP。

  • TLP格式
    传输事务层完成TLP主要的部分header段和data段。
    详情参考链接: PCIe控制器——数据报文TLP
  • 数据负载相关

当数据传输量较大时,需要根据负载的大小和限制调整为多个TLP进行传输。PCIe设备含有“Max_Payload_Size”和“Max_Payload_Size Supported”两个参数,这两个参数分别在Device Capability和Device Control寄存器定义,这两个寄存器在PCIe Capability结构中。

PCIe设备发送数据报文是,使用Max_Payload_Size参数决定TLP的最大有效负载,当PCIe设备所要传输的数据大小超过Max_payload_Size时,这段数据将被分割为多个TLP进行发送。
Max_Payload_Size supported参数固化在硬件中,指Max_Payload_Size的最大值。

2.2.2 总线事务类型

参考链接:2.2.2 PCIe控制器——事务层——总线传输事务

2.2.3 ECRC

END-to-END CRC,该校验码是根据header和data部分计算出来的端到端数据,将其附加到TLP末尾,方便数据包的接收方进行ECRC字段检验。

2.3 数据链路层(DLL)

数据链路层保证来自于事务层的数据报文完整可靠的发送到下一层。
参考链接:2.3 数据链路层(DLL)模块分析

  • 主要功能
  1. 接收TL层的TLP报文数据,集成sequence number前缀和CRC后缀
  2. 接收PL层的数据报文,解析成TLP、LCRC、sequence number等字段
  3. 使用ACK/NCK协议保证报文的可靠性
  4. 流控制管理,根据DLLP报文更新credit值
  5. 发送、接收、解析多种DLLP(Data link layer packet)
  6. LCRC/ECRC对TLP报文错误监测和修正
  7. 链路电源管理DLLP报文

2.3.1 DLLP报文

参考链接:PCIE控制器——数据链路层——DLLP报文

2.3.2 LCRC

LINK CRC
参考链接:LCRC和ECRC的特征

2.3.3

2.3.4 flow control

参考链接:2.3.4 PCIe控制器——数据链路层——flow control

2.3.5 ACK/NAK

ACK/NAK用来保证TLP报文在链路上传输的可靠性,ACK DLLP表示TLP接收完成,NAK就是Negative acknowledge,表示拒绝接收这个TLP。
TLP packet承载真正的命令(例如MRd,CfgRd等)和响应,每一个TLP发出后,接收端要回复一个DLLP ACK表示收到了TLP,如果接收端收到的TLP有bit error或者CRC error,那么就会回复NAK
参考链接:ACK/NAK应用场景

2.3.6 电源管理

2.4 物理层(PL)—— MAC层

物理层用于连接DLL和PHY层,决定了PCIe接口总线的链路训练、热插拔等物理特性。

  1. 接收DLL层的数据报文(DLLP和TLP),在开头和结尾个添加1 byte的开始和结束字符,并通过pipe接口发送出去
  2. 接收来自pipe接口的报文数据(DLLP和TLP),并解析发送到DLL
  3. 字符序列集进行复位后的链路训练和初始化
  4. 链路训练

2.4.1 链路训练

参考链接:2.4.1 PCIE控制器——物理MAC层——链路训练

2.4.2 物理层数据包(PLP)

物理层的数据包其实是一系列字符序列集,是按一定顺序排列的信息集合,长度为4B整倍数

  • 主要功能有:
  1. 链路训练和初始化
  2. 管理链路的电源状态,在设备空闲状态时将设备置于空闲低功耗状态,或者从低功耗状态唤醒链路
  • PLP类型
    TS0 / TS1 / TS2:用于链路初始化、训练、协商等,TS0出现于PCIe 6.0。
    STP:物理层组装TLP事务的头字符
    SDP:物理层组装DLLP事务的头字符
    END:
    EDB:
    SKP:补偿不同链路之间的延时而添加的字符
    PAD:数据流中的填充字符

2.4.3 热插拔

参考链接:hotpulg——pcieTech

有如下三个功能:

  1. 不必关闭系统既可以替换发生故障的扩展卡
  2. 修复期间可保证QoS和其他服务继续运行
  3. 对故障设备相关的设备惊醒关闭和重启

2.5 物理层(PL)—— PCS层

其中PCS层功能有:

  1. 接收处理协议层的数据
  2. 进行8b/10b、128b/130b编码
  3. PHY层功能可配置

2.6 物理层(PL)—— PMA层

PMA层功能有:

  1. 数字信号和模拟信号转换

2.6.1 PCIe的参考时钟

Serdes 所用时钟由 PHY 模块内的PLL生成,PLL的参考时钟可以由自身板级提供、外部背板提供或从接收数据流中恢复出来。
参考时钟架构可参考链接:PCIe 参考时钟架构 (Refclk Architecture)

三、PCIE运行机制

3.1 reset机制

PCIe设备可以根据当前的设备的运行状态选择合适的复位方式,PCIe总线提供多种复位方式的主要原因是减小PCIe设备的复位延时。其中传统复位方式的延时大于FLR方式。

3.1.1 传统复位方式(Conventional Reset)

  • fundamental reset
    有cold reset和hot reset两种方式,Cold Reset使用的时间最长,而Hot Reset使用的时间最短。
  1. cold reset
    当一个PCIe设备的Vcc电源上电后,处理器系统将置该设备的PERST#信号为有效,此时将引发PCIe设备的复位方式。此时,所有使用Vcc进行供电的寄存器和PCIe端口逻辑将无条件进入初始状态。
    但是使用这种方式依然无法复用使用Vaux(备用电源)供电的寄存器和逻辑,这些寄存器和逻辑只能在处理器完全掉电时彻底复位
  2. warm reset
    在PCIe的设备完成上电后,也可能重新进行Fundamental Reset,这种复位方式也被称为Warm Reset。
  • non-fundamental reset物理层的Link初始化
  1. hot reset
    当PCIe设备出现某种异常时,可以使用软件手段对该设备进行复位,此时链路将会断开,PCIe控制器内部除地址映射相关的寄存器外其余寄存器将会被复位。
    具体复位过程:第一种方法是系统软件在client逻辑中产生hotreset信号,另一种方法是将Bridge Control Register 的Secondary Bus Reset位置为1,该桥片将secondary总线上的PCI/PCIe设备进行Hot Reset。PCIe总线将通过TS1和TS2序列对下游设备进行Hot Reset。在TS1和TS2序列中包含一个Hot Reset位。当下游设备收到一个TS1和TS2序列,而且Hot Reset位为1时,下游设备将使用HotReset方式进行复位操作。

3.1.2 FLR reset

除了传统的复位方式之外,PCIe总线还提供了FLR( Function Level Reset)方式,只对控制器的某些功能进行复位,链路训练不受影响。在多RC设备系统中,任务在指定的分区中运行,当这个任务执行完毕后,系统软件需要调整硬件资源的分区。此时受到影响的PCIe设备需要使用FLR方式复位内部的逻辑,以免造成对新的分区的资源污染,并保护之前任务的结果。
系统软件通过填写某些寄存器,如synopsys 的PCIe的IP是可以PCIeExpress Capability 的Device Control Register的第16bit完成FLR。支持FLR方式的PCIe设备需要在其BAR空间中提供一个寄存器,当系统软件对该寄存器的Function LevelReset位写1时,PCIe设备将使用FLR方式复位PCIe设备的内部逻辑。FLR方式对PCIe设备是可选的。

  • 不会被FLR方式复位的寄存器
    这些寄存器通常和PCIe链路相关
  1. Sticky寄存器。
    与传统的复位方式相同,FLR方式不能复位这些寄存器,但是系统软件对部分Sticky寄存器进行修改。当Vaux(备用电源)被移除后,这些寄存器中的保存的数据才会丢失;
  2. HwIint类型的寄存器
    在PCIe设备中,有效配置寄存器的属性为HwIint,这些寄存器的值由芯片的配置引脚决定,后者上电复位后从EEPROM中获取。Cold和Warm Reset可以复位这些寄存器,然后从EEPROM中从新获取数据,但是使用FLR方式不能复位这些寄存器。
  3. 还有一些特殊的配置寄存器不能被FLR方式复位,如Max_Payload_Size、RCB和一些与电源管理、流量控制和链路控制直接相关的寄存器。

3.2 PCIe报文路由方式

在一个PCIe网络中,存在两类地址空间,一类是设备自身的地址空间,可称为设备存储器域空间;另一类是PCIe链路上的地址空间,可称为PCIe域地址空间。网络中的设备要发出请求需要将存储器域的地址转换为PCIe域的地址,而接收设备需要将PCIe域地址转换为自身存储器域的地址。

PCIe设备间的数据传输主要通过TLP报文进行,基于switch的PCIe网络中TLP要在多个设备间发送和接收,该过程势必要有多种TLP报文路由方式。

参考链接:报文路由方式

3.3 Bifurcation

pcie通道拆分技术,芯片厂商通过一种叫做bifurcation(分叉)的方式让主板厂商可以灵活配置,组合或者拆分PCIe通道,决定各个设备和PCIe插槽的通道宽度。实现该功能一般有三种方式:Hard Strap,Soft Strap或者Wait for BIOS。

  1. Hard Strap
    通过硬件连接的方式决定PCIe通道的连接方式,一旦定义将不可修改。例如英特尔酷睿CPU通过CFG[6:5]的值决定bifurcation是一个x16还是2个x8等
  2. Soft Strap
    通过软件的方式修改bifurcation的方式,这种配置一版储存在BIOS Image前面的discription中,可以通过工具修改,这种修改一般和BIOS无关,修改后直接烧录BIOS即可
  3. Wait for BIOS
    纯BIOS设置,即在PCIe training之前,通过BIOS对PCIe RC的寄存器进行设置来确定通道宽度。

3.4 Peer to Peer传输技术

点对点传输,即分属于不同PCI总线域的PCI设备可以直接进行数据交换,即两个EP设备直接进行传输

应用范例

  1. flashtec NVRAM闪存加速卡
    参考链接:PMC flashtec NVRAM

3.5

3.6 Power Management

PCIe定义了link power management states取代了bus power management states

3.7 虚拟化技术(SR-IOV)

即virtual function技术,例如可以通过SR-IOV技术在一个服务器中虚拟化多个网卡VF的技术来实现多张网卡。使用 SR-IOV 技术,将 PF 映射为多个 VFs,使得每个 VF 都可以绑定到 VM(虚拟机)。如此,吞吐量性能和 CPU 使用效率确实得到了改善,但灵活性却降低了,复杂性也增加了。并且,大多数 SR-IOV 网卡最多有效支持 1Gb 以太网端口的 8-16 个 VFs,和 10Gb 以太网端口的 40-64 个 VFs。网卡借助SR-IOV技术可以通过软硬件协同的方式加速虚拟化环境中的网络性能。

参考链接:微软VF驱动描述

3.8 错误处理

参考链接:3.8 PCIe控制器——运行机制——错误处理

四、PCIE 软件驱动

4.1

4.2 PCIe设备初始化过程

下面总结linux启动时PCIe设备初始化的一般性过程。

4.2.1 boot阶段

  • 1)上电复位
    该过程为冷复位,除了sticky寄存器,其他使用Vcc进行供电的寄存器和PCIe端口逻辑将进入初始状态
  • 2)HOST寄存器配置
    一般在处理器应用中,通常系统一上电CPU执行boot程序时会初始化PCIe HOST的寄存器;而在非处理器应用中,通常将PCI配置信息存放在板上的ROM中,系统上电时,ROM中的配置信息写到PCI设备的配置空间作为初始值,该过程由硬件完成
  • 3)link初始化和Training
    复位结束后,物理层将会启动link,一旦link的两端设备都进入初始化link Training状态,为了使数据链路层和事务层准备好连接,两端的设备将会依次进行物理层的Link初始化以及VC0的Flow Control初始化。
  • 4)枚举PCI总线上的设备,建立PCIe设备树
  • 5)SoC加载运行操作系统后,OS会重新枚举PCIe设备(也可以调用ROM程序枚举的结果),

4.2.2 总线枚举

总线枚举的目的是确定PCIe树形结构的拓扑,发现所有设备及其功能,通常在操作系统启动过程中进行,如下为枚举过程:

  • 利用深度优先算法遍历整个PCI设备树,从Root Complex出发,寻找设备和桥,即首先读第0号总线的0号设备0号功能的配置空间
  1. Device ID为非全F表示有设备
  2. 通过HeaderType判断是桥还是EP
  • 修改0号总线0号设备0号功能(P2P桥)的Primary、Secondary和Subordinate总线号
  • 读1号总线的0号设备0号功能的配置空间
  1. 如果识别到该设备是EP设备,会根据device ID、vender ID和Class Code确定驱动;通过BAR寄存器探索设备实现的Memory或IO空间
  2. 通过capabilities寄存器组探索设备实现的其他功能
  • 完成一个RC或者桥设备的节点上总线枚举后,会配置该HOST设备的BAR寄存器和memory limit

4.2.3 注意点

注意:在上电复位后,一些设备在能对请求响应前需要一些额外的时间恢复,以下是一些时序准则
对应设备方面:

  1. 有些设备需要在reset结束后在20ms内进入LTSSM Detect阶段
  2. 连接的两个设备可能会在不同时间退出reset,此时每个设备都需满足在20ms进入 Link Training阶段
  3. 在Link Training快结束时,设备必须能够接收和处理TLPs和DLLPs

对于系统方面:

  1. 为了便于设备进入内部初始化,系统软件在被允许向设备提交配置请求前,需要在设备结束复位后等待指定的周期

摘自《PCI_Express_Baser3.0_10Nov10.pdf》
• With a Downstream Port that does not support Link speeds greater than 5.0 GT/s, software
20 must wait a minimum of 100 ms before sending a Configuration Request to the device
immediately below that Port.
• With a Downstream Port that supports Link speeds greater than 5.0 GT/s, software must
wait a minimum of 100 ms after Link training completes before sending a Configuration
Request to the device immediately below that Port. Software can determine when Link
25 training completes by polling the Data Link Layer Link Active bit or by setting up an
associated interrupt (see Section 6.7.3.3).
• A system must guarantee that all components intended to be software visible at boot time
are ready to receive Configuration Requests within the applicable minimum period based on
the end of Conventional Reset at the Root Complex – how this is done is beyond the scope
30 of this specification.
• Note: Software should use 100 ms wait periods only if software enables CRS Software
Visibility. Otherwise, Completion timeouts, platform timeouts, or lengthy processor
instruction stalls may result. See the Configuration Request Retry Status Implementation
Note in Section 2.3.1.

  1. RC设备或者系统软件在上电复位后需要等待至少 1.0 s才可以决定某个不能成功返回状态的设备是故障设备。具体时间取决于Link training完成的快慢
  2. 当请求配置接在PCIe Bridge后的是恶被是,时序参数Trhfa必须满足

当Link正在进行时,必须满足以下准则:

  1. 无论什么原因,当Link结束时,事务层和数据链接层必须进入DL_Inaction状态
  2. 对于Root或者switch Downstream端口,设置与Port相关的Bridge Control register的第二个Bus Reset将会引起hot reset

4.3 linux驱动

参考链接:Linux——驱动开发——PCIe驱动代码分析

五、PCIe控制器的验证

pcie的验证可分为硅前验证和硅后验证。由于PCIe协议较为复杂,IP RTL代码量较大,可配置性较高,这给硅前验证中只进行单一层次的验证带来了较大的挑战。因此为了提高覆盖率,可结合PCIe主要模块级验证,PCIe子系统级验证以及SoC集成后的系统级验证三个层次进行验证。

  • 模块级验证主要参考PCIe协议划分和RTL模块架构进行分模块,针对该模块本身的功能点进行验证。
  • 子系统级验证主要针对PCIe IP子系统层级进行验证,对IP内部经过多个模块数据通路的功能点进行验证,这些功能点通常也是PCIe标准协议定义的功能点。
  • 系统级验证层次更高,也可分为裸机验证和os驱动验证,裸机验证将针对IP连接SoC的接口提取功能点并进行验证,os驱动验证将对IP性能、设备连通性、驱动兼容性等进行验证

总之,无论哪个层级验证,最重要的是提取功能点,而从模块级到子系统级再到系统级的提取功能点将是一个从具象到抽象的过程,如何把握需要验证人员有一定经验。

5.1 模块级验证

5.2 子系统级验证

参考链接:

5.3 系统级验证

5.4 硅后验证

  • PCIe实物测试
    参考链接:是德U4305B

  • 示波器
    参考链路:详解PCIE3.0 system board Tx信号测试连接-手动切换码型

六、问题整理

6.1 PCIe协议问题

  1. 遍历PCIe总线,枚举PCIe树是否是CPU通过RC设备进行?
    答:CPU执行扫描程序,请求通过RC转换成TLP报文发送到pcie链路中,通过完成报文确定是否存在EP或者桥设备

6.2 调试问题

6.2.1 Link training

  • 没有link建立的原因
  1. reset issue导致
  2. receiver detection issue
  3. link quality issue
  4. link在不正确的link width下training,通常是lane(s) reliability issue所致
  • reset后设备速率不够快的原因

原因:host设备在外部pcie设备ready之前就开始枚举,导致总线上的设备并没有按最快速度进行link

  • speed变成8.0 GT/s或者equalization失败
    原因:link的速度自动返回到2.5 GT/s

  • LTSSM进入recovery状态的原因

  1. link quality issue(Encoding error/ framing error)
  2. Flow control timeout
  3. Device / link partner malfunction
  4. Low-power entry / exit issue

SoC设计与验证——大型IP——PCIE控制器相关推荐

  1. SoC设计与验证——概览索引

    一个完整的SoC通常就是我们所说的CPU,它包含了处理器内核等其他的设备或存储器 1. SOC设计 本节主要对SoC设计的整体架构进行概述,具体详情请参照标题下的链接. 1 处理器核心 Core在总线 ...

  2. SOC设计与验证【单核、双核架构】

    基于RISCV的SOC 设计 与 验证 项目 此项目需要预先储备下面4种知识: Verilog        SV        C语言        Perl语言 一:SOC系统定义 二:实验目的 ...

  3. SoC设计与验证流程

    Contents: 1.SOC设计前端流程 2.为什么verilog可以描述硬件? 3.在SOC设计中使用verilog,和FPGA为对象使用verilog,有什么区别? 4.SOC设计和FPGA开发 ...

  4. soc设计与验证(一)

    soc概述 soc即系统级芯片又称为片上系统(system on chip),即将系统的主要功能集成到一块芯片上.至少包含一个处理器核(微处理器/微控制器/数字信号处理器). 现在的soc上可整体实现 ...

  5. ASIC/SoC设计

    IP/ASIC/SoC设计流程与环境平台 下图是目前行业主流的IP/ASIC/SoC设计流程以及行业认可的EDA技术平台,其中整合了Synopsys.Mentor Graphics以及Cadence公 ...

  6. AXI_05 AXI_FULL_IP的设计与验证

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:   https://blog.csdn.net/qq_33486907 ...

  7. 【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造

    [安全硬件]Chap.6 IC和半导体产业的全球化:芯片生产猜疑链与SoC设计流程:可能会存在的安全威胁: 硬件木马.IP盗版.逆向工程.侧信道攻击.伪造 背景 1. IC和半导体产业的全球化 2. ...

  8. 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator

    一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...

  9. soc 设计soc设计 uml实务手册_采用 USB4 技术升级 SoC 设计

    Synopsys 技术营销经理 Morten Christensen 简介 USB4™ 是 USB 开发者论坛 (USB-IF) 制定的一种新的连接标准.USB4 支持多种高速接口协议,包括 USB4 ...

  10. soc 设计soc设计 uml实务手册_SoC技术的发展

    一.什么是SoC 1.SoC技术的发展 集成电路的发展已有40多 年的历史,它一直遵循摩尔所指示的规律推进,现已进入深亚微米,乃至纳米阶段. 由于信息市场的需求和微电子自身的发展,引发了以微细加工(集 ...

最新文章

  1. 联想输入快捷键_UG软件F8快捷键和笔记本电脑F8快捷键冲突的解决方法
  2. Python的隐藏功能
  3. 字节跳动面试题:用归并排序判断冒泡排序的轮数
  4. 【MySQL数据库】一天学会MySQL笔记——MarkDown版
  5. 解决Vue3创建项目后的Error: Cannot find module ‘vue-loader-v16/package.json‘问题
  6. shell取当前月份第一天_红帽认证8.0版本即将发布!Ansible和shell脚本自动化将重点考察...
  7. nginx正则表达式
  8. SecureCRT远程连接Ubuntu,SecureCRT开发环境配置
  9. 径向基(Radial basis function)神经网络、核函数的一些理解
  10. python定义集合_Python - 集合
  11. ASP.NET AJAX Advance Tips Tricks (9) DropDownList在Firefox下的奇怪现象和解决方案——谁的BUG?...
  12. web 前端必备学习指南-精华
  13. Linux 网络编程 —— 套接字的介绍
  14. 掌门教育微服务体系 Solar
  15. python爬虫论文总结与展望怎么写_汉语言文学毕业论文总结与展望怎么写
  16. 重装系统后如何恢复oracle10g数据…
  17. linux时钟变慢,linux系统时钟变慢的思考和解决方案
  18. 苹果从中国赚六百多亿美元,却在转移生产线,该减轻对它的依赖了
  19. 原创|一个统计查询模块基于设计模式的抽象设计
  20. 1341:【例题】一笔画问题——欧拉(回)路

热门文章

  1. 大学生必学练习题 - C 语言经典50例
  2. android 不压缩保存图片格式,Android图片处理——压缩、剪裁、圆角、保存
  3. CBoard框架使用总结一
  4. IC卡读写器c++builder源代码续
  5. php 限定字符长度,php-限制字符串长度
  6. matlab进行差分检验,热传导方程几种差分格式的MATLAB数值解法比较
  7. VMware激活密钥
  8. 如何通过 SSH 连接到 Docker 容器
  9. windows环境如何测试端口
  10. python的题库_python题库-Python,题库