当前位置:首页>学习笔记>PCI-e学习笔记 -2 pcie分层结构

PCI-e学习笔记 -2 pcie分层结构

  • 2026-04-08 02:37:28
PCI-e学习笔记 -2 pcie分层结构

PCIe分层结构

PCIe(PCI Express)作为新一代高速串行总线标准,相较于传统PCI/PCI-X总线的并行传输方式,采用了点对点的串行连接模式,以数据包(Packet)为基本传输单元,有效简化了总线架构,去除了传统PCI总线中存在的INTx(中断请求)、PME#(电源管理事件)等边带信号,大幅提升了数据传输速率、灵活性和可靠性。PCIe总线的协议架构呈现分层设计,数据在发送和接收过程中,需依次经过事务层、数据链路层和物理层的处理,各层级分工明确、协同工作,共同完成数据的可靠传输。其中,事务层负责数据包的创建与解析,数据链路层负责数据包的校验与可靠传输,物理层负责信号的编码、发送与接收,三层架构相互独立又紧密关联,构成了PCIe总线的完整协议体系。

补充说明:PCIe的分层架构并非孤立存在,各层级之间通过严格的接口规范实现数据交互,每一层的输出都会作为下一层的输入,经过相应处理后再传递,确保数据从设备核心到物理介质的完整传输,同时也能实现接收端从物理信号到设备核心数据的反向解析。这种分层设计也是PCIe相较于传统PCI总线,在速率和可靠性上实现突破的核心原因之一。

一、事务层(Transaction Layer)

事务层是PCIe总线协议的最高层,直接与设备核心(Device Core)交互,核心功能是实现设备间的事务交互,包括事务层数据包(Transaction Layer Packet,TLP)的创建、编码、解码以及事务的管理与控制。事务层的核心目标是确保数据传输的正确性、有序性和高效性,同时提供流量控制、优先级管理等高级功能,适配不同类型数据的传输需求(如视频、音频、控制信号等)。

补充说明:事务层不直接与物理介质交互,其核心价值在于“抽象事务逻辑”,将设备间的交互需求(如读写数据、配置设备)转化为标准化的TLP数据包,屏蔽不同设备核心的差异,确保不同厂商的PCIe设备能够兼容通信。

1.1 TLP的结构与类型

TLP是事务层的核心传输单元,所有事务交互均通过TLP完成,其结构具有固定规范,确保不同设备间的兼容性。TLP的基本结构包括三部分:报头(Header)、可选数据载荷(Payload)和可选端到端校验码(ECRC,End-to-End CRC),且整个TLP的长度必须是4字节(DW,Double Word)的整数倍,这是PCIe协议对TLP的基本要求。

报头(Header):TLP的核心部分,长度固定为3DW或4DW,用于定义事务的关键信息,包括事务类型、传输优先级、目标地址、路由规则、数据长度以及其他数据包特征。报头的结构会根据事务类型的不同而有所差异,但核心字段(如事务类型、地址、优先级)是所有TLP共有的,确保接收方能够准确解析事务意图。

数据载荷(Payload):可选字段,用于携带实际需要传输的数据,长度范围为1~1024DW(即4~4096字节),具体长度由事务类型和传输需求决定。例如,内存读写事务中,Payload用于携带读写的数据;而配置事务中,Payload可能为空(仅需传输配置命令)。

端到端校验码(ECRC):可选字段,长度为1DW,用于对整个TLP(包括报头和Payload)进行端到端的校验,由发送端事务层生成,接收端事务层校验,用于检测数据在传输过程中(跨整个链路,而非单个设备)是否发生错误,进一步提升数据传输的可靠性。

补充说明:TLP的长度限制(4字节整数倍)是为了适配物理层的编码和解码机制,避免出现数据对齐错误;ECRC作为可选字段,通常在对数据可靠性要求较高的场景(如服务器、工业控制设备)中启用,普通消费级设备(如家用PC)可根据需求关闭,以节省传输开销。

根据事务的交互方式,TLP可分为两类:请求包(Request)和响应包(Response)。请求包由发起方(Requester)发送,用于向目标方(Completer)发起特定事务(如读写、配置等);响应包由目标方发送,用于对请求包进行应答,返回数据或错误信息。

1.2 事务类型(Request Types)

PCIe协议中定义了四种核心事务类型,其中前三种继承自传统PCI/PCI-X总线,第四种(Messages)是PCIe新增的事务类型,用于满足高速串行总线的特殊需求,具体分类及特点如下:

内存事务(Memory):最常用的事务类型,包括内存读(Memory Read)和内存写(Memory Write),用于实现设备与系统内存之间的数据传输,是PCIe设备(如显卡、网卡)与CPU、内存交互的核心方式。

IO事务(IO):继承自传统PCI总线,包括IO读(IO Read)和IO写(IO Write),用于实现设备与IO端口之间的交互,主要用于一些传统IO设备的兼容,在现代高速设备中使用较少。

配置事务(Configuration):包括配置读(Configuration Read)和配置写(Configuration Write),用于对PCIe设备的配置空间进行访问,实现设备的初始化、参数配置和状态查询。配置事务分为Type 0和Type 1两种,Type 0用于访问端点设备(Endpoint)的配置空间,Type 1用于访问桥设备(Bridge)的配置空间。

消息事务(Messages):PCIe新增事务类型,用于设备间的控制信号交互,无需地址信息,可实现中断通知、电源管理指令、错误报告等功能,相较于传统INTx中断,Messages具有更高的灵活性和效率。

补充说明:配置事务的Type 0和Type 1分工明确,Type 0适用于端点设备(如显卡、网卡等终端设备),Type 1适用于桥设备(如Root Complex、Switch),通过这种区分,确保配置指令能够准确到达目标设备,避免配置冲突;消息事务的无地址特性,使其能够快速传递控制信号,无需占用地址空间资源,提升总线响应速度。

根据事务是否需要响应,上述事务类型可分为Posted(非应答型)和Non-Posted(应答型)两类,这是PCIe提升总线利用率的关键设计:

Non-Posted(应答型):发起方发送请求包后,必须等待目标方返回响应包(Completion),才能确认事务完成,否则会一直等待(超时则报错误)。除内存写(Memory Write)和消息事务(Messages)外,其余所有事务类型均为Non-Posted类型。例如,内存读事务中,发起方发送读请求后,需等待目标方返回包含数据的响应包,才算完成一次事务。

Posted(非应答型):发起方发送请求包后,无需等待目标方返回响应包,即可认为事务完成,直接继续发送下一个数据包。仅内存写(Memory Write)和消息事务(Messages)属于Posted类型。这种设计大幅提升了总线利用率,因为发起方无需等待应答,可连续发送数据包,尤其适合大量数据写入的场景(如显卡向内存写入渲染数据)。

需要注意的是,Posted类型事务并非完全无需应答,目标方仍会通过数据链路层的Ack/Nak机制,对数据包的接收情况进行确认(确保数据包被正确接收),但这种确认属于链路层的底层确认,不影响发起方的事务进度,与Non-Posted类型的事务层应答(Completion)完全不同。

1.3 优先级控制(QoS)

为满足不同类型数据的传输需求(如视频、音频等实时数据需要优先传输,避免卡顿;普通数据可延迟传输),PCIe总线引入了QoS(Quality of Service,服务质量)机制,通过虚拟通道(VC,Virtual Channel)和传输类别(TC,Traffic Class)的组合,实现数据传输的优先级管理,确保高优先级数据获得足够的带宽和传输资源。

传输类别(TC,Traffic Class):用于对数据包进行优先级分类,PCIe协议支持8个TC级别(0~7),级别越高,优先级越高。设备可根据数据类型,为每个TLP分配对应的TC级别(如视频流分配TC7,普通数据分配TC0)。总线采用灵活的仲裁机制(如轮询、加权轮询、优先级仲裁等),优先调度高TC级别的数据包,确保实时数据的传输延迟。例如,在PC中,显卡的视频渲染数据会被分配高优先级,优先占用总线带宽,避免画面卡顿。

虚拟通道(VC,Virtual Channel):用于实现多数据流的复用,将同一条物理链路虚拟化为多个独立的逻辑通道,每个VC拥有自己的缓冲资源和流量控制机制,不同VC之间的数据传输互不干扰。PCIe协议支持最多8个VC(VC0~VC7),一个TC级别只能对应一个VC,即高优先级的TC会映射到对应的VC,确保高优先级数据不会被低优先级数据阻塞。VC的本质是一组独立的缓冲器,用于暂存对应TC的数据,实现数据流的隔离与优先级管控。

补充说明:TC与VC的映射关系可由设备固件或系统软件配置,默认情况下,TC0映射到VC0,TC1映射到VC1,以此类推。在实际应用中,可根据设备需求调整映射关系,例如将多个低优先级TC映射到同一个VC,节省缓冲资源,同时为高优先级TC分配独立VC,确保传输优先级。

1.4 TLP路由

PCIe总线采用点对点连接,设备间的TLP传输需要通过路由机制,确保数据包能够准确到达目标设备。PCIe协议定义了三种核心路由方式,适用于不同的事务类型和拓扑结构:

基于地址的路由(Address Routing):最常用的路由方式,适用于内存事务和IO事务。发送方在TLP报头中填写目标设备的内存地址或IO地址,链路中的桥设备(如Root Complex、Switch)根据地址信息,将TLP转发至目标设备。这种路由方式依赖于系统地址空间的分配,确保每个设备拥有唯一的地址范围。

基于ID的路由(ID-Based Routing):适用于配置事务和消息事务。发送方在TLP报头中填写目标设备的总线ID、设备ID和功能ID(BFD ID),桥设备根据ID信息,将TLP转发至对应的设备。这种路由方式无需地址信息,适合用于设备的配置和控制信号传输。

隐式路由(Implicit Routing):一种特殊的路由方式,适用于某些特定场景(如链路训练、电源管理指令)。TLP无需携带路由信息,仅在相邻设备之间传输,无需经过桥设备转发,例如数据链路层的DLLP、物理层的Ordered Set,均采用隐式路由方式。

补充说明:基于地址的路由依赖于系统地址映射表,Root Complex会为每个PCIe设备分配唯一的地址范围,桥设备通过查询地址映射表,确定TLP的转发路径;基于ID的路由中,BFD ID由总线ID(Bus Number)、设备ID(Device Number)和功能ID(Function Number)组成,每个设备的BFD ID在系统中唯一,确保路由的准确性;隐式路由仅适用于相邻设备间的底层交互,无需复杂的路由计算,提升交互效率。

1.5 流量控制(Flow Control)

PCIe总线采用基于信用(Credit-Based)的流量控制机制,用于解决发送方与接收方之间的缓冲资源不匹配问题,避免数据包丢失(如接收方缓冲满导致无法接收新数据包)。流量控制的核心思想是:发送方必须拥有足够的信用(Credit),才能发送数据包;每次发送数据包会消耗相应的信用,接收方接收数据包后,会通过流量控制报文(DLLP)释放信用,发送方再根据释放的信用继续发送数据包。

从数据传输的角度来看,网络中的核心资源包括数据通路(物理链路)和数据缓冲(接收方的缓冲器),流量控制主要针对数据缓冲资源进行管控,确保接收方有足够的缓冲空间接收数据包。

信用分类:每个虚拟通道(VC)都有一套独立的流量控制机制,信用分为三类,分别对应不同类型的TLP:Posted请求包(P)、Non-Posted请求包(NP)和响应包(Cpl);每类信用又分为报头信用(Header Credit)和数据载荷信用(Data Credit),报头信用对应TLP报头的缓冲空间,数据载荷信用对应TLP Payload的缓冲空间。

信用管理流程:链路初始化时,接收方会通过InitFC(Initial Flow Control)类DLLP,向发送方告知自身的缓冲资源总量(即初始信用值);发送方发送TLP时,根据TLP的类型和长度,消耗对应的信用(报头信用消耗1个/3~4DW报头,数据信用消耗1个/16字节Payload);接收方接收并处理TLP后,通过UpdateFC(Update Flow Control)类DLLP,向发送方释放已使用的信用;发送方收到信用释放信息后,更新自身的信用计数,继续发送新的TLP。

补充说明:信用值的大小由接收方的缓冲容量决定,缓冲容量越大,初始信用值越高,发送方可连续发送的数据包越多;不同VC的信用独立管理,避免因某一VC的信用耗尽,影响其他VC的数据包传输,进一步提升总线的稳定性和效率。

基于信用的流量控制机制,确保了发送方与接收方之间的协同工作,避免了数据包丢失和链路阻塞,提升了数据传输的可靠性和效率。

二、数据链路层(Data Link Layer)

数据链路层位于事务层和物理层之间,核心功能是确保TLP在相邻两个设备之间的可靠传输,相当于事务层和物理层之间的“桥梁”。数据链路层的主要工作包括:DLLP(Data Link Layer Packet,数据链路层数据包)的创建与解析、TLP的校验与重传、Ack/Nak握手机制的实现、链路初始化和电源管理等,其目标是屏蔽物理层的传输误差,为事务层提供可靠的链路服务。

数据链路层的“相邻设备”指直接连接的两个设备(如Endpoint与Switch、Switch与Root Complex),其可靠传输仅针对单段链路,而非整个PCIe链路;对于跨多段链路的TLP传输,需要每段链路的数据链路层分别实现可靠传输,最终确保整个链路的可靠性。

2.1 功能概述

数据链路层的核心职责是“纠错与可靠传输”,具体包括以下几个方面:

TLP处理:接收事务层发送的TLP,添加序列码(Sequence Number)和链路层校验码(LCRC,Link CRC),然后将处理后的TLP转发至物理层;同时接收物理层传来的TLP,校验LCRC和序列码,确认无误后剥离LCRC和序列码,将TLP转发至事务层;若校验失败,则触发重传机制。

DLLP处理:创建并发送DLLP,用于链路管理(如Ack/Nak应答、流量控制、电源管理等);接收物理层传来的DLLP,解析其类型和内容,执行对应的链路管理操作(如更新信用计数、进入低功耗状态等)。DLLP仅在相邻设备的数据链路层之间传输,无需路由信息,也不与事务层交互。

错误检测与重传:通过LCRC校验和序列码验证,检测TLP在传输过程中的错误(如比特翻转、数据丢失);对于错误的TLP,通过Ack/Nak机制通知发送方重传,确保TLP的可靠传输。

链路管理:参与链路初始化(与物理层协同)、链路宽度协商、电源管理(如进入低功耗状态L1/L23)等操作,确保链路的正常运行和节能。

序列码的作用是唯一标识每个TLP,避免TLP的重复接收或丢失;LCRC校验码针对TLP的报头和Payload进行校验,检测单段链路传输中的错误,与事务层的ECRC(端到端校验)形成互补,进一步提升数据传输的可靠性。

2.2 DLLP的结构与类型

DLLP是数据链路层的核心传输单元,用于链路管理,其结构与TLP不同,具有固定长度(8字节),包括帧标志(Framing)、DLLP类型字段、功能字段和16位CRC校验码四部分:

帧标志(Framing):包括开始标志(SDP,Start Data Link Packet)和结束标志(END),用于物理层识别DLLP的开始和结束,与TLP的STP(Start Transaction Packet)标志功能类似。

DLLP类型字段(Byte 0):用于定义DLLP的类型,不同类型的DLLP对应不同的链路管理功能,如Ack/Nak应答、电源管理、流量控制等。

功能字段(Bytes 1~3):根据DLLP类型的不同,存储对应的管理信息,如Ack/Nak的序列码、流量控制的信用值、电源管理的指令等。

16位CRC校验码(Bytes 4~5):用于对DLLP的前4字节(类型字段+功能字段)进行校验,确保DLLP自身的传输可靠性,由发送方生成,接收方校验。

补充说明:DLLP的固定长度(8字节)设计,简化了物理层的解析流程,无需动态判断数据包长度,提升链路管理的效率;16位CRC校验码专门针对DLLP自身进行校验,避免DLLP在传输过程中出现错误,确保链路管理指令的准确执行。

与TLP相比,DLLP的特点的是:长度固定、无路由信息、仅在相邻设备间传输、不携带用户数据,仅用于链路管理。根据功能不同,DLLP主要分为以下几类:

(1)Ack/Nak类DLLP

用于实现TLP传输的确认机制,是数据链路层可靠传输的核心,包括Ack(确认)和Nak(否定确认)两种类型:

Ack DLLP(类型码:00000000b):接收方成功接收并校验通过TLP后,发送Ack DLLP,告知发送方“该TLP已正确接收”,发送方无需重传。

Nak DLLP(类型码:00010000b):接收方接收TLP后,发现校验错误(LCRC错误)或序列码不匹配(如接收的TLP序列码与预期不符),发送Nak DLLP,告知发送方“该TLP传输失败,请重传”。

Ack/Nak DLLP中包含序列码(AckNak_Seq_Num),用于指定确认的TLP序号。发送方会为每个发送的TLP分配唯一的序列码(从0开始递增),接收方根据序列码确认具体是哪个TLP的传输状态:

若接收的TLP序列码与预期序列码(NEXT_RCV_SEQ)一致,且校验无误,发送Ack DLLP,序列码为该TLP的序号。

若接收的TLP序列码小于预期序列码(重复接收),发送Ack DLLP,序列码为预期序列码-1(即最后一个正确接收的TLP序号)。

若接收的TLP校验错误,或序列码大于预期序列码(丢失前序TLP),发送Nak DLLP,序列码为预期序列码-1,告知发送方重传该序号及之后的所有TLP。

发送方会缓存已发送但未收到Ack的TLP,若收到Nak DLLP,会重传对应的TLP;若超时未收到Ack/Nak DLLP,也会触发重传机制,确保TLP的可靠传输。

(2)电源管理类DLLP

用于实现链路的电源管理,控制链路进入不同的低功耗状态,降低功耗,包括以下几种类型:

PM_Enter_L1(类型码:00100000b):请求链路进入L1低功耗状态,L1状态下链路传输暂停,功耗较低,可快速唤醒。

PM_Enter_L23(类型码:00100001b):请求链路进入L2/L3低功耗状态,L2/L3状态下功耗更低,但唤醒时间更长。

PM_Active_State_Request_L1(类型码:00100011b):请求链路从低功耗状态唤醒,进入L1活跃状态。

PM_Request_Ack(类型码:00100100b):对电源管理请求的应答,告知发起方电源管理指令已接收并执行。

补充说明:L1、L2/L3低功耗状态的切换,需要链路两端的设备协同完成,发起方发送电源管理DLLP后,需等待接收方返回PM_Request_Ack,才能完成状态切换;L1状态适合短时间闲置场景(如设备暂时无数据传输),L2/L3状态适合长时间闲置场景(如设备休眠),兼顾节能和唤醒效率。

电源管理类DLLP的功能字段较为简单,主要用于传递电源管理指令,接收方收到后,会根据指令调整链路的功耗状态,实现节能。

(3)流量控制类DLLP

用于实现事务层的流量控制,传递信用信息,包括初始化流量控制(InitFC)和更新流量控制(UpdateFC)两类,每类又分为Posted(P)、Non-Posted(NP)和响应包(Cpl)三种,对应不同类型的TLP信用:

InitFC类DLLP:链路初始化时,接收方向发送方发送InitFC DLLP,告知自身的初始信用值(报头信用和数据信用),包括InitFC1-P、InitFC1-NP、InitFC1-Cpl、InitFC2-P、InitFC2-NP、InitFC2-Cpl,其中InitFC1和InitFC2用于区分不同的信用初始化阶段。

UpdateFC类DLLP:接收方处理完TLP后,向发送方发送UpdateFC DLLP,释放已使用的信用,更新发送方的信用计数,包括UpdateFC-P、UpdateFC-NP、UpdateFC-Cpl,对应不同类型TLP的信用释放。

补充说明:InitFC分为InitFC1和InitFC2,是为了确保信用初始化的完整性,InitFC1用于传递基础信用信息,InitFC2用于补充信用细节,避免初始化过程中信用信息丢失;UpdateFC的发送频率由接收方的缓冲使用情况决定,缓冲释放越快,UpdateFC发送越频繁,发送方可获得的信用越多,传输效率越高。

流量控制类DLLP的功能字段包含虚拟通道ID(VC ID)、报头信用(HdrFC)和数据信用(DataFC),VC ID指定对应的虚拟通道,HdrFC和DataFC指定对应的信用值,确保发送方能够准确更新自身的信用计数。

(4)厂商自定义DLLP

类型码为00110000b,用于厂商自定义的链路管理功能,不同厂商可根据自身需求,定义该类DLLP的功能字段,实现特定的设备交互逻辑(如厂商专属的错误诊断、调试等)。

厂商自定义DLLP的类型码固定,功能字段由厂商自行定义,主要用于设备的调试和故障排查,普通用户无需关注,仅在设备研发和维护时使用。

2.3 数据链路层工作流程

数据链路层的工作流程围绕TLP和DLLP的传输与处理展开,具体可分为发送流程和接收流程:

发送流程:事务层向数据链路层发送TLP → 数据链路层为TLP添加序列码和LCRC → 将处理后的TLP转发至物理层 → 同时缓存该TLP(用于重传) → 等待接收方发送的Ack/Nak DLLP → 若收到Ack,删除缓存的TLP;若收到Nak,重传该TLP;若超时,触发重传。

接收流程:物理层向数据链路层发送TLP和DLLP → 若为DLLP,解析类型并执行对应操作(如Ack/Nak处理、信用更新、电源管理) → 若为TLP,校验LCRC和序列码 → 若校验无误,剥离序列码和LCRC,将TLP转发至事务层,发送Ack DLLP;若校验失败,发送Nak DLLP,要求发送方重传。

补充说明:数据链路层的重传超时时间由PCIe协议规定,不同代际的PCIe超时时间略有差异,超时后发送方会再次重传,若多次重传失败,会向事务层上报链路错误,由事务层进行后续处理(如重置链路)。

通过上述流程,数据链路层实现了TLP的可靠传输,屏蔽了物理层的传输误差,为事务层提供了稳定、可靠的链路服务。

三、物理层(Physical Layer)

物理层是PCIe总线的最底层,直接与物理介质(如PCIe插槽、线缆)交互,核心功能是实现数据包(TLP、DLLP、Ordered Set)的物理传输,包括信号的编码、发送、接收、解码,以及链路的初始化、训练和状态管理。物理层分为两部分:逻辑物理层(PCS,Physical Coding Sublayer)和电气物理层(PHY,Physical Layer),两者协同工作,完成信号的转换与传输。

补充说明:物理层的传输介质主要包括PCIe插槽(板载设备连接)和PCIe线缆(外部设备连接,如显卡扩展线、NVMe转接卡线缆),不同传输介质的传输速率和距离有所差异,板载插槽支持更高速率,线缆传输距离更远(通常不超过10米)。

3.1 物理层整体架构

物理层的架构分为逻辑子层(PCS)和电气子层(PHY),两者之间定义了一个标准的物理接口(PIPE,PHY Interface for PCI Express),用于实现逻辑子层与电气子层的通信,确保不同厂商的物理层芯片能够兼容。

电气子层(PHY):属于模拟电路部分,包括收发器(Transceiver)、模拟缓冲器、串行/解串行器(SerDes,Serializer/Deserializer)以及10位接口。其核心功能是将逻辑子层输出的数字信号转换为模拟信号(发送端),或将接收的模拟信号转换为数字信号(接收端),实现信号的物理传输。SerDes是电气子层的核心器件,用于将并行的数字信号转换为串行信号(发送端),或将串行的模拟信号转换为并行数字信号(接收端),支持高速传输(如Gen1速率为2.5Gbps,Gen4速率为16Gbps)。

逻辑子层(PCS):属于数字电路部分,位于事务层/数据链路层与电气子层之间,核心功能是对数据包进行编码/解码、帧化处理、数据加扰/解扰,以及链路训练和状态管理。PCS通过PIPE接口与电气子层交互,将处理后的数字信号传递给电气子层,或接收电气子层转换后的数字信号并进行处理。

补充说明:PIPE接口是PCIe物理层的标准接口,定义了逻辑子层与电气子层之间的信号交互规范,不同厂商的PCS和PHY芯片只要符合PIPE接口标准,即可相互兼容,降低了设备研发成本;SerDes的传输速率决定了PCIe的代际,Gen1~Gen4的SerDes速率逐步提升,Gen5及以上速率则采用更先进的SerDes技术(如PAM4调制)。

从功能划分来看,从串行引脚到PIPE接口的部分称为物理层(PHY+PCS),从PIPE接口到事务层/数据链路层的部分称为数字控制器(Controller),两者协同完成物理层的所有功能。

3.2 功能详解

(1)编码与解码

为了提升信号传输的可靠性,减少电磁干扰(EMC),PCIe物理层采用了特定的编码方式,不同代际的PCIe采用不同的编码方式:

Gen1和Gen2(速率2.5Gbps、5Gbps):采用8b/10b编码方式,将每8位数据字节编码为10位代码(其中8位数据位,2位控制位)。这种编码方式的优点是:能够确保信号中0和1的数量大致均衡(DC均衡),减少信号的直流偏移,提升信号传输的稳定性;同时,控制位可以用于区分数据字符(D字符)和控制字符(K字符),便于物理层识别数据包的帧标志(如STP、SDP、END)。

Gen3和Gen4(速率8Gbps、16Gbps):采用128b/130b编码方式,将每128位数据编码为130位代码(其中128位数据位,2位同步位)。相较于8b/10b编码,128b/130b编码的编码效率更高(8b/10b编码效率为80%,128b/130b编码效率约为98.46%),能够支持更高的传输速率,同时仍能保证DC均衡和信号可靠性。

补充说明:DC均衡是指信号中0和1的数量大致相等,避免信号出现长期的高电平或低电平,减少信号衰减和电磁干扰;8b/10b编码的控制位(K字符)专门用于传输帧标志和控制信号,与数据字符(D字符)区分,确保物理层能够准确识别数据包边界;128b/130b编码的同步位用于接收端的时钟同步,提升高速传输时的同步精度。

发送端的PCS负责对数据包进行编码,将事务层/数据链路层传来的并行数据转换为编码后的串行数据,传递给电气子层;接收端的PCS负责对电气子层传来的编码信号进行解码,还原为并行数据,传递给数据链路层/事务层。

(2)帧化与去帧化处理

物理层需要对数据包(TLP、DLLP)进行帧化处理,添加帧标志,便于接收方识别数据包的开始和结束;接收方则需要进行去帧化处理,剥离帧标志,还原数据包的原始内容。

发送端帧化:对于TLP,PCS添加STP(Start Transaction Packet)标志作为数据包的开始,添加END标志作为数据包的结束;对于DLLP,PCS添加SDP(Start Data Link Packet)标志作为开始,添加END标志作为结束。同时,帧化过程中还会插入K字符(控制字符),用于区分数据和控制信息。

接收端去帧化:PCS检测接收信号中的STP/SDP标志,识别数据包的开始,检测END标志,识别数据包的结束,剥离STP/SDP、END标志和K字符,将还原后的TLP/DLLP传递给数据链路层。

补充说明:帧标志(STP、SDP、END)均采用K字符编码,与数据字符(D字符)区分,确保物理层能够快速识别数据包的边界;帧化过程中插入的K字符还用于同步,确保接收端与发送端的帧同步,避免帧偏移导致的数据包解析错误。

(3)数据加扰与解扰

为了减少信号的电磁干扰(EMC),避免出现长串的0或1(导致接收端无法同步时钟),PCIe物理层对发送的数据进行加扰处理,接收端进行解扰处理。加扰采用伪随机序列(PRBS,Pseudo-Random Binary Sequence),将数据与伪随机序列进行异或运算,打乱数据的0和1分布;接收端使用相同的伪随机序列,与接收的扰码数据进行异或运算,还原原始数据。

需要注意的是,加扰仅针对TLP和DLLP的数据部分,帧标志(STP、SDP、END)和控制字符(K字符)不进行加扰,确保接收方能够正常识别帧边界。

补充说明:PCIe物理层采用的伪随机序列(PRBS)由特定的多项式生成,不同代际的PCIe采用的多项式略有差异,但发送端和接收端的多项式保持一致,确保解扰能够准确还原原始数据;加扰处理不仅能减少电磁干扰,还能提升信号的抗干扰能力,适应高速传输场景。

(4)链路训练与状态管理(LTSSM)

PCIe链路在正常工作前,需要进行链路初始化和训练,确保链路的正常通信,这一过程由链路训练和状态状态机(LTSSM,Link Training and Status State Machine)负责,LTSSM位于物理层的PCS子层,是物理层的核心控制模块。

链路训练的主要目的是:协商链路宽度(如x1、x4、x8、x16)、协商传输速率、校准信号时序、确认链路两端的设备能力,确保链路能够稳定、高速地传输数据。链路训练的过程主要通过发送训练序列(TS,Training Sequence)完成,包括TS1和TS2两种训练序列:

TS1(Training Sequence 1):主要用于检测链路配置信息,包括链路宽度、传输速率、设备ID等,链路两端通过发送TS1,相互识别对方的能力,协商链路参数。

TS2(Training Sequence 2):用于确认TS1的检测结果,进一步校准信号时序,确保链路两端的同步,完成链路训练,使链路进入正常工作状态(L0状态)。

补充说明:链路宽度协商是指链路两端协商使用的通道数量(x1、x4等),通道数量越多,传输带宽越大;传输速率协商是指协商使用的PCIe代际(Gen1~Gen4),确保链路两端采用相同的传输速率,避免速率不匹配导致的传输错误;信号时序校准用于纠正链路两端的信号延迟,确保数据传输的同步性。

除了链路训练,LTSSM还负责链路的状态管理,包括链路的正常工作状态(L0)、低功耗状态(L0s、L1、L2/L3)、链路错误恢复状态等,根据链路的工作情况,自动切换链路状态,确保链路的可靠性和节能性。

(5)其他功能

通道映射与去偏移:对于多通道链路(如x4、x8),发送端将数据包的不同字节分配到不同的通道上并行传输(通道映射),提升传输速率;接收端则需要对不同通道的信号进行同步,纠正通道间的时序偏移(去偏移),将数据按正确顺序重组,确保数据包的完整性。

时钟补偿:由于链路两端的时钟存在微小差异(PPM差),长期传输会导致数据偏移,物理层通过发送SKIP序列(Skip Ordered Set)进行时钟补偿,SKIP序列用于调整接收端的弹性缓冲器,补偿时钟差异,确保数据同步。

特殊序列检测与生成:物理层需要生成和检测多种特殊序列,用于链路管理,如EIOS(Electrical Idle Ordered Set)、EIEOS(Electrical Idle Exit Ordered Set)、FTS(Fast Training Sequence)等:          

EIOS:发送端进入电气空闲状态(Electrical Idle)前发送的序列,用于告知接收端“链路即将进入空闲状态”,电气空闲状态下,发送端的差分电压接近0mV,降低功耗。

EIEOS:发送端从电气空闲状态唤醒时发送的序列,用于告知接收端“链路即将恢复工作”,接收端检测到EIEOS后,准备接收数据。

FTS:用于链路从低功耗状态(如L0s)快速唤醒,使接收端重新获得比特同步和符号同步,快速恢复正常传输。

接收端检测(Receiver Detect):用于识别接收端是否上电,发送端发送一个脉冲波形,通过检测反馈电流的大小,判断接收端是否上电(接收端上电时阻抗为50欧姆,未上电时阻抗为千欧级别),确保链路连接的有效性。

补充说明:通道映射时,发送端会将数据包按字节顺序分配到不同通道,接收端通过通道编号重组数据,去偏移操作通过调整各通道的信号延迟,确保所有通道的数据同步到达;SKIP序列的发送频率由时钟差异大小决定,时钟差异越大,SKIP序列发送越频繁;接收端检测功能可避免设备未上电时,发送端持续发送信号导致的功耗浪费和信号干扰。

3.3 物理层接收与发送流程

发送流程:数据链路层向物理层发送TLP/DLLP → PCS对数据包进行加扰、编码、帧化(添加STP/SDP、END标志) → 将处理后的数字信号传递给PHY → PHY的SerDes将并行数字信号转换为串行模拟信号 → 通过物理介质(插槽、线缆)发送出去。

接收流程:PHY通过物理介质接收串行模拟信号 → SerDes将串行模拟信号转换为并行数字信号 → 传递给PCS → PCS对信号进行解扰、解码、去帧化(剥离STP/SDP、END标志) → 检测数据包类型,将TLP传递给数据链路层,将DLLP传递给数据链路层进行处理。

物理层的发送和接收流程是对称的,发送端的每一步处理(加扰、编码、帧化、串并转换),接收端都会进行反向处理(并串转换、去帧化、解码、解扰),确保数据能够准确还原;SerDes的串并转换是高速传输的关键,并行数字信号便于上层处理,串行模拟信号便于长距离传输,两者结合兼顾了处理效率和传输距离。

四、PCIe三层架构总结

PCIe总线的事务层、数据链路层和物理层,从上到下依次协作,构成了完整的高速串行传输协议体系,各层级的核心职责和关系如下:

事务层:负责“what”——创建和解析TLP,定义事务类型、优先级和路由,实现设备间的事务交互,是数据传输的“决策层”。

数据链路层:负责“how reliable”——确保TLP在相邻设备间的可靠传输,通过Ack/Nak机制、LCRC校验和重传机制,屏蔽物理层的传输误差,是数据传输的“可靠保障层”。

物理层:负责“how to send”——将数据包转换为物理信号,通过编码、加扰、帧化等处理,实现信号的发送与接收,完成链路训练和状态管理,是数据传输的“物理载体层”。

PCIe三层架构的分工遵循“自上而下抽象、自下而上实现”的原则,事务层抽象事务逻辑,不关注底层传输细节;数据链路层屏蔽物理层误差,提供可靠传输服务;物理层实现底层信号传输,不关注上层事务逻辑,这种分工使各层级能够独立优化和升级。

三者的协同关系:事务层生成TLP,传递给数据链路层;数据链路层对TLP进行处理(添加序列码、LCRC),生成DLLP,传递给物理层;物理层对TLP和DLLP进行编码、加扰、帧化,转换为物理信号发送;接收端物理层接收信号并处理,传递给数据链路层;数据链路层校验并处理TLP和DLLP,传递给事务层;事务层解析TLP,完成事务交互。

这种分层设计的优势在于:各层级功能独立,便于模块化设计和维护;不同层级可独立升级(如物理层升级传输速率,不影响事务层和数据链路层);提升了协议的灵活性和兼容性,适配不同类型的PCIe设备和应用场景。

补充总结:PCIe总线的分层架构是其实现高速、可靠传输的核心,事务层的标准化TLP、数据链路层的可靠传输机制、物理层的高速信号处理,三者协同工作,使PCIe总线能够满足不同设备的传输需求,从消费级PC到工业服务器、高端显卡,均广泛采用PCIe总线作为核心传输接口,成为现代计算机系统中不可或缺的重要组成部分。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-08 23:17:02 HTTP/2.0 GET : https://67808.cn/a/479724.html
  2. 运行时间 : 0.083255s [ 吞吐率:12.01req/s ] 内存消耗:4,771.32kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=084a02eed04d4ed891a4c4d8ec9990b8
  1. /yingpanguazai/ssd/ssd1/www/no.67808.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.67808.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.67808.cn/runtime/temp/6df755f970a38e704c5414acbc6e8bcd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000526s ] mysql:host=127.0.0.1;port=3306;dbname=no_67808;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000825s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000357s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000288s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000477s ]
  6. SELECT * FROM `set` [ RunTime:0.000206s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000537s ]
  8. SELECT * FROM `article` WHERE `id` = 479724 LIMIT 1 [ RunTime:0.000486s ]
  9. UPDATE `article` SET `lasttime` = 1775661422 WHERE `id` = 479724 [ RunTime:0.004770s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000349s ]
  11. SELECT * FROM `article` WHERE `id` < 479724 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001832s ]
  12. SELECT * FROM `article` WHERE `id` > 479724 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000422s ]
  13. SELECT * FROM `article` WHERE `id` < 479724 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000673s ]
  14. SELECT * FROM `article` WHERE `id` < 479724 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001295s ]
  15. SELECT * FROM `article` WHERE `id` < 479724 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002680s ]
0.084842s