当前位置: 首页 > news >正文

PCIe 关键技术—— elastic buffer

转载:[连载]PCIE 关键技术(一)elastic buffer

前言:

在高速数据传输协议中,PCI Express (PCIe)作为一种广泛使用的接口标准,其高效的数据传输能力依赖于复杂的时钟管理和缓冲技术,其中,弹性缓冲区(elastic buffer)是PCIe系统中不可或缺的一部分,它在解决时钟域差异和数据传输同步问题上发挥着关键的作用。

什么是弹性缓冲区?

弹性缓冲区是一种用于处理不同时钟域之间频率和相位差异的先进先出(FIFO)缓冲器,它位于接收端(RX)的本地时钟域与恢复时钟域之间,通过插入/删除特定的符号(如SKP,skip order set)来调整数据流的传输频率,从而实现时钟同步。

弹性缓冲区的工作原理:

弹性缓冲区的核心功能是通过动态调整缓冲区的数据量补偿时钟频率和相位的差异,具体来说,当本地时钟域的频率低于恢复时钟域时,弹性缓冲区会检测到数据进入速度过快,并从缓冲区中删除一些SKP符号以减缓数据流,反之,当本地时钟的频率高于恢复时钟的时候,缓冲区会插入SKP符号以增加数据流的速度。

弹性缓冲区的设计电路

如图所示,弹性缓冲器包含7个单元,并且具有两个时钟域:(a)本地时钟域(buffer的输出时钟)用于为其所有内部门电路提供时钟信号并传输数据;(b)恢复时钟域(buffer的输入时钟)用于锁存输入数据。

  • input detect unit :检测输入数据是否为SKP,并根据测试结果提供SKP删除操作的指令
  • write pointer control unit :写指针的二进制和格雷码由写指针控制单元生成,写指针的二进制码用于选择数据写入的存储地址,并在与读指针同步后生成SKP删除操作的指令,同样,写指针的格雷码同步到本地时钟域并与读指针的格雷码进行比较,然后单元生成空标志。
  • read pointer control unit:读指针控制的作用是生成读指针的二进制码和gray code,读指针的二进制码是数据读取的存储单元的地址,并在与同步的写指针比较后生成SKP添加的请求标志,读指针的gray code同步到恢复时钟域并与写指针的gray code进行比较,然后生成满标志。
  • out detect & control unit:输出检测和控制单元,确定从存储单元读取的数据是SKP字符还是END字符,然后生成相应的符号,此外,它还根据检测结果输出数据。
  • synchronous unit:同步单元的功能是将写指针和读指针的gray code同步到本地时钟域和恢复时钟域。
  • threshold monitor:阈值监控单元计算FIFO中的有效数据,并决定是否产生SKP添加或删除请求。

弹性缓冲区的深度计算:

弹性缓冲区的深度cover最worse case,由maxpayload size和读写时钟最大偏差决定。SRNS最大的时钟偏差是600ppm,即1666个cycle有一个时钟周期漂移,SRIS最大的时钟偏差是5600ppm,即178个cycle有一个时钟周期漂移。

  • ppm = 600 → 每 1,000,000 个周期漂移 600 个周期
  • 设 N 为漂移 1 个周期所需的周期数
  • 比例关系: 600/1,000,000=1/N
  • 解得: N=1,000,000/600 ≈ 1666.67

需要考虑发送SKP的最大间隔1180-1538 symbol time【协议定死的】和lane的数量Link_width,因此worst-case 的周期漂移个数计算如下:

最小值(1180 Symbol Times)
  • 目的:防止弹性缓冲溢出或下溢。
  • 解释:在两个时钟偏差最大的 SRNS 系统中,如果发送端太久不发送 SKP,接收端的弹性缓冲因为时钟频率不一致,累积的误差就会超过缓冲深度,导致数据丢失或读取错误。协议计算得出,在最坏频偏下,最多只能容忍约 1180 个 Symbol 的时间不发送 SKP。因此,发送端必须至少每 1180 个 Symbol 发送一次 SKP(或者说,不能比这个间隔更久)。
最大值(1538 Symbol Times)
  • 目的:限制 SKP 的频率,保证带宽效率,并给接收端留出处理时间。
  • 解释:SKP 是开销,发得太频繁会浪费带宽。同时,接收端的弹性缓冲逻辑需要一个稳定的节奏来调整。协议规定发送端最多可以间隔 1538 个 Symbol 发送一次 SKP。

max_payload_size=4K overhead = 28byte

对于SRNS ,max_symbol shifted = 4

对于SRIS,max_symbols shifted = 40

Snps 的32G phy elastic buffer 深度为88

大多数弹性缓冲区采用“半满方法” (half-full method)进行设计,这种方法通过保持缓冲器在半满状态来优化数据传输效率。

http://www.jsqmd.com/news/710959/

相关文章:

  • Python 玩转摄像头:MediaPipe 手势追踪贪吃蛇游戏(含完整环境配置教程)
  • 4GB显存也能玩转SDXL?Fooocus低配置AI绘图终极指南
  • 2026最强全能 AI Agent:Codex 零基础完整实战教程(基于 GPT-5.5 与 Image-2 模型)
  • 终极指南:如何用Prompt Optimizer节省90%的LLM API成本
  • 云原生入门系列|第18集:K8s集群扩容与灾备,筑牢生产级安全防线
  • Docker Desktop已不适用边缘场景?3大被低估的WASM容器运行时替代方案对比实测(含启动耗时、内存驻留、TEE支持度数据)
  • Sqlserver 学习笔记
  • mysql用户无法访问存储过程权限提示_MySQL EXECUTE赋权方案.txt
  • Wox终极指南:如何用跨平台启动器提升10倍工作效率?
  • 还不会 CSS 选择器?超详细基础讲解
  • 云顶之弈悬浮辅助工具:TFT Overlay 终极免费指南
  • Linux 进程间通信(IPC):管道与信号量完全指南
  • 【025】类加载:双亲委派与应用隔离
  • FB的聊天軟件上發鏈接不顯示圖片
  • 超级编导源码流出,技术大拿深度对比超级编导与超级智剪云混剪架构
  • 【20年嵌入式老兵亲授】:C语言裸机编程在工业边缘节点中规避内存泄漏与时序抖动的7个硬核技巧
  • GPT Image 2-城市海报
  • 云原生入门系列|第19集:K8s进阶收尾,知识点复盘+实战综合演练
  • AI智能体浏览器自动化实战:绕过反爬虫与验证码的终极方案
  • 探索 MCP (Model Context Protocol):构建智能体与外部工具的桥梁
  • 【2026收藏版】图解DeepSeek V4:详细计算流程解析(小白程序员入门必备)
  • 这个AI插件直接“接管编辑器”?Unity开发要变天了!
  • 微信投票系统实战,投票制作平台功能介绍,投票小程序源码结构
  • Kafka-King:解决企业级Kafka运维痛点的现代化桌面客户端
  • VS Code MCP权限体系设计:RBAC+策略即代码(Policy-as-Code)双模管控,附GRC兼容配置清单
  • 探索 MCP 协议:构建下一代 AI Agent 的标准化基石
  • 【军工级C代码可信保障体系】:从ANSI C89到MISRA C:2023,5步构建可审计、可追溯、可认证的形式化验证流水线
  • BERT双向注意力机制原理与实践指南
  • ReactAgent:基于GPT-4的React组件智能生成器,从需求到代码的自动化实践
  • 终极指南:如何在电脑上免费畅玩Switch游戏?Ryujinx模拟器完整教程