128b/130b下的编码/组帧和加扰

128b/130b下的编码组帧和加扰

  • 适用于链路速度在8.0GT/s,16.0GT/s和32.0GT/s

128b/130b编码

  • 适用于链路速度为8.0GT/s,16.0GT/s和32.0GT/s
  • Non-Flit使用链路范围(link-wide)的打包机制和每条lane(per-lane)上的数据块编码
  • Flit模式使用每条lane上的数据块编码

lane层次上的编码

  • 物理层使用每条lane的数据块编码
  • 每个数据块由2bit的同步头(Sync Header)和数据载荷组成
  • 同步头
    • 10b意味着该块是数据块(由于pcie发数据是先发低位在发高位,所以接收端是先收到高位1然后才收到低位0),数据块由2比特的同步到加128比特的载荷构成
    • 01b意味着该块是有序集块,除了SKPOS外(SKPOS长度可变),每个有序集块都是128比特的载荷
  • 如果link由多条lane构成,所有lane必须同时传输相同的同步头,除非是在Polling.Compliance中需要传输抖动测试序列(jitter measurement pattern)

有序集块

  • 有序集块(Ordered Set Block)是由同步头加一个有序集组成
  • 多lane的link必须同时传输相同的有序集类型
  • 有序集的第一个符号定义了有序集的类型
  • 多lane的link除开第一个符号外,剩下的符号是由具体的有序集来定义,并且不需要所有lane上都传输相同的值
  • 除了SKPOS外,有序集在Flit模式和Non-Flit模式都是相同的
  • 链路速度在8.0GT/s并且处于Flit模式时,标准(Stardard)和控制(Control)SKPOS都会使用

块对齐

  • 在接收到的数据流中,由一种比特流比较特殊,就是EIEOS(Electrical Idle Exit Ordered Set),它在链路训练中用于获取同步头块的地址
  • 在收到EIEOS后,接收机会依次处于三种状态:未对齐(Unaligned),对齐(Aligned)和锁定(Locked),定义这几种状态是为了说明说每一个状态需要的行为,但并不意味着指定所需的实现
    • 意思就是说具体逻辑实现可以有差异性,但是每个状态中需要做的事情是确定的
  • 在训练期间传输的TSOS和EIEOS可能会导致未对齐的接收机检测到未定义的同步头
    • 在链路训练期间,除了Configuration.Idle,Recovery.Idle和Tx_L0s.Fts外,不会发送SDSOS,即在链路训练期间不会处于块锁定状态

未对齐状态

  • 接收机在经过一段时间的电气空闲后,会进入这个状态
    • 比如当速度从gen3/4/5改变到gen1时或者退出低功耗状态时…
  • 在这个状态,接收机必须检查接收到的数据流中是否含有EIEOS比特序列.如果检测到,则接收机调整自己的对齐方式并进入到对齐阶段

对齐阶段

  • 接收机从接收到的比特流中检测EIEOS比特序列
  • 接收机从接收到的块中检测SDSOS序列
  • 如果检测到的EIEOS比特序列跟当前的对齐方式不一致,接收机则需要重新调整自己的对齐方式
    • 比如第一次检测到EIEOS,EIEOS结束后应该就应该对齐130比特数据的起点,但是没有经过130比特的数据流(比如50比特),又检测到EIEOS,这时重新调整130比特数据流的开始点
  • 如果收到了SDS,接受进入锁定阶段
  • 如果收到的同步头无效(比如是00或者11b),接收机允许重新进入未对齐状态

锁定阶段

  • 在此阶段,接收机禁止在调整自己的对齐方式
  • 在收到SDSOS后,就是数据流的开始,并且调整块的对齐方式会干扰这些块的处理
  • 当接收机接收到无效的同步头后必须重新进入未对齐状态或者对齐状态

其它规则

  • 当处于对齐或者锁定状态时,如果收到SKPOS,如果有必要接收机必须调整他们的对齐状态
    • 因为接收端可能会增加或者删除SKPOS的skp来补偿频率差,会造成SKPOS的长度不是16*8=128比特,SKPOS的长度可能会超过或者少于128比特
  • 链路训练和状态状态机(Link Training and Status State Machine,LTSSM)进入Recovery时,接收机在没有接收到EIEOS前,会忽略掉所有的TSOS.接收到EIEOS证实接收机的对齐状态并,然后才允许继续处理TSOS.
  • 如果收到的EIEOS让LTSSM从L0进入Recovery,接收机允许处理跟在EIEOS后面的TSOS;也可以忽略掉跟在EIEOS后面的TSOS,直到在Recovery状态再次收到EIEOS,在开始处理TSOS
  • 只要数据处理停止了,接收机允许从锁定状态到未对齐状态或者对齐状态
  • 回环发起者(Loopback Leads,发起进入Loopback状态的组件):当处于Loopback.Entry时,发起者在接受到EIEOS后必须能够调整接受的块对齐.在Loopback.Active中,允许发起者发送EIEOS并且根据回环数据流调整及接收机的块对齐方式
  • 回环追随者(Loopback followers,回环数据的组件):当处于Loopback.Entry时,追随者在收到EIEOS比特序列后,必须有能力调整自己的对齐方式.挡在Loopback.Active时,追随者禁止调整自己的对齐方式.从概念上来讲,当追随者开始唤回接收到的比特流时,接收器应该直接进入锁定状态

数据块

  • 数据块的载荷部分是符号流(也称为数据流).Non-Flit模式下,数据流有帧令牌(Framing Tokens),TLPs和DLLPs构成.
  • 数据流的每个符号都放置在链路的单个通道上,符号流在链路的所有通道上呈条状分布并跨越块边界.
  • 数据流以SDSOS后面的数据块的第一个符号开始.它在检测到帧错误时结束,或者有序集(SKPOS)之前数据块的最后一个符号数.数据流中出现的SKPOS具有特定要求

Non-Flit模式下的帧令牌

  • 每一种帧令牌都指示或者暗示了帧里面符号的个数(因为每一种帧的长度是固定的),因此可以知道下一个帧令牌的位置
  • 数据流中的第一个帧令牌总是位于数据流中的数据块的lane0的符号0
  • 帧类型
帧令牌类型 描述
IDL 逻辑空闲,帧令牌是一个符号.当没有TLPs或者DLLPs或者其它帧令牌需要传输时,就发逻辑空闲
SDP DLLP的开始,帧令牌是2个符号,后面跟着的是DLLP的信息
STP TLP的开始,帧令牌是4个符号,包含12比特的TLP序列号(Sequence Number),后面跟着的是TLP的信息
ENB END BAD,帧令牌是4个符号,用于确认前一个TLP是无效的
EDS End of Data Stream,帧令牌是4个符号,用于表明下一个块是有序集块
  • STP令牌
+0 +1 +1 +2
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
TLP Length[3:0] 1111b FP TLP Length[10:4] FCTC TLP Sequence Number
  • EDS令牌
+0 +1 +1 +2
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0001b 1111b 1b 0000000b 1001b 000000000000b
  • EDB令牌
+0 +1 +1 +2
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
11000000b 11000000b 11000000b 11000000b
  • SDP令牌
+0 +1
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
11110000b 10101100b
  • IDL令牌
+0
7 6 5 4 3 2 1 0
00000000b
剩余带补充

Non-Flit模式下发射机组帧要求

应用在传输数据流时

  • 发送TLP时
    • 发送STP令牌后,后面立刻跟数据链路层提供的TLP信息
    • TLP的长度由STP令牌中的TLP长度(Length)域指定,TLP中的所有双字(Double Word,DW,64比特)必须传输,即使TLP是无效的
    • 如果TLP无效,TLP后面必须紧跟着EDB令牌,STP令牌中的TLP长度域中的值不会针对EDB令牌做出调整
    • STP令牌在一个符号时间内传输不能超过1个
  • 发送DLLP时
    • 发送SDP令牌后,后面立刻跟数据链路层提供的DLLP信息
    • DLLP的6个符号都必须发送
    • STP令牌在一个符号时间内不能传输超过1个
    • SDP令牌在一个符号时间内传输不能超过1个
  • 在数据流中传输SKPOS时
    • 在当前数据块中的最后一个双字传输EDS令牌. (eg.x1的链路,EDS令牌在lane0传输,传输的符号时间是12-15;x16的链路,EDS令牌在lane12-15传输,传输的符号时间是15)
    • 在当前数据块后紧接着发送SKPOS
    • 发送SKPOS后紧接着发数据块.数据流从数据块的第一个符号开始.如果由多个SKPOS需要定期传输,每个SKPOS前面必须有一个带有EDS令牌的数据块
  • 如果需要结束数据流
    • 在当前数据块中的最后一个双字传输EDS令牌(eg.对于x1的链路,EDS令牌在lane12-15上传输,传输时间为12-15个符号时间;对于x16的链路,EDS令牌在lane12-15上传输,传输时间为第15个符号时间)
    • 下一个块紧接着是EIOS或者EIEOS.发送EIOS是为了让链路训练和状态机向功耗管理状态转变;发送EIEOS是为了其它情况
  • 当没有TLP,DLLP或者其他帧令牌需要传输时,必须在所有lane上都传输IDL令牌
  • 多lane的link
    • 在传输完IDL令牌后,在后面的符号时间,下一个STP或者SDp令牌的第一个符号必须在lane0上
    • 在同一符号时间内,EDS令牌可以在IDL令牌之后传输,因为它必须在块的最后一个双字中传输。
    • 对于xN的链路(N>=8),如果TLP,DLLP或者EDB令牌在lanek上结束,k不等于N-1,lane K+1不能跟STP,SDP或者EDB令牌的第一个符号,IDL令牌必须放在lane K+1 到lane N-1. (eg. x8的链路,如果TLP或者DLLP在lane3上结束,IDL令牌必须放在lane 4到lane 7)
    • 令牌,TLPs和DLLPs允许连续出现,以至于在满足传输要求的情况下,在符号时间内可以出现不止一个令牌在传输.
    • 链路宽度超过4,令牌的第一个符号可以放在lane 4*N上,N是正整数(eg.对于x8的link,令牌的第一个符号可以放在lane0或者lane4,x16的link,令牌的第一个符号可以放在lane 0,4,8,12)

Non-Flit模式下接收机组帧要求

应用于接受数据流和发生在数据流开头和结尾的块类型转换

  • 每一项检查都是独立的,并且是接收机可以选的
  • 当在处理希望成为帧令牌的符号时,接收到的符号或者符号序列不符合帧令牌的定义是帧错误(Framing Error).
  • 对于多lane的link,如果某条lane接收到的第一个符号期望是帧令牌,但是第一个符号与STP(只有bit[3:0]),IDL,SDP,EDB或者EDS令牌的符号0不符合时,spec强烈建议接收机需要向Lane Error Status寄存器报告错误
  • 当收到STP令牌后
    • 接收机必须计算TLP长度域的帧循环冗余检查(Frame CRC,Cyclic redundancy check)和帧奇偶检验(Frame Parity),并与接受到的帧循环冗余检查域和帧奇偶检查域进行对比,如果帧循环冗余检查或者帧奇偶检验检查不一致,则是一个帧错误
    • 出于向数据链路层报告的目的,具有帧错误的STP令牌不被视为TLP的一部分。
    • 如果TLP长度域是1,符号不是STP令牌,取而代之的是需要评估来决这是否是一个EDS令牌
    • 接收机允许检查TLP长度域的值是否是2,3或4.如果检查,TLP长度域出现这些值是帧错误
    • 接收机允许检查TLP长度域的值是否在1152到1535之间,如果检查,TLP长度域出现这些值是帧错误
    • 如果某个port上的接收机不支持协议复用(Protocol Multiplexing),接收机允许检查TLP长度域的值是否大于1535.如果检查并且长度域的值大于1535是一个帧错误
    • 如果某个port上的接收机支持协议复用,当STP令牌中TLP长度字段大于1535时,将STP令牌作为PMUX数据包的开头
    • 下一个要处理的令牌从紧跟在TLP的最后一个双字之后的符号开始,具体由TLP长度字段确定。
      *- 接收机必须这个符号,并且决定它是否是EDB的第一个符号,并且决定TLP是否有效
    • 接收机允许检查一个符号时间内是否由超过一个STP令牌出现.如果检查,一个符号时间接收到超过一个STP令牌是帧错误
  • 当收到EDB令牌时
    • 如果收到的EDB令牌是紧跟着TLP(TLP的最后一个符号与EDB令牌的第一个符号之间没有其它符号),接收机必须通知数据数据链路层收到了EDB令牌.
    • 在处理完EDB令牌的第一个符号或者任意多个符号或者是所有EDB的符号后,接收机允许通知数据链路层收到EDB令牌
    • 不管什么时候通知数据链路层,接收机都必须检查EDB令牌的所有符号
    • 接收到的EDB令牌如果与定义不符合是一种帧错误
    • 无论什么时候,收到EDB令牌后立即收到TLP是一种帧错误
    • 下一个要处理的令牌从紧随EDB令牌之后的符号开始
  • 当链路数据块的最后四个符号接收到EDS令牌时
    • 接收机必须停止处理数据流
    • EDS令牌后收到的有序集如果不是SKP,EIOS或者EIEOS,则是帧错误
    • 如果EDS令牌后收到的SKP有序集,如果帧错误没有检测到,接收器使用SKP有序集后面的数据块的第一个符号恢复数据流处理
  • 当收到SDP令牌后
    • 后面紧跟着DLLP,下一个要处理的令牌是紧跟着DLLP的最后一个符号
    • 接收机允许检查一个符号时间是否超过一个SDP令牌,如果检查的话,一个符号接收到不止一个SDP令牌认为是帧错误
  • 当收到IDL令牌后
    • 如果是x1的链路,下一个要处理的令牌开始于下一个符号
    • 如果是x2的链路,下一个要处理的令牌从下一个符号时间开始,并且是从lane0上开始.强烈建议接收机检查lane1上接收到的符号,如果lane0收到IDL令牌(也是IDL)后,lane1上没有收到IDL,则向Lane Error Status寄存器上报错误.如果需要检查该项,lane1收到的不是IDL是帧错误
    • 如果是x4的链路,下一个要处理的令牌从下一个符号时间开始,并且是从lane0开始.强烈建议接收机检查接收机检查lane1-3的符号,如果lane0收到IDL令牌(也是IDL)后,lane1-3如果没有收到IDL,则向Lane Error Status寄存器上报错误.如果检查该项,lane1-3收到的符号不是IDL是帧错误
    • 如果是x8或者x16的链路,要处理的下一个令牌从IDL令牌之后的下一个双字(64比特)对齐的lane中收到的符号开始.(eg. x16的链路,lane4上收到了IDL令牌,下一个令牌位于同一个符号时间的lane8.如果是x8的链路,lane4上收到了IDL令牌,下一个令牌位于下一个符号时间的lane0).强烈建议接收机检查IDL令牌和下一个令牌位置之间的符号是否是IDL,如果不是IDL,则向Lane Error Status寄存器上报错误.如果接收机检查此项,IDL令牌和下一个令牌之间的符号不是IDL是帧错误
    • 在同一个符号时间,IDL令牌后跟着的只能是IDL令牌(也是IDL)或者EDS令牌
  • 当在处理数据流时,在lane与lane之间去掉偏移(lane-to-lane de-skew)后,接收机也必须检查每条lane上的块类型
    • 如果SDS有序集收到的是有序集块,这是帧错误
    • 收到无效的块类型(同步头是11b或者00b)是帧错误.如果多lane的链路,如果某条lane接收到无效的快类型,强烈建议该lane向Lane Error Status寄存器上报错误
    • 任意lane上如果在前一个块中没有收到EDS令牌就收到了有序集块,是帧错误. (eg. 前一个块中没有EDS令牌,当前块中收到了SKP有序集)
    • 在数据流中,SKP有序集紧跟着其它有序集块(包括SKP有序集)是帧错误.强烈建议有序集的第一个符号是SKP.对于多lane的链路,如果某条lane收到的SKP的1到4N符号与定义不符合,则该lane向Lane Error Status寄存器上报错误
    • 任意lane上收到数据块,但是前一个数据块包括EDS令牌,是一种帧错误.对于多lane的链路,如果某条lane出现了出现了这种错误,强烈该lane建议向Lane Error Status寄存器上报.
    • 接收机允许检查不同lane上不同的有序集. (eg. Lane收到SKP有序集,lane1收到EIOS).如果检查此项,在不同lane收到收到不同的有序集是帧错误,除非是往L0p跳转时,收到了EIEOS/EIOS和SKP有序集的组合

Flit模式下对接收机组帧的要求

  • 在处理数据路时,在lane与lane之去掉偏移后,接收机必须检查每条lane上收到的块类型
  • 收到SDS有序集后,紧接接在任意lane上收到数据块,如果后面数据块后面跟着SKP有序集,则是帧错误
  • 如果接收到的块是无效块(同步头是00b或者11b),则是帧错误.对于多lane的链路,如果某条lane收到无效的块,强烈建议该lane向Lane Error Status寄存器上报错误
  • 如果某条lane没有进入或者退出L0p状态中的电气空闲状态,下面的一些条件会导致帧错误.对于多lane的链路,强烈建议引起帧错误的lane向Lane Error Status寄存器上报错误
    • 任意lane上接收到的有序集块是一个非调度的边界
    • 在预定的块边界上没有收到合适长度的EIEOS或者SKPOS或者EIOS
    • 接收机允许检查不同的lane是否是不同的有序集.(eg.lane0收到SKPOS,lane1收到EISO).如果接收机检查此项,不同lane上收到不同的有序集是帧错误

在Non-Flit模式和Flit模式下,从帧错误中恢复

  • 当接收机在处理数据流时,检测到帧错误,必须按照下面的要求的方式做:
    • 报告接收机错误
    • 停止处理数据流.当收到下一个SDSOS,重新处理数据流
    • 初始化错误恢复过程.如果LTSSM的状态在L0,直接让LTSSM进入Recovery;如果在Configuration.Complie或者是Configuration.Ilde检测到帧错误,可以通过超时来处理帧错误带来的问题,要么是从Configuration.Idle超时进入Recovery.RcvrLock或者从L0转换到Recovery(Configuration.Idle->L0->Recovery);如果在Recovery.RcvrCfg或者在Recovery.Idle检测到帧错误,通过Recovery.Idle超时进入Recovery.RcvrLock或者直接从L0跳转到Recovery来纠正帧错误引起的问题.如果在Recovery.RcvrLock或者是Configuration.Linkwidth.Start检测到帧错误,从这些状态退出后就可以恢复帧错误带来的影响,不需要LTSSM跳转到Recovery来恢复
    • 帧错误引起的复位机制不期望引起数据链路层发起恢复操作(比如发送NAK)
    • 当使用128b/130b编码时,所有的帧错误都需要链路来进行恢复,从两端的端口都进入Recovery状态开始算,帧错误期望在1毫秒之内恢复

Filt模式和Non-Flit下的加扰

  • 多lane的link,发射机每条lane都可以单独用一个线性反馈移位寄存器来加扰.接受机的没条lane都可以单独使用一个线性反馈移位寄存器来解扰.也可以选择较少的线性反馈移位寄存器来实现,但是必须要与使用单独的线性反馈移位寄存器的功能相同
  • 线性反馈移位寄存器的实现多项式未G(x)=x^23+x^21+x^16+x^8+x^5+x^2+1
  • 加扰规则
    • 8.0GT/s,16.0GT/s或者32.0GT/s中,2比特的同步头不用加扰,并且同步头不会推进线性反馈移位寄存器
    • EIEOS的16个符号都不加扰.在传输完EIEOS后的最后一个符号后,初始化加扰用的线性反馈移位寄存器;在接收到EIEOS的最后一个符号后,初始化解扰用的线性反馈移位寄存器
    • 8.0GT/s,16.0GT/s或者32.0GT/s下TS1和TS2有序集
      • TS1或TS2有序集的符号0不加扰(方便识别)
      • 符号1到13要加扰
      • 如果符号14和15是用于直流平衡(DC Balance),则不加扰,否则需要加扰
    • 8.0GT/s,16.0GT/s或者32.0GT/s中,快速训练序列(Fast Training Sequence,FTS)的16个符号都不需要加扰
    • SDS(Start of Data Stream)有序集的16个符号都不需要加扰
    • EIEOS(Electrical Idle Ordered Set)的16个符号都不需要加扰
    • SKPOS不需要加扰
    • 发射机发送有序集(除SKPOS)后会推进线性反馈移位寄存器.SKPOS中的任何符号都不会推进线性反馈移位寄存器
    • 接受机会评估接收到有序集的符号0,然后决定是否需要推进线性反馈移位寄存器.如果块的符号0是SKP,则不会推进线性反馈移位寄存器;否者,块中的所有符号都会推进线性反馈移位寄存器
    • 数据块的16个符号都需要加扰,并且会推进线性反馈移位寄存器
    • 对于需要加扰的符号,首先对最低有效位进行加扰,最后对最高有效位进行加扰.
    • 当链路首次进入Configuration.Idle时(比如Linkup=0b,链路还没建立起来,LTSSM从detect->Polling->Configuration),线性反馈移位寄存器的种子值取决于某条lane的通道号(Lane number)
      • 根据通道号模8的结果来分配种子值(eg. 9%8 = 1)
      lane 种子
      0 1DBFBCh
      1 0607BBh
      2 1EC760h
      3 18C0DBh
      4 010F12h
      5 19CFC9h
      6 0277CEh
      7 1BB807h
    • 当LinkUp=1(链路训练起来后),线性反馈移位寄存器的种子值不会改变.只要LinkUp=1,LTSSM通过Configuration状态重新配置链路时,虽然lane的分配可能会发生变化(如链路宽度发生变化),但是某条lane上最初分配的通道号不会改变
    • 当使用128b/130b编码时,在Configuration.Complete状态不能关闭加扰
    • 环回发起者不能解扰或者加扰环回的比特流

预编码

  • 当链路速度在32.0GT/s或者更高时,接收器可以向其发送器请求预编码(Precoding).当在某个数据速率下启用预编码时,预编码适用于该数据速率下的快速模式和非快速模式.
  • 预编码的规则:
    • 链路上的端口或者虚拟端口必须在所有配置过的lane上请求预编码.没有定义端口或者虚拟端口有些lane发送预编码请求而有些lane不发送请求预编码这种行为
    • 端口或伪端口可以请求独立于其他端口或伪端口的预编码.(就是有些端口在发预编码请求时,不要求其它端口也发. eg. 上游端口(Upstream Port)如果没有重定时器(Retimers),可以关闭预编码)
    • 只要LTSSM处于Detect状态,所有速度下都会关闭预编码
    • 如果要发出目标数据速率的预编码请求,必须在进入目标速度前发送请求.发射机通过设置EQ TS2或者128b/130b EQ TS2有序集中发射机预编码比特(Transmitter Procode Request)来发起预编码请求,当预编码开启时,需要在进入目标速度的Recovery.Speed之前发送EQ TS2或者128b/130b EQ TS2有序集.当速度在32.0GT/s或者更高时,预编码请求必须单独提出.
    • 每一个(虚拟)端口都必须存储预编码请求和Tx Eq值,其值来源于每条lane上最近一次的EQ过程.
    • 如果链路经过了EQ过程达到32.0GT/s或者更高速度或者当前处于Polling.Compliance且速度大于等于32.0GT/s,则必须强制执行来自正在使用的最后均衡结果的预编码请求. note : 只要没有设置TS1/TS2或者修正TS1/TS2有序集中的EQ方式为不需要EQ(No Equalization Needed),那么训练到32.0GT/s或者更高速度时就会执行EQ.
    • 如果链路从没执行过EQ(EQ要先于链路起来),预编码不会打开
    • 在进入Recovery.Speed前的Recovery.RcvrCfg期间,如果在接受到的8个连续EQ TS2或者128b/130b EQ TS2有序集中,每一个发射机预编码比特都为1,且目标数据速率为 32.0GT/s或更高,则发送机必须打开目标数据速率的预编码,链路在退出Recovery.Speed时将以该速率运行
    • 打开预编码后,预编码在目标速度下会生效.除非是在相同的目标速度,在进入Recovery.Speed前的Recovery.RcvrCfg期间,收到8个连续的EQ TS2或者128b/130b TS2有序集,其中发射机预编码位为0b
    • 当链路速度小于32.0GT/s,禁止发射机打开预编码
      • 速率高于32.0GT/s或者更高时,如果其预编码针对当前数据速率打开,在Recovery状态时,发射机必须设置TS1中的发射机预编码位为1;如果其预编码不针对当前速度打开,其值必须设置为0
      • 对于32.0GT/s的链路速度,发射机的lane0上如果需要打开预编码则必须设置32.0GT/s STATUS寄存器的32.0GT/s发射机预编码开启(32.0GT/s Transmitter Precoding On)位为1,否者必须设置为0.
      • 接收机如果请求或者将会请求对方在32.0GT/s时打开预编码,则必须设置32.0GT STATUS寄存器中的32.0GT/s发射机预编码请求(32.0GT/s Transmitter Procode Requeset)为1,或者必须设置为0
      • 对于64.0GT/s的链路速度,发射机的lane0上如果需要打开预编码则必须设置64.0GT/s STATUS寄存器的64.0GT/s发射机预编码开启(64.0GT/s Transmitter Precoding On)位为1,否者必须设置为0.
      • 接收机如果请求或者将会请求对方在64.0GT/s时打开预编码,则必须设置64.0GT STATUS寄存器中的64.0GT/s发射机预编码请求(64.0GT/s Transmitter Procode Requeset)为1,或者必须设置为0

32.0GT/s速率下的预编码

  • 32.0GT/s下需要打开预编码时,需要满足下面的规则:
    • 只有加扰的比特需要预编码
    • 用于预编码的”前一个比特”在每个块边界上设置为 1b,并通过当前块边界内传输的最后一个加扰和预编码比特进行更新
    • 对于加扰的符号,接收机必须首先解码预编码比特,然后才能解扰解码后的数据
    • 当预编码打开时,发射机在预编码之前,需要先计算SKPOS中的奇偶性(parity).正确得顺序为:
      • 加扰
        • 紧接着奇偶位计算
        • 紧接着预编码加扰得比特
      • 接收机这边处理SKPOS的正确顺序为
        • 预编码(如果发射机打开了)
          • 紧接着计算奇偶位
          • 紧接着解扰
    • SKPOS这样做的理由是链路中有一个或者两个重计时器,不同的链路可能打开或者关闭预编码的情况不同.

Non-Flit和Flit模式下的128b/130b环回

环回发起者的要求

  • 当使用128b/130b编码时,环回发起者必须传输有效的块,既同步头必须是01b或者10b.
  • 环回发起者从传输有序集块到数据流时,不要求发送SDSOS,在从数据流过渡到有序集块时,也不需要发送EDS令牌.
  • 环回发起者必须定期发送SKPOS,如果接受到的SKPOS(回环过来的)长度是在变化的,环回发起者也必须能够处理
  • 环回发起者可以传输EIEOS.
  • 环回发起者传输的数据块或者有序集块中的载荷可以是任意长度,只要环回发起者期望回环这些数据,就都可以发送.
  • 如果环回发起者发送的有序集块中的第一个符号与SKPOS,EIEOS或者EIOS的第一个符号相同,那么环回发起者必须必须发送有效的SKPOS,EIEO或者EIOS,并且需要将这些有序集发送完
    环回追随者的要求
  • 当使用128b/130b编码时,环回追随者必须重新传输它收到的所有比特,并且做任何修改,除非收到了SKPOS,需要用SKPOS来调整两遍的时钟频差
  • 如果需要时钟补偿,环回追随者必须在每一个有序集中添加或者移除4个SKP符号
  • 修正SKP有序集也必须满足定义(必须要有4到20个符号,并且后面紧跟着SKP_END符号,紧接着位环回发起者传输的三个符号)
  • 如果环回追随者不能获得块对齐或者失去了块对齐,它必须能够执行时钟补偿并且有可能回环收到的所有比特,在这种情况下,为了能够继续工作,允许环回追随者添加或者删除一些符号
  • 当接受到的数据从有序集块过渡到数据块时,禁止环回追随者检查是否收到SDSOS
  • 当接收到的数据从数据块过渡到有序集块时,禁止环回追随者检查是否收到了EDS令牌
guest
2 评论
内联反馈
查看所有评论
ink

牛啊