本文最后更新于 642 天前,其中的信息可能已经有所发展或是发生改变。
介绍
PIPE : PHY Interface for the PCI Express
信号
input和output是相对于PHY来说
发送端接口信号
- Tx+,Tx- (PHY的Tx)
:- Output
:- PHY的差分输出 - TxData[M:0]
:- Input (MAC的TxData给PHY)
:- M可以是31,15或7,数据总线,当M为16时,bit[7:0]是传输的第一个symbol,bit[15:8]是传输的第二个symbol。当M为32时,代表4个symbol,bit[23:16]是传输数据的第三个symbol,bit[31:24]是传输的第四个symbol - TxdataK[N:0]
:- Input
:- N可以是3或者1, 用于表明传输的内容是Data还是Control。bit[0]代表TxData的低八位, bit[3]代表TxData的高八位。当 TxData[M:0]中的M为31时, N为3
:- 1:传输内容为Control; 0:传输内容为Data
:- 在8.0GT/s不使用 - TxDataValid
:- Input
:- MAC通知PHY忽略一个周期的data interface
:- 1:PHY会使用data, 0:PHY不会使用data - TxStartBlock
:- Input
:- 只在8.0GT/s及以上链路速率使用, 允许MAC把128b block的起始byte告知PHY. bit[0] 为128b block的最高位。
接受端接口信号
- Rx+,Rx-
:- Input (PHY的输入)
:- 差分输入信号 - RxData[M:0]
:- Output (PHY的RxData给MAC)
:- 并行输出信号, M可以是31,15或者7, bit[7:0] 是传输数据的第一个symbol, bit[15:8] 传输数据的第二个symbol, bit[23:16] 传输数据的第三个symbol, bit[31:24] 传输数据的第四个symbol - RxDataK[N:0]
:- Input
:- 用于指示接受到的内容是Data还是Contrl, bit[0]代表RxData的低八位,bit[3]代表RxData的高八位
:- 1:传输内容为Control; 0 : 传输内容为Data
:- 在8.0GT/s不使用 - RxDataValid
:- Output
:- PHY告知MAC忽略一个时钟的数据
:- 1:MAC会使用数据; 0:MAC不会使用数据
:- 当RxValid为0时, RxDataValid也要为0 - RxStartBlock
:- Output
:- 允许PHY告知MAC 128b block的初始byte, bit[0]是128b block的最高位
:- 当RxValid为0时, RxStartBlock也应该为0
命令接口信号
- PHY Mode[1:0]
:- Input
:- 0:PCI Express; 1:USB; 2:SATA; 3:Reserved
:- 仅支持仅支持单个模式的物理的实现 - Elasticity Buffer Mode
:- Input
:- 0:Nominal Half Full Buffer mode(半满); 1:Nominal Empty Buffer Mode(空缓冲)
:- 仅对于支持多个弹性缓冲模式的PHY才需要此信号 - TxDetectRx/Loopback
:- Input; 高电平有效
:- 通知PHY开始执行receiver detection或者loopback - TxElecIdle
:- Input; 高电平有效
:- 1:强制Tx的Output处于electrical idel状态(在Loopback状态无效)
:- 当TxElecIdle向0或者1跳变时, MAC总是要把TxDataValid设置为1 - Tx Pattern[1:0]
:- Input - TxCompliance
:- Input, 高电平有效
:- 把running disparity设置为负
:- 传输PCI Express compliance pattern时使用 - TxOnesZeros
:- Input, 高电平有效
:- 支持USB模式时才会使用该信号 - RxPolarity
:- Input, 高电平有效
:- 通知PHY是否需要对接受到的数据进行极性翻转
:- 1:PHY不需要极性翻转; 0:PHY需要做极性翻转 - RxEqTraining
:- Input, 高电平有效
:- 支持USB模式时才会使用该信号 - Reset#
:- Input, 低电平有效
:- 异步信号,复位收发机 - PowerDown[2:0]
:- Input
:- 关闭或者打开收发器
:- 000:P0,正常操作; 001:P0s,低恢复时间延迟, power saving state; 010:更长的恢复时间延迟, lower power state; 011:P2, lowest power state.
:- 当从P2向P1转变时, 信号是异步的(没有PCLK) - Rate[1:0]
:- Input
:- 0:2.5GT/s; 1:5.0GT/s; 2:8.0GT/s; 3:16.0GT/s - Width[1:0]
:- Input
:- 控制PIPE data path宽度
:- 0:8bits; 1:16bits; 2:32bits; 3:Reserved - PCLK Rate[2:0]
:- Input
:- 0:62.5Mhz; 1:125Mhz; 2:250Mhz; 3:500Mhz; 4:1000Mhz; 5,6,7:Reserved - LocalTxPresetCoefficients[17:0]
:- Output
:- 在GetLocalPresetCoeffcients请求后的LocalPresetIndex[3:0]的预设系数
:- bit[5:0]:C-1; bit[11:6]:C0; bit[17:12]:C+1
:- 设置了LocalTxCoefficientsValid后才有效
:- 当MAC希望使用这些preset(预设)后,MAC会把这些系数值反应在TxDeemph bus上
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号 - TxDeemph[17:0]
:- Input
:- 2.5或者5.0GT/s时, 0:-6dB de-emphasis; 1:-3.5dB de-emphasis; 2:No de-emphasis; 3:Reserved
:- 只支持2.5GT/s时不用实现该信号
:- 8.0GT/s时,bit[5:0]:C-1; bit[11:6]:C0; bit[17:12]:C+1 - RxPresentHint[2:0]
:- Input
:- 为接收器提供RX预设提示(RX preset hint) - LocalFS[5:0]
:- Output
:- 为PHY提供FS值
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号
:- 仅当在RESET#之后的PhyStatus脉冲或在速率更改为8 GT/s后的第一个PhyStatus脉冲时,该值才会由MAC采样。 - LocalLF[5:0]
:- Output
:- 为PHY提供LF值
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号
:- 仅当在RESET#之后的PhyStatus脉冲或在速率更改为8 GT/s后的第一个PhyStatus脉冲时,该值才会由MAC采样。 - LocalPresetIndex[3:0]
:- Input
:- MAC请求PHY preset coefficients的索引
:- 0000b:Preset P0; 0001b:Preset P1; 0010b:Preset P2; 0011b:Preset P3; 0100b:Preset P4; 0101b:Preset P5; 0110b:Preset P6; 0111b:Preset P7; 1000b:Preset P8; 1001b:Preset P9; 1010b:Preset P10;后面的保留
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号 - GetLocalPresetCoeffcients
:- ”’没理解清楚”’
:- Input, 高电平有效
:- MAC维持一个周期高电平,要求在LocalPreesetIndex[3:0]上进行preset的预设映射到localtxpresetceflice[17:0]上的系数
:- PHY的最大相应时间为128ns
:- MAC在reset后的任何时间都可以请求
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号 - LocalTxCoefficientsValid
:- Output, 高电平有效
:- 当PHY把此信号拉高一个周期时,表示LocalTxPresetCoefficients[17:0]正确的表示了LocalPreesetIndex Bus上预设的系数值
:- 当PHY想要动态更新preset coefficient(预设系数)时才会使用这些信号 - FS[5:0]
:- Input
:- 提供Link partner宣称的FS值
:- 在链路训练中,只有捕获到新的FS值时,MAC才会改变这些值
:- 这些信号只会在8.0GT/s及以上速率才会用到 - LF[5:0]
:- Input
:- 提供Link partner宣称的FS值
:- 在链路训练中,只有捕获到新的LF值时,MAC才会改变这些值
:- 这些信号只会在8.0GT/s及以上速率才会用到 - RxEqEval
:- Input, 高电平有效
:- 当MAC把此位设置为1时,PHY开始评估远端发射机Tx EQ设置
:- 这些信号只会在8.0GT/s及以上速率才会用到 - RxEqlnProgress
:- Input, 高电平有效
:- PHY可以选择使用此信号来启用和禁用仅在链接均衡评估期间需要的功能
:- 当第一次在链路训练的phase2或者phase3阶段设置RxEqEval时,同时也需要把信号设置为1, 直到phase2或者phase3结束
:- 当PHY开始训练时置位此信号, PHY锁存链路伙伴的初始系数
:- 在其他时间, MAC应该把此信号设置为0 - LinkEvaluationFeedbackFigureMerit[7:0]
:- Output
:- 提供PHY链接均衡评估图
:- 这些信号只会在8.0GT/s及以上速率才会用到 - LinkEvaluationFeedbackDirectionChange[5:0]
:- Output
:- 在方向更改格式中提供链接均衡评估反馈, 为每个系数提供反馈
:- [1:0]:C-1; [3:2]:C0; [5:5]:C1
:- 如果反馈值为00:没发生改变; 01:增加; 10:减少; 11:保留
:- 这些信号只会在8.0GT/s及以上速率才会用到 - InvalidRequest
:- ”’协议写的不明白”’
:- Input, 高电平有效
:- 指示链接评估反馈请求链接合作伙伴TX EQ设置超出范围。
:- 这些信号只会在8.0GT/s及以上速率才会用到 - TxMargin[2:0]
:- Input
:- 设置发射机电压
:- 2.5GT/s时不用实现该信号
:- 000:TxMargin值0=正常操作范围
:- 001:TxMargin值为1,800-1200mv的full swing(全摆幅)电压或者400-700mv的half swing(半摆幅)电压;
:- 010:TxMargin值为2, 厂商定义
:- 011:TxMargin值为3,厂商定义
:- 100-111:TxMargin值为4, 200-400mv的全摆幅电压或者100-200mv的半摆幅电压 - TxSwing
:- Input
:- 控制发射机电压摆幅
:- 1:full swing(全摆幅); 0:Low swing(低摆幅)-可选
:- 在8.0GT/s时不使用 - TxSyncHeader[3:0]
:- Input
:- 为PHY提供sync header, PHY在下一个130b block使用
:- 当TxStartBlock信号为1, PHY读却这个信号的值
:- 这个信号只会在8.0GT/s及以上速率才会使用 - RxSyncHeader[3:0]
:- Output
:- PHY给MAC提供的sync header, 以便于MAC在下一个128b block中使用
:- 当RxStartBlock设置为1时, MAC会读取该信号的值
:- 这个信号只会在8.0GT/s及以上速率才会使用 - BlockAlignControl
:- Input
:- 控制PHY是否执行block alignment(块对齐)
:- 0:禁止PHY搜索EIEOS; 1:允许PHY搜索EIEOS
:- MAC应该把一条link上的所有lane都设置成相同的值
:- 对于数据流, MAC应该把该值设置为0
:- 这个信号只会在8.0GT/s及以上速率才会使用 - RxStandby
:- Input
:- 当PHY处于P0或者P0s时,控制PHY的RX是否是active
:- 0:Active; 1:Standby
:- 当PHY处于P1或者P2时,应该忽悠RxStandby - RxStandbyStatus
:- Output
:- PHY使用该信号指示RxStartBy状态
:- 在PHY不提供PCLK时, 高速接收机总是关闭,用RxStandbyStatus反应高速接受机状态 - EncodeDecodeBypass
:- Input
:- 控制PHY是否执行8b/10b编码和解码
:- 0:PHY正常执行8b/10b编解码; 1:不执行8b/10b编解码
:- MAC只能在reset期间或者P0状态改变此值
:- 值为1时, 不使用TxDataK和RxDataK。并且data bus宽度为10,20或40bits - RxValid
:- Output, 高电平有效
:- 指示RxData和RxDataK上的symbol lock和有效数据
:- 这个信号只会在8.0GT/s及以上速率才会使用
:- BlockAlignControl=1时, RxValid指示block aligner处于Aligned状态
:* 如果block aligner从Aligned状态跳转到Unaligned状态,RxValid在block中的任何地方都可以置为0
:* 如果block aligner从Unaligned状态哦跳转到Aligned状态, RxValid在block的开始置为1
:- BlockAlignControl=0时, RxValid一直为代表block aligner处于Locked状态。 - PhyStatus
:- Output, 高电平有效
:- 在Reset#,电源管理, 状态改变, 速度改变和接收机检测后, 传达PHY的几个功能是否完成,包括稳定的PCLK,或者Max PCLK
:- 当没有提供PCLK时, 在进入或者退出PHY的任何状态时都是异步的 - AlignDetect
:- Output, 高电平有效 - RxElecIdle
:- Output, 高电平有效
:- 指示接收机坚持到electrical idle状态
:- 当PHY处于P2状态,清0 - RxStatus[2:0]
:- Output
:- 当接受到数据时, 编码接受机状态和错误代码
:- 000:接受数据正常
:- 001:添加了一个SKP
:- 010:移除了一个SKP
:- 011:检测到了接收机
:- 100:8b/10b(128b/130b)解码错误和接受Disparity错误
:- 101:Elastic Buffer overflow
:- 110:Elastic Buffer underflow
:- 111:Receive disparity error (如果EncodeDecodeBypass置1则不使用) - PclkChangeOk
:- Output, 高电平有效
:- 只有当PCLk是PHY的输入时才使用
:- 1:MAC准备改变PCLK速度是,PHY把该位置1 - PclkChangeAck
:- Input, 高电平有效
:- 只有当PCLk是PHY的输入时才使用
:- 当PCLK速度改变完成且稳定后,MAC把该位置为1
如果在这个过程中遇到了其它问题,欢迎在评论区留言,或者Google一下,也欢迎把具体的解决方法留在评论区,以供后来者参考
参考
- PHY Interface For the PCI Express, SATA, and USB3.1 Architectures, version 4.2