本页是介绍多吉比特收发器(MGT)的系列文章中的第五篇。在讨论了大量主题(并列出了一些用于 FPGA 的协议)之后,是时候看看 PMA 如何把数据转换成电信号,以及如何把电信号转换成数据了。
简介
PMA 包含 MGT 中与物理信道相关的部分。尤其是,串行器和解串器都属于 PMA。换句话说,物理信道上的比特与并行字之间的转换发生在 PMA 内部。
PMA 也是把比特转换成电压的部分。同样,PMA 也从对端 MGT 接收电压,并将其转换为比特。
PMA 的另一个重要作用是补偿电压信号在两个 MGT 之间传输过程中发生的失真:
- 发送端可能有意识地让其为发送而生成的模拟信号发生失真。发送端这样做,是想对物理信道给信号造成的失真做一个反向补偿。这种做法通常称为预加重(pre-emphasis)。
- 接收端的均衡器(equalizer)可以对到达的模拟信号进行整形,以减轻物理信道引起的失真。
本页将介绍这些功能。PMA 还负责另一些只在数据流被关闭时才相关的任务。这些内容将在下一页讨论。
这是一个典型 MGT 的框图,这里再次展示,以表明 PMA 在整体中的位置(本图与上一页的图相同)。
与上一页类似,我将用 Tx PMA 和 Tx PCS 表示 MGT 中用于发送数据的部分;用 Rx PMA 和 Rx PCS 表示用于接收数据的部分。
值得注意的是,在绝大多数使用场景中,你并不需要了解物理信道本身、它是怎样使信号失真以及这种失真是如何被校正的。通常,你只需要知道“使用均衡器是一个好主意”就够了。
不过,也应该认识到:PMA 在很大程度上是一个模拟部件。MGT 在 FPGA 芯片上通常有独立的电源引脚。其中一些引脚为 PMA 供电。这些引脚上的电压往往要求比普通电源更“干净”。若达不到这些要求,MGT 的性能可能会明显下降。
为了便于下文解释,我们来看一条 5 Gb/s 的通信链路。这是 SuperSpeed USB Gen 1 和 PCIe 2.0 等协议所使用的数据速率。我们还将假设 PMA 与 PCS 之间所用的并行字宽度为 32 位。我先从物理信道的简化描述开始,省略一些将在本页后面讨论的细节。
发送数据
Tx PMA 从最低位(LSB)开始依次发送并行字,从而把它转换成电信号。因此,如果位 0 是“1”,Tx PMA 就会调整其输出引脚,使 D+ 与 D- 之间的电压为 500 mV(举例)。如果这一位是“0”,该电压则为 -500 mV(负值)。
Tx PMA 等待 0.2 ns,然后对并行字的位 1 进行相同操作。换句话说,D+ 和 D- 之间的电压将取决于位 1,为 500 mV 或 -500 mV。这样,并行字中的每一位都会在输出引脚上表示 0.2 ns。6.4 ns 之后,整个并行字已经发送到导线上。Tx PMA 会从 Tx PCS 收到一个新的并行字,并以同样的方式开始发送它的值。
Tx PCS 到 Tx PMA 的并行字传输与一个时钟(常称为 XCLK)同步。在本例中,这个时钟的周期为 6.4 ns,因此频率为 156.25 MHz。不出所料,156.25 × 32 = 5000。
我在这里描述的是 SERDES 的发送端。该 SERDES 输出分配给每个比特的时间为 0.2 ns,因此数据速率为 5 Gb/s。
在这个例子中,两个差分输出引脚之间的电压为 500 mV。这在 PCIe 和 SuperSpeed USB 允许的范围内。需要注意的是,协议规范以及 MGT 的数据手册通常用差分峰峰值电压(differential peak-to-peak voltage)来标定这个电压。它等于差分电压的最低值与最高值之差,也就是本例中 -500 mV 与 500 mV 之差。所以本例的差分峰峰值电压为 1000 mV。在规范和手册中见到的通常是 1000 mV,而不是 500 mV。
但是,信号到达接收端时已经发生了变化。下图显示的是模拟信号波形的一个例子:
发送端的输出(D+ 和 D- 之间的电压)以红色显示。蓝色波形是该信号到达接收端时可能出现的一种形态。这个例子是对带宽为 2.5 GHz 的简单低通滤波器的仿真。
在本页中,我会一直使用这个 5 Gb/s 数据速率、差分电压 500 mV 的例子。当然,其他数值也是可能的:FPGA MGT 允许控制数据发送速率和输出电压。
眼图
上图中的波形表明,到达接收端的信号与发送端产生的信号并不相同。眼图(eye diagram)是到达接收端信号的图形化表示。这张图通过在同一坐标系中绘制多条波形而生成,每条波形都对应一组随机发送比特的结果。因此,图中相互重叠的波形代表了到达信号可能出现的各种形态。
下面这个眼图与上图的场景相同:
这张图解释了为什么叫“眼图”。中间的绿色区域形状像一只眼睛。
红线表示测量电压的最佳时刻,以便判断发送的比特是“0”还是“1”。在这个时刻,电压差最大,因此抗噪能力最好。注意,所选的时刻略微位于零点之后。与上图对照:在这个时刻被检测的比特,其 0.2 ns 的持续时间已经开始,而检测发生在稍晚一点的位置。
眼图常用于评估到达接收端的信号质量。这张图常常在对承载信号的物理介质进行仿真时生成。也可以借助示波器或更专业的测量设备,通过对真实信号进行测量来获得眼图。
接收数据
Rx PMA 把电信号转换成并行字:Rx PMA 每隔 0.2 ns 测量一次其两个输入引脚(D+ 和 D-)之间的电压。如果该电压为正,则并行字的位 0 被赋值为“1”,否则为“0”。Rx PMA 继续对并行字的下一个位(从位 1 到位 31)赋值。当并行字完成后,Rx PMA 把它交给 Rx PCS。因此,Rx PMA 就是 Tx PMA 的镜像。
但 Rx PMA 如何知道究竟应在什么时候测量输入引脚的电压呢?它应当每隔 0.2 ns 测量一次,但应该在这个时间段内的哪个时刻测量呢?Rx PMA 怎么知道上面眼图中红线标示的最佳时刻?
更麻烦的是,Rx PMA 往往无法获得 Tx PMA 所依赖的参考时钟。因此,接收端对“0.2 ns 有多长”的感知,与发送端并不完全相同。而且,由于抖动(jitter),这个参考时钟的频率还在一直随机变化。对于要求使用 SSC(Spread Spectrum Clock,扩频时钟)的协议,这个时钟的频率还会按照预设的样式持续地有意变化。
解决这个问题的方法就是时钟数据恢复(Clock Data Recovery,CDR)。这是 Rx PMA 内部的一个机制,用来寻找对输入引脚电压进行采样(sampling)的最佳时刻。CDR 会生成一个自动适应入站数据流的采样时钟。在本例中,这个时钟经过 32 分频后,用于产生与 Rx PCS 接口的时钟。
CDR 对到达的模拟信号中“0”与“1”之间的跳变很敏感。更准确地说,CDR 检测两个差分引脚之间电压由正变负或由负变正的时刻。这使得 CDR 能够根据发送端所使用的时钟,来调整其所生成的采样时钟的频率。
为了正常工作,CDR 需要自己的参考时钟。这个参考时钟的频率必须与发送端的时钟频率大致相同。不过,该参考时钟只用于与数据流的初始同步。完成初始同步后,CDR 会借助 PLL 跟随发送端的频率。这种自适应机制会持续微调采样时钟的频率,以生成发送端时钟的一个副本。除此之外,CDR 还努力在每个 0.2 ns 周期内把采样时刻移动到最佳点。换句话说,CDR 试图确保对信号的采样发生在上面眼图中红线所示的位置。
CDR 在获得可靠通信链路方面起着关键作用。例如,如果发送端使用质量较差、抖动较大的参考时钟,这会给每个比特的时间长度增加随机性。如果接收端的 CDR 不能足够快地适应这种随机性,采样就会发生在非最佳位置,从而增加误码概率。CDR 也可能完全失去同步,导致通信链路暂时中断。这类情况常常被误认为是数据导线信号完整性的问题,而不是时钟质量不佳的问题。
在 FPGA MGT 中,CDR 的行为取决于几个可配置参数。遗憾的是,这些参数的含义通常很复杂,而且缺乏文档说明。FPGA 工具会根据 MGT 的设置(尤其是数据速率)自动为这些参数选择数值。如果选择了某个众所周知的协议,CDR 参数也会相应地被选定。有时值得测试不同的设置,以获得更稳定的链路,特别是在两个 MGT 之间的连接包含低质量线缆和连接器时。
极性反转
Rx PMA 和 Tx PMA 都支持对物理信道进行极性反转。这意味着发送“1”时改为发送“0”,反之亦然;或者在本来会收到“0”时收到“1”,反之亦然。
换句话说,即使 D+ 和 D- 两根导线接反了,MGT 也能对此进行补偿。这是一个简单却非常重要的功能,常常能简化 PCB 设计。
信号失真
在理想情况下,发送 MGT 发出的电压信号会原封不动地到达接收 MGT。而实际上,信号在到达目的地之前会经历若干变化。最显著的问题是信号路径的滤波特性:每当 Tx PMA 发送了“1”之后再发送“0”时,电压会从正电压急剧跳变到负电压。同样,从“0”到“1”的跳变自然也是如此。这种急剧的电压变化会被承载信号的物理介质所扭曲。线缆和 PCB 走线的行为都像低通滤波器。
下图显示的是与上面相同的波形例子,但这次对一个更难对付的物理信道进行了仿真:
蓝色波形显示,到达接收端的电压会“记住”在此之前发送的几个比特的值。回想前面所说,接收端根据电压为负还是为正来决定“0”或“1”。因此,先前比特的值会干扰接收端的判决。一个比特对另一个比特的判决造成干扰的现象称为码间干扰(Inter-Symbol Interference,ISI)。
同一物理信道仿真得到的眼图:
这个眼图表明,仍然能够区分“0”和“1”,但裕量小得多。换句话说,只要很少的噪声就会引发错误。
除了上图中通过仿真揭示的效应之外,信号还会以其他方式发生失真:
- 信号在向接收端传输的过程中会损失能量,因此差分线之间的电压会比发送时更低。
- 信号从发送端到接收端的过程中会产生反射。这种效应类似于声学回声,尤其是当信号经过连接器或其他导电介质突变点时更容易出现。
- 各种外部噪声源也会叠加到信号上。这通常不是 MGT 之间通信的主导因素,因为失真带来的影响往往更显著。但在线缆很长且隔离不佳时,这种噪声可能相当可观。
下面来看减轻物理信道信号失真的两种机制:接收端的均衡器,以及发送端的预加重。
均衡器
均衡器会对到达 MGT 的模拟信号进行整形,以减轻物理信道信号失真带来的影响。通过这种方式,均衡器降低了信道的误比特概率,并允许使用更高的数据速率。均衡器在 Rx PMA 的处理链中总是处于第一步。
实际使用的均衡器主要有两类。某个 MGT 可能同时支持这两类:
- LPM(Low Power Mode,低功耗模式)。这种均衡器通常包含一个高通滤波器,用来补偿物理信道衰减模拟信号高频成分的倾向。有些 MGT 会自动让这种滤波器适应收到的信号;而在不太先进的 MGT 上,则可能需要应用逻辑从若干候选滤波器中选择一个。
- DFE(Decision Feedback Equalizer,判决反馈均衡器),下面作更详细的说明。
回顾上面的例子,Rx PMA 每隔 0.2 ns 测量一次其两个输入引脚(D+ 和 D-)之间的电压,并根据该电压是负值还是正值检测为“0”或“1”。当使用均衡器时,Rx PMA 改为依据均衡器的输出。
如果使用 DFE,则假定发送端能够确保所发送的比特在统计上相互独立。如果物理信道不使信号失真会怎样呢?在这种情况下,Rx PMA 用来判断“0”或“1”的各个电压在统计上也是相互独立的。换句话说,每次 Rx PMA 检查其模拟输入信号时,该信号与之前的信号或之后的信号都不应有统计关联。
但实际上,物理信道会使承载数据流的信号发生失真。因此,表示“0”或“1”的电压之间会存在统计关联:低通滤波器效应把电压信号“涂抹”开来,反射(“回声”)也会降低信号质量。每个比特的电压电平会“溢出”到相邻比特。如前所述,这种效应称为码间干扰(Inter-Symbol Interference,ISI)。如果接收端不采取措施来减轻 ISI 的影响,这种比特之间的相互干扰就相当于给信道添加了噪声。
DFE 的工作原理与回声消除器类似:它包含一个自适应滤波器,用来消除表示“0”或“1”的各个采样之间的相关性。更准确地说,它消除的是被检测比特(“0”或“1”)与相邻比特所属模拟信号之间的相关性。换句话说,如果 DFE 实现了其目标,那么用于判决某个比特值的模拟信号与其他比特值之间就不存在统计相关性。此时 ISI 被降到零,意味着信道的“涂抹”效应和反射不会影响传输质量。
请注意,如果信道上发送的比特之间存在统计相关性,DFE 会试图消除这种相关性。结果,DFE 会以一种并不对应物理信道真实失真的方式来调整模拟滤波器。于是,DFE 反而会使信号失真,而不是修复信号。这就是为什么启用 DFE 时总是需要使用加扰器(scrambler)的原因。
如果无法保证发送比特之间互不相关,那么 LPM 均衡器可能更合适。MGT 的数据手册通常会说明 LPM 均衡器是否可以在不使用加扰器的情况下工作。
并非所有 MGT 都有 DFE,但几乎所有 MGT 都有某种 LPM 均衡器。数据手册中关于 MGT 支持何种均衡器以及它们如何工作的信息往往不完整。如果手册对均衡器类型只字未提,那么多半是 LPM。
尽管 DFE 在类型上更复杂,但它并不总是比 LPM 更好,即使比特之间是不相关的。尤其是当物理信道质量相对较高时,LPM 可能优于 DFE。
预加重
对发送端的输出信号进行整形,以改善到达接收端的信号,这种方法称为预加重(pre-emphasis)。当信号失真十分严重,以至于接收端根本无法与数据流同步时,这种方法尤其有用。预加重有若干变体,每种 MGT 都有自己的功能集合。
在大多数情况下,物理信道具有低通滤波器的效果。发送端可以主动对输出信号进行整形,从而补偿信道的一部分失真。最简单的机制是后光标加重(post-cursor emphasis):由于物理信道对发送端输出变化的响应较慢,发送端在比特发生跳变时施加更高的电压,以补偿这一点。或者更准确地说,发送端在不发生跳变的比特上降低电压。
为了说明这个机制,回顾上面的例子:发送端的输出要么是 -500 mV(“0”),要么是 500 mV(“1”)。
使用后光标加重时,如果输出从“0”变为“1”,发送端输出仍然是 500 mV。但如果下一个比特仍然是“1”,输出电压就会降低,例如为 400 mV。对于从“1”到“0”的跳变也是一样:输出电压将为 -500 mV,但若下一个比特仍然是“0”,电压则为 -400 mV。
下图显示了与上一个波形图相同的仿真,但应用了后光标加重:
红色波形显示了后光标加重的工作原理:每次比特跳变时,输出电压都会获得一个小幅提升,否则便回落到较低电压。这种方法常常称为去加重(de-emphasis),因为发送端降低了重复比特的电压,使这些比特“不那么被强调”。
将蓝色波形与上图比较,可以明显看到这个电压的摆幅更小。这看起来可能没什么大不了,但在眼图上差异更明显:
这显然好一些,但还不够好:在这种场景下,仍然需要均衡器。
注意,后光标加重可以描述为一个简单的 FIR 滤波器。将没有加重时的发送端电压记为 x(n)(n 为所发送比特的编号)。每个 x(n) 都可以是 -500 mV 或 500 mV。那么,采用后光标加重后,发送端的输出可以写成:
y(n) = 0.9 x(n) - 0.1 x(n-1)
这是一个 FIR 滤波器的简单表达式,它有利于高频信号。这可以看作是对物理信道低通特性的一种补偿。
“后光标加重”中的“post-cursor(后光标)”一词,与这个 FIR 滤波器可写成如下形式这一事实有关:
y(n) = (1-a) x(n) - a x(n-1)
在这个表达式中,a 通常选为正数。
这个 FIR 滤波器基本说明了:y(n) 的值主要取决于 x(n),但如果 x(n-1) 与 x(n) 取值相同,y(n) 就会略微向零靠近。也就是说,对 y(n) 的调整取决于前一个比特。
因此,“cursor(光标)”一词与当前正在发送的比特有关,而“post”则表示这个滤波器依赖于已经发送过的那个比特,也就是光标之后的那个比特。
对于有利于高频信号的 FIR 滤波器,可以把这个思想进一步推广。尤其是,MGT 中常常会实现如下的 FIR 滤波器:
y(n) = apre x(n+1) + a0 x(n) - apost x(n-1)
在这个表达式中,apost 与前面介绍过的后光标加重有关。apre 则表示与“光标”之前的那个比特之间的依赖,即预光标加重(pre-cursor emphasis),有时也叫做预冲(preshoot)。注意,不要将它与“预加重”这个词混淆,后者涵盖了对发送端输出信号进行 FIR 滤波整形所能表示的各类操作。
每种 MGT 在整形发送信号方面提供不同的选择。因为有些协议要求后光标加重,所以这种功能通常总是可用。至于其他变体,则要看具体 MGT。
预加重的明显缺点是:发送端调整的效果如何,只有接收端知道。回想一下,均衡器可以持续自我调整,以获得最佳接收效果。但预加重机制通常并不知道信号在另一端接收得怎么样。这个问题可以通过协议来解决。例如,DisplayPort 协议规定了一种机制,允许接收方向发送端发送请求。这样,接收端就能控制发送端的电压电平以及后光标加重的程度。
当物理信道事先已知时,预加重也很有用,例如两片 FPGA 在 PCB 上直接互连时。不过,即使信道参数未知,使用预加重通常也是好主意,特别是在高数据速率(8 Gb/s 及以上)的情况下。
注意,预加重机制与均衡器并不是彼此的替代品,尽管两者都是改善信号质量、减少错误的滤波器。在这两者中,均衡器通常是更强大的工具。预加重的作用应当是帮助均衡器,或确保信号质量足以让接收端能够与发送端同步。
在许多应用中,根本不使用预加重。当两个 MGT 之间距离较长,尤其是当信号在 PCB 上传输时,这种工具才特别有用。如果距离相当短,而且接收端配备了良好的均衡器,通常就没有理由去调节发送端的输出信号。
统计眼图扫描
人们往往希望评估信道的质量,即使所有数据都在无错到达。尤其是,想知道信道离开始产生错误还有多远:信道是足够稳固,还是只要物理介质发生极微小的变化就会开始出错?
另外,回顾上一页所说,当信道用于传输有效数据时,无法同时进行 BER 测试。因此,很难在信道使用过程中评估其质量(除非某些协议会报告所有错误,例如 xillyp2p)。
评估链路质量的常用方法是在接收端测量眼图。当信号通过线缆和连接器到达时,这是可以做到的:有用于这一目的的测量设备(价格相当昂贵)。但是,当信号在 PCB 上传输并到达芯片(尤其是 FPGA)时,通常没有地方可以从导线上拾取信号。用探头去触碰 PCB 上的导线会显著改变信号形状,所以这种测量将没有意义。
解决这个问题的巧妙办法是统计眼图扫描(statistical eye scan)。也就是说,由 Rx PMA 自己来测量信号的眼图。这种方法有几个优点:
- 信号测量点正好是 Rx PMA 判断“0”或“1”的地方。
- 测量不会改变信号。
- 测量结果包含均衡器的校正效果。因此,它有助于选择使用哪种均衡器,并对其参数进行微调。
- 如果 CDR 无法应对发送端时钟的抖动,这一点也会在这次测量中显示出来。
- 测量不会干扰 Rx PMA 的正常工作。因此,可以在信道承载真实数据的同时对它进行测试。
这种方法只有一个缺点:得到的结果并不是真正的眼图。但它的用途几乎与眼图一样大。
回顾上面所说,Rx PMA 会根据到达信号的差分电压是负还是正,来判断收到的是“0”还是“1”。CDR 负责在最佳时机做出这种判断。
为了执行统计眼图扫描,在 Rx PMA 内部还有一个对“0”或“1”进行判断的单元。不过,这第二个单元做出判断的时刻会比第一个单元稍微早一点或稍微晚一点。这个时间偏移可以通过设置 MGT 的寄存器来控制(这可以在 MGT 工作时进行)。
这两个单元的另一个区别在于它们如何判断信号是“0”还是“1”:如前所述,第一个单元把信号电压与零进行比较。而第二个单元可以改为与一系列其他电压阈值进行比较。例如,如果电压阈值选为 100 mV,那么当收到的信号高于 100 mV 时,第二个单元判定为“1”,否则判定为“0”。
因此,第二个单元与第一个单元做的事情完全相同,只是在时间和电压上都存在偏移。MGT 内部的逻辑会自动比较指定次数的判决结果,并统计两者不一致的次数。换句话说,这个逻辑统计的是:如果采样时刻发生移动、阈值电压发生移动,Rx PMA 对某个比特的判决会有多少次发生变化。
如果这两个单元的判断从未出现差异,说明第二个单元所在的位置(由时间和电压给定)位于上面眼图中标记为绿色的区域内部。这种状态的标志是:在足够长的测量时间之后,计数结果仍然为零。随着第二个单元的位置逐渐靠近绿色区域的边缘,计数器的结果会不断增高。
要获得统计眼图扫描图,需要对一系列时间偏移和电压阈值重复这两个单元之间的比较。这可以由应用逻辑完成,也可以通过 JTAG 设置 MGT 的寄存器来完成。这个过程类似于一个计算机程序:在遍历阈值电压的 for 循环内,再嵌套一个遍历时间偏移的 for 循环。完成这次操作需要多长时间,取决于测量的精度。
下面是一个统计眼图扫描的示例(取自另一个页面),由 Artix-7 FPGA 获得。中间的绿色区域与上面眼图中的绿色区域相对应。该测量结果与上面显示的所有图片在数值上不同,因为上面的示例只仿真了信号失真中的一种类型。
获得这样一张图大约需要一分钟。但实际上,如果用不到一秒就能获得的较粗糙图像,也足以对信道质量做出很好的评估。
通常情况下,为了获得统计眼图扫描,并不需要专门设计任何东西。尤其是,这个过程可以通过 Vivado 借助 JTAG 连接来完成。遗憾的是,并非所有 MGT 都具备统计眼图扫描的能力。







