上一篇文章中提到了Mux会对来自数据链路层的数据(TLP&DLLP)插入一些控制字符,如下图所示。当然,这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,在往上传到其数据链路层。

当然,除了STP、SDP和END之外,还有一些其他的控制字符,如EDB(前面的文章详细介绍过)、SKIP、COM等。如下图所示:

前面的文章中提到过OrderedSets,其主要用于链路训练等。每一个OrderedSet都是按照DW对齐的(即四个字节),且OrderedSet开头也是一个叫做Comma(COM)的K字符(控制字符),随后包含一些K字符或者D字符(数据字符)。

对于只有一个Lane的PCIe设备来说,ByteStriping并没有什么卵用,其主要用于多个Lane的数据流分配。x1(一个Lane)和x8(8个Lane)的例子分别如下两张图所示:

除此之外,还有一些其他的规则,主要是针对Mult-Lane的,对于一个Lane并没有什么影响:

x4(4个Lane)需要遵循以下的规则:

·STPandSDPcharactersarealwayssentonLane0.

·ENDandEDBcharactersarealwayssentonLane3.

·WhenanorderedsetsuchastheSKIPissent,itmustappearonalllanessimultaneously.

·WhenLogicalIdlesaretransmitted,theymustbesentonalllanessimultaneously.

·AnyviolationoftheserulesmaybereportedasaReceiverErrortotheDataLinkLayer.

如下图所示:

对于x8、x16、x32需要遵循以下的规则:

·STP/SDPcharactersarealwayssentonLane0whentransmissionstartsafteraperiodduringwhichLogicalIdlesaretransmitted.Afterthat,theymayonlybesentonLanenumbersdivisibleby4whensendingback‐to‐backpackets(Lane4,8,12,etc.).

·END/EDBcharactersaresentonLanenumbersdivisibleby4andthenminusone(Lane3,7,11,etc.).

·Ifapacketdoesn’tendonthelastLaneoftheLinkandtherearenomorepacketsreadytogo,PADSymbolsareusedasfillerontheremaininglanenumbers.LogicalIdlecan’tbeusedforthispurposebecauseitmustappearonallLanesatthesametime.

·Orderedsetsmustbesentonalllanessimultaneously.

·Similarly,logicalidlesmustbesentonalllaneswhentheyareused.

·AnyviolationoftheserulesmaybereportedasaReceiverErrortotheDataLinkLayer.

x8的例子如下图所示:

发送端的扰码器(Scrambler)有一个16-bit的线性反馈寄存器(LFSR,LinearFeedbackShiftRegister),其实现了以下这个多项式:

具体的功能框图如下图所示:

关于扰码器(Scrambler)还需要遵循以下这些规则:

·不同的Lane的扰码器必须是同步操作的;

·扰码器只对TLP和DLLP中的D字符(数据字符)以及逻辑空闲字符(00H,LogicalIdle)作用,并不作用于K字符(控制字符)和OrderedSet中的D字符(如TS1、TS2等);

·兼容性测试字符(CompliancePatternCharacters)并不被扰码;

·COM字符(一种控制字符,不会被扰码)可用于使发送端和接收端的扰码器中的LFSR同时被初始化为FFFFH;

·扰码器默认时被使能的,但是PCIeSpec允许将其临时禁止,以用于测试用途。

PCIe中用到的K字符(控制字符)如下表所示:

其对应的8b/10b编码如下表所示:

注:其中PAD字符主要用于Mult-Lane中,当一个包的长度比较短,有的Lane可能就没有数据可以发了,这时候可以用PAD字符来填充。如本文的x8的例子所示。

OrderedSets主要用于链路管理(LinkManagement)功能。对于Gen1和Gen2的PCIe来说,所有的OrderedSet都以COM作为开头。OrderedSets是在每个Lane上同步发送的,即每一个Lane都会同时的发送相同的OrderedSets,因此,OrderedSets也可以被用于LaneDe-skewing。除了链路训练之外,OrderedSets还被用于时钟容差补偿(ClockToleranceCompensation)以及更改链路功耗状态(ChangingLinkPowerStates)等。

对应的,主要有以下几种OrderedSets:TS1andTS2OrderedSet(TS1OS/TS2OS)、ElectricalIdleOrderedSet(EIOS)、FTSOrderedSet(FTSOS)、SKPOrderedSet(SOS)和ElectricalIdleExitOrderedSet(EIEOS)。

注:关于链路管理以及OrderedSets等详细内容,会在后续的博文中介绍。

pcie扰码的作用_物理层逻辑知识,关于扰码器需要遵循的规则相关推荐

  1. pcie扰码的作用_分享 扰码的作用

    扰码 要分上行和下行链路来考虑: 扰码就是就是用一个伪随机码序列对扩频码进行相乘,对信号进行加密.上行链路物理信道加扰的作用是区分用户,下行链路加扰可以区分小区和信道. 在上行链路中,扰码区分用户,扩 ...

  2. pcie扰码的作用_CDMA中扰码的作用

    Q:要分上行和下行链路来考虑: 扰码就是就是用一个伪随机码序列对扩频码进行相乘,对信号进行加密.上行链路物理信道加扰的作用是区分用户,下行链路加扰可以区分小区和信道. 在上行链路中,扰码区分用户,扩频 ...

  3. mimo-ofdm无线通信技术及matlab实现_智芯文库 | FPGA无线通信课程连载——扰码的原理及实现...

    一.扰码的作用 对数字信号的比特进行随机处理,减少连0和连1的出现,从而减少码间干扰和抖动,方便接收端的时钟提取:同时又扩展了基带信号频谱,起到加密的效果.为了保证在任何情况下进入传输信道的数据码流中 ...

  4. java扰码_TD中下行同步码和扰码的区别和作用

    1.下行同步码是用来标识小区和区分相邻小区的,UE搜索到下行同步码了才能确定是哪个小区.进行同步等. 2.关于扰码,作用比较多,上行链路物理信道加扰的作用是区分用户,下行链路加扰可以区分小区和信道,扰 ...

  5. Verilog数字系统基础设计-扰码与解扰

    Verilog数字系统基础设计-扰码与解扰 扰码可以对原始的用户数据进行扰乱,得到随机化的用户数据.发送电路在发送数据前先对数据进行随机扰乱,接收电路使用相同的扰乱算法重新恢复出原始的数据. 什么是扰 ...

  6. 扰码原理以及matlab实现

    一.扰码 扰码的作用:避免出现长连0或长连1,避免信号的功率谱密度集中在窄带内. 扰码的结构是一个带反馈的移位寄存器,通过输入与移位寄存器的某些寄存器进行模2加来得到输出. 特征多项式 扰码器结构 图 ...

  7. java 扰码工具_【Developer Log】ProGuard扰码可执行JAR包

    在项目上线之前需要通过ProGuard来对java的class进行混淆,以避免反编译方式,来保护自己的代码.ProGuard网上有很多资料,可以参考:http://blog.csdn.net/zhan ...

  8. MIPI CSI-2笔记(12) -- Low Level Protocol(数据加扰,扰码,Data Scrambling)

    数据加扰(Data Scrambling)的目的是减轻EMI和RF自干扰做造成的影响,加扰是通过将链路的信息传输能量扩展到一个尽可能大的频带上,使用了一种数据随机化技术(data randomizat ...

  9. 星星之火-30:什么是WCDMA的伪随机码与扰码?

    1 扰码的动机 WCDMA的正交码真正的目的不是编解码,而是为了复用与解复用. 正交码的最重要的特性是:正交码不是孤立的存在,而是与其他正交码一起存在的,正交码之间的内积为0,正交码与自身的内积不为0 ...

最新文章

  1. Android主线程耗时动画卡顿,Android性能优化实战之界面卡顿
  2. java中异常处理机制
  3. PTA浙大版python程序设计题目集--第2章-1 计算 11+12+13+...+m (30 分)
  4. 经典C语言程序100例之四一
  5. php+linux+线程安全,PHP 线程安全与非线程安全版本的区别深入解析
  6. Linux centosVMware Apache 配置防盗链、访问控制Directory、访问控制FilesMatch
  7. UOJ #584. 天天去哪吃
  8. T-SQL编程基础之三:游标(Cursor)编程
  9. Vondrak滤波原理详解及Matlab实现
  10. mysql window下 安装udf_Windows下MySQL下载安装、配置与使用
  11. 政府部门和金融行业已成网络攻击的最大目标
  12. linux磁盘性能监视,Linux磁盘I/O性能监控之iostat详解
  13. 仪式与工具--团队管理之规范创立与流程固化过程中必要因素
  14. Seata分布式事务原理
  15. 安利几个好用的在线画图网站
  16. UberAir飞行汽车:一键乘坐飞机会变成现实吗
  17. 管理者如何做好团队规划
  18. Django学习笔记(3):使用模型类进行查询(查询函数、F对象、Q对象、聚合函数、查询集、模型类关系、关联查询、自关联、管理器)
  19. Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)
  20. LeetCode-1789. 员工的直属部门

热门文章

  1. 用python输出斐波那契数列的前20项_python输出斐波那契数列
  2. 刘振飞:躲在镜子背后听用户反馈
  3. 细细品味C#——抽象、接口、委托、反射
  4. [原创]浅谈我们应招聘应届毕业生做测试吗?
  5. 注册表编程,程序记忆功能
  6. 传统学术研究中有哪些现实问题可望用区块链来解决?
  7. Windows主机入侵痕迹排查办法
  8. 【聆思CSK6视觉AI开发套件试用】从部署工程师和测试工程师角度体验CSK6
  9. 旅行商问题的蚁群算法
  10. 香港的教育(2)——学前教育