pcie 日常问答-20250528

article/2025/6/10 10:29:08

问题均来自工作总结,面经问题;多为发散性问题;大多均会结合S IP rtl实现进行细致分析。

1. dllp包有哪些类型?dllp主要功能是干甚呢的?

dllp是一个点到点的传输(传输过程中没有任何标识);并不是一个端到端的传输,tlp是端到端的传输。

dllp主要功能:

  • flow control
  • ack/nak 相应
  • pme power 信号控制(不包含aspm)

dllp 状态机,其中dl_feature和dllp_capability相关,当前只用来确定 credit scaled;

dllp状态机的训练是在lsttm之后,在ltssm到达L0之后才会开始训练。(从transaction log以及verdi波形中均能例证)

dllp包类型:

3.5.1 Data Link Layer Packet Rules

type类型:

  • 0 :ack;
  • 1: MRInit - See the MR-IOV Specification(没见过multiRoot virtualization)

  • Encodings (b)DLLP Type
    0000 0010Data_Link_Feature ;
    0001 0000Nak
    0010 0000PM_Enter_L1 ;PME相关
    0010 0001PM_Enter_L23
    0010 0011PM_Active_State_Request_L1
    0010 0100PM_Request_Ack
    0011 0000Vendor-specific
    0011 0001NOP; no operation dllp;仅让链路保持活动状态;
    0100 0v2v1v0InitFC1-P (v[2:0] specifies Virtual Channel); v2v1v0为当前VC通道,当有多个vc通道时,在dllp进行初始化时可以看到会发送不同vc通道的initFC1相关的dllp包,transaction log可以看到
    0101 0v2v1v0InitFC1-NP
    0110 0v2v1v0InitFC1-Cpl
    0111 0v2v1v0MRInitFC1 (v[2:0] specifies Virtual Link) - See the MR-IOV Specification50
    1100 0v2v1v0InitFC2-P
    1101 0v2v1v0InitFC2-NP
    1110 0v2v1v0InitFC2-Cpl
    1111 0v2v1v0MRInitFC2 - See the MR-IOV Specification51
    1000 0v2v1v0UpdateFC-P;一般来说不会出现credit 用完的情况;
    1001 0v2v1v0UpdateFC-NP
    1010 0v2v1v0UpdateFC-Cpl
    1011 0v2v1v0MRUpdateFC - See the MR-IOV Specification52
  • 关于PME dllp;在dllp层进行check之后被发送到power manager进行相关的操作;Checked for integrity on reception by the Data Link Layer, then passed to the component's power
    management logic

1.1 当收到pme dllp包之后ep,rc是怎么处理的?

在进入D1,D2的前提条件是所有发出的request 的cpl均被收回,所以新收到的cpl被认为是unexpected completion。

5.3.2 PM Software Control of the Link Power Management State(D  state)

链路的电源管理状态由其下行组件(EP)的D状态决定。即下行端口来控制整个链路的电源状态切换。

以下规则与兼容pci-pm的电源管理相关:

  • 在非D3cold状态下,设备接收到pme_tuen_off消息,必须发送pme_to_ack消息进行相应。
  • 在任何D状态下,执行完pme_turn_off/pme_to_ack握手之后,下游组件必须使用pm_enter_l23 dllp请求链路状态转换到L2/L3_ready。完成L2/L3_ready之后,下游组件必须准备号主电源和参考时钟丢失。
  • 单function usp,只有在D1,D2,D3hot时,链路才可以转换到L1状态。对于sw而言,上有端口的D状态不能设置为比最活跃的下游端口更不活跃的状态。下游为D2则上游不能为D3.
  • 非ARI上游端口至少一个function为非D0状态,不得启动链路转换到L1.
5.3.2.1 Entry into the L1 State

下游组件持续发送PM_Enter_L1 DLLP直至收到上游组件响应(PM_Request_Ack)。其间必须持续接收上游TLP/DLLP,并按需响应流控更新DLLP及确认/否认DLLP。

USP  can trigger L1 entry; By: 软件控制PCI-PM capabilities,Use ASPM,use app requests the USP to enter L1.

其实有个疑问:在DSC TLP层变黑之后其实USC(up component)依旧可以继续发送tlp到DSC,那么此时DSC怎么处理这些收到的TLP包?

个人猜想:不会继续发送tlp了。

L1 exit can be initiated by the component on either end of a Link

且在D1,D2,D3hot状态下usp只能接受CFG和MEG TLP包。其余类型被认为unsupported requests。

L2/L3 ready


• L2/L3就绪进入过渡协议不会立即导致链路进入L2或L3状态。该过渡实质上是通过握手确认下游组件已准备好断电。只有当平台实际移除组件电源和参考时钟时,才会最终达成L2或L3状态。 • L2/L3就绪进入过渡的时机以完成PME_Turn_Off/PME_TO_Ack握手序列为标志。下游组件为应对断电所需的所有准备工作必须在启动过渡前完成。当所有断电和时钟丢失的准备工作就绪后,下游组件通过向上游发送PM_Enter_L23数据链路层包来启动L2/L3就绪进入流程。

ASPM通过什么条件(前提)使pcie设备进入L0s,L1状态?

通过设置DEFAULT_L0S_ENTR_LATENCY; 默认4us,最大7us;

DEFAULT_L1_ENTR_LATENCY; 默认8us,最大16us;

RTL PM相关signal 来源

共有三处:

1. app user signal;举例:app_ready_entr_l23;app_req_exit_l1;

2. 从pm-csr寄存器而来(capability);cdm_pm_reg中获取;

3. 从ltssm state获取;

a)sdlp(dllp state machine and logic):output:pm_prot_state,pm_l0s_state;

input:pm_aspm_l1_en;

b) smlh: smlh_in_l1,smlh_in_l23 等;

2. credit 每种类型的unit都是多大?

dllp包:initfc_p_vc0 ; 63 x4 480 x1 ; 解释:

initfc_p_vc0:vc0通道的initial flow control 1,发送包。data,hdr scale: 可以查看dl层capability,目前为1.

63: hdr FC; hdr scale设置为1,8bit宽度,共63个posted header credit unit;每个unit 如果不支持tlp prefix;就是最大的TLP header(4DW)+1 DW tlp digest(ECRC)= 5DW;

如果支持TLP prefix:1 DW tlp digest + 4DW header + x个TLP prefix 包。

x4: header scale factor;(2'b10)

480: data FC,对于data FC而言一个unit 表示4DW;

0x1: data scale factor;(2'b01)

ECRC: 

经过switch 时是不重新计算,lcrc没过一级都要重新做校验。ECRC 1DW;

pcie上共有4中类型的CRC;FCRC,ECRC,LCRC;DCRC;

FCRC仅存在于stp token中(128/130b)编码,占用4bit。Lcrc为强制勾选,会带着sequence number 一起编码,占用32bit,在dllp上实现。

DCRC: dllp包最后的16bit crc校验。

2.6.1 Flow Control Rules

completion分为infinite和finite 两种flow control;S中默认使用infinite(无限credit),credit value always 0.当确认了infinite FC时不需要更新updatefc dlp包,rx收到对应的dlp包会被丢弃。

2.6.1.1 FC Information Tracked by Transmitter

流控制TLP传输门 跟踪两个量:

CREDITS_CONSUMED:

计算从initfc之后tx端消耗的所有 credit;每次消费若干 credit(Increment),就加到当前的 CREDITS_CONSUMED 上,并对字段位宽进行模运算,保持在合法范围内。

eg:

2^[Field Size] = 2^12 = 4096
也就是说 CREDITS_CONSUMED 是个 12-bit 宽的字段,最大值为 4095。超过这个值时就 回绕(wrap around)。
当前 CREDITS_CONSUMED = 4090,Increment = 10:本次使用了10个credit;

计算:
(4090 + 10) mod 4096 = 4100 mod 4096 = 4;

CREDIT_LIMIT:
接收端允许的最大FC units。

每种类型的tlp包credit消耗计算规则:

除了infinite 类型的tlp包外,其余的tlp包要满足以上规则。

2.6.1.2 FC Information Tracked by Receiver

CREDITS_ALLOCATED:

用于传输的credit总数;

CREDITS_RECEIVED:TLP rx 接收到的credit总量。

credit buffer 大小如何计算

背靠背传输(Back-to-Back Transmission) 是指在总线或链路中,连续不间断地发送多个数据包(如 TLP),中间不插入空闲周期或等待周期,实现最大吞吐率的一种传输方式。

FC credit caculate:通过lane number,controller datapath width,max payload size,flow control update latencies,internal delay,PHY latency。

update latency从pcie spec表中给出;gen5x4 max_pay_size:256B;最大214个symbol time。

要求:连续tlp传输不能出现credit不够情况。

1. 在TLP包的最后一个synbol收到之后FC timer才开始工作。所以rx必须能够至少缓存1个max payload 包。

2. 更新FC,只有当latency timer 超时后才会更新;所以credit buffer要能装下timer 从0到超时时间段的所有tlp包

3. 延迟计算:

a) TLP 传输到远端时间

b) tlp包本地处理时间

c) FC update 传输时间

d)远端接收FC update时间

e)re-timer时间(如果存在) cx_max_retimer 值表示

depth =(calc_bytes)/(4*CX_NW)/4
calc_bytes =roundUptoNextMTU(data_size{1} + fc_lat_limit{2} +
fc_delay_bytes)
fc_lat_limit =data_size *fc_upd_fac
fc_delay_bytes =CX_INTERNAL_DELAY{3.b and 3.c}*CX_NB*CX_NL+
base_internal_delay{3.a and 3.d}*CX_NL + retimer_latency{3.e}*CX_NL
此处不做详细解释。

RADM_NPQ_DCRD_VC0: the num of tlp data to advertise for vc0;


http://www.hkcw.cn/article/vhwxTOQQtr.shtml

相关文章

ADK实战-基于ollama+qwen3实现外部工具串行调用

0 环境准备 1 开发环境准备 1.1 创建项目python环境 1.2 在pycharm创建项目 1.3 安装项目依赖 2 资源准备 3 adk agent构建 3.1 新建adk_agent_tool_serial python包 3.2 编辑__init__.py文件 4 配置env 4.1 新建.env文件 4.2 编辑.env文件 5 agent逻辑实现 5.1 …

降本增效的新引擎:GEO如何提升企业营销ROI

在当前经济环境下,企业面临着前所未有的成本压力和效率挑战。深耕数字营销二十余年,我们见证了从传统广告到数字营销,再到如今生成式AI时代的每一次效率变革。在这个新阶段,生成式引擎优化(GEO)正在成为企业…

Blinko智能笔记系统实现跨平台同步与隐私保护的完整技术方案解析

文章目录 前言1. Docker Compose一键安装2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 推荐 ​ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站 前言 是否…

OpenCV CUDA模块特征检测------创建Harris角点检测器的GPU实现接口cv::cuda::createHarrisCorner

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数创建一个 基于 Harris 算法的角点响应计算对象,专门用于在 GPU 上进行高效计算。 它返回的是一个 cv::Ptrcv::cuda::Cornernes…

013旅游网站设计技术详解:打造一站式旅游服务平台

旅游网站设计技术详解:打造一站式旅游服务平台 在互联网与旅游业深度融合的时代,旅游网站成为人们规划行程、预订服务的重要工具。一个功能完备的旅游网站,通过用户管理、订单管理等核心模块,实现用户与管理员的高效交互。本文将…

Linux运维笔记:1010实验室电脑资源规范使用指南

文章目录 0. 检查资源使用情况,避免冲突检查在线用户检查 CPU 使用情况检查 GPU 使用情况协作建议 1. 备份重要文件和数据2. 定期清理硬盘空间3. 退出 ThinLinc 时注销,释放内存4. 校外使用时配置 VPN注意事项总结 实验室的电脑配备了 CPU 和 GPU 资源&a…

Nginx + Tomcat负载均衡群集

目录 一、案例环境 二、部署 Tomcat(102/103) 1、准备环境 (1)关闭firewalld 防火墙 (2)安装JDK 2、安装配置 Tomcat (1)Tomcat 的安装和配置 (2)移动…

每日算法-250603

每日算法学习 今天学习了两道关于子数组和的 LeetCode 题目。 1524. 和为奇数的子数组数目 题目 思路 💡 前缀和 核心思想:子数组 arr[i..j] 的和可以表示为两个前缀和之差,即 prefixSum[j1] - prefixSum[i] (假设 prefixSum[k] 表示 arr[0…

【T2I】InteractDiffusion: Interaction Control in Text-to-Image Diffusion Models

CODE: CVPR 2024 https://jiuntian.github.io/interactdiffusion Abstract 大规模文本到图像(t2i)扩散模型在基于文本描述生成连贯图像方面展示了令人难以置信的能力,从而在内容生成方面实现了广泛的应用。虽然最近的进步已经引入了对物体定位、姿态和图像轮廓等因…

今日行情明日机会——20250603

上证指数放量收阳线,阳包阴,量能超过5天均量,个股涨多跌少,行情有所回暖。 深证指数缩量收阳线,再次回打支撑位。 2025年6月3日涨停股主要行业方向分析(基于图片数据) 1. 医药(政策…

Foundation Models for Generalist Geospatial Artificial Intelligence论文阅读

文章目录 摘要1. 引言2. 研究背景3. 预训练数据3.1 HLS-2数据3.2 高效数据采样3.3 预处理程序 4. 模型结构和预训练4.1 时空数据考虑4.2 预训练4.3 预训练结果 5. 下游任务5.1 任务微调数据集5.2 微调模型设置5.3 微调任务结果5.3.1 云插补任务5.3.2 洪水映射任务5.3.3 火灾痕迹…

C++实现汉诺塔游戏用户交互

目录 一、模型调整(一)模型定义(二)模型实现1.电脑自动完成部分2.SDL图形显示2.1拿起放下盘子的函数2.2左右移动手指的函数 二、处理用户输入,进行人机分流三、总结四、源码下载 上篇文章使用C语言实现汉诺塔游戏电脑自动完成的步骤,还没有实现用户交互&…

嵌入式学习 D32:系统编程--进程间通信IPC

引言--进程间通信管道的概念管道相关操作有名管道及其相关操作信号通信 一、引言--进程间通信 1)因为空间是独立和隔绝的,数据发不过去,需要进程间的通信来交互,所以需要通信。 2)linux进程间通信的常用几种方式&…

黑马Java面试笔记之 消息中间件篇(Kafka)

一. Kafka保证消息不丢失 Kafka如何保证消息不丢失 使用Kafka在消息的收发过程中都会出现消息丢失,Kafka分别给出了解决方案 生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker接收消息丢失 1.1 生产者发送消息到Brocker丢失 设置异步发送 消息…

java的SPI机制

SPI(Service Provider Interface)是java提供的一种服务发现机制。允许你定义一个接口或抽象类,然后由第三方实现这个接口,并在运行时动态加载这些实现类 核心思想是:面向接口编程,解耦接口与实现 核心组件…

SpringCloud 分布式锁Redisson锁的重入性 高并发 获取锁

介绍 Redisson 的锁支持 可重入性,这意味着同一个线程在获取锁后,如果再次尝试获取该锁,它可以成功地获得锁,而不会被阻塞。 每次一个线程成功获取锁后,它的持有次数会增加。当线程再次获取该锁时,Rediss…

PyTorch--池化层(4)

池化层(Pooling Layer) 用于降低特征图的空间维度,减少计算量和参数数量,同时保留最重要的特征信息。 池化作用:比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分;floor 不允许…

【自动思考记忆系统】demo (Java版)

背景:看了《人工智能》中的一段文章,于是有了想法。想从另一种观点(⭕️)出发,尝试编码,告别传统程序员一段代码解决一个问题的方式。下图是文章原文和我的思考涂鸦✍️,于是想写一个自动思考记…

小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分

在本笔记本中,我们将针对Fashion-MNIST数据集训练LeNet-5的变体。Fashion-MNIST是一组描绘各种服装的图像瓦片,有十个类别标签表明所描绘的服装类型。 # PyTorch model and training necessities import torch import torch.nn as nn import torch.nn.functional as F impor…

pytorch3d+pytorch1.10+MinkowskiEngine安装

1、配置pytorch1.10cuda11.0 pip install torch1.10.1cu111 torchvision0.11.2cu111 torchaudio0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html 2、配置 MinkowskiEngine库 不按下面步骤,出现错误 1、下载MinkowskiEngine0.5.4到本地 2、查看…