手机网站优势官方百度
一、协议层
PCIe架构分为三层:事务层(transcation layer),数据链路层(data link layer)和物理层(physical layer)。每一层又分为两部分,outbound和inbound,分别处理向外传输信息和接受信息。
在发射端,device core产生的数据包从事务层到数据链路最终到物理层,在每一层都会加上额外的tag,而在接收端该过程则相反。每个Endpoint和switch的每个port都需要实现这三层。
所以一个数据会经历下面打包过程
上游给到一笔数据,先是事务层给他加上header和ECRC校验信息,构成TLP,给到数据链路层后又加一个包序列号和校验,然后传到物理层,加上start和end,最后把这些数据给到各个lane上加扰码,最终通过总线传输出去。事务层就好像是填写寄件单,会写明收件人地址和寄件内容,数据链路层就是为包裹加编号,物理层就相当于实际运输包裹。
1.1 事务层
主要参与TLP的编码和解码,每个TLP都有一个唯一的标识符,支持四种基本的事务类型,内存读写的memory,输入输出操作I/O,配置空间访问configuration,消息事务message,同时也对应这四种地址空间。作用相当于操作系统里的文件读写请求 → 它把这些请求“打包”成标准格式的事务包。
分为两类,non-posted是需要completion返回响应,posted是不需要completion返回响应。
1.2 数据链路层
主要是为了确保TLP可靠传输,会添加序列号和校验信息,确保数据包按序无误传输。检测到错误后会通过链路重传机制(ACK/NAK协议)实现错误恢复。
注意,DLLP并不是对TLP的封装或者附加,两者是独立的。DLLP是在发送设备和接受设备的数据链接层之间传输,不会跨switch或bridge。每个“点对点物理链路”都维护一套独立的 DLLP 机制。比如当发送方发送一个 TLP 后,接收方的数据链路层会用DLLP进行回复,如果是ACK DLLP就表示接收成功,如果是 NAK DLLP表示接收失败,需要重传。
1.3 物理层
主要是进行串并转换,电气信号的处理等等。分为逻辑子层和电气子层,逻辑子层进行数据包的串/并转换,加扰/解扰,编码/解码,电气子层包含差分驱动器和接收器,用于管理模拟信号特性(如阻抗匹配、时钟恢复)。
1.4 Quality of Service(QoS)
用于在复杂系统中利用 PCIe的Traffic Class 和 Virtual Channel 实现不同类型流量(如等时流 Isochronous Traffic 与 普通流量 Ordinary Traffic)的区分与调度,确保关键任务如实时音视频流获得低延迟和稳定的带宽。
在复杂系统中利用 PCIe 的 Traffic Class 和 Virtual Channel 实现不同类型流量(如等时流 Isochronous Traffic 与普通流量 Ordinary Traffic)的区分与调度。每个TC映射到一个独立的VC(Virtual Channel硬件缓冲区),避免低优先级流量阻塞高优先级流量。交换机通过端口仲裁(Port Arbitration)和VC仲裁(VC Arbitration)策略管理不同VC的优先级。
Switch端口仲裁用于多个设备/端口间的调度 控制访问 Crossbar 的先后顺序,目的是为了解决当多个端口(或多个上游/下游设备)要同时传输数据时,如何协调访问 Switch 的内部交叉通道。
二、Flow Control机制
PCIe的flow control是在数据链路层实现的,专门服务于TLP,用于防止receiver的数据溢出丢失。
在初始化阶段,设备通过Flow Control初始化DLLPs(FC_INIT1和FC_INIT2)交换缓冲区大小信息;在运行期间,接收端通过Flow Control Update DLLPs定期更新credit信息。