沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

时间:2024-04-05 14:42:27

总目录在这哦~

https://blog.csdn.net/z123canghai/article/details/107700878


第六章 接收端结构及功能说明


子目录

6.1 RX的模拟前端

6.2 RX的OOB信号

6.3 RX的均衡器

6.4 RX的CDR 时钟数据恢复

6.5 RX时钟输出结构

6.6 RX 的极性控制

6.7 RX 的PRBS

6.8 Rx字节、字的对齐功能

6.9 Rx接收弹性缓冲区

6.10 Rx的时钟纠正

6.11 Rx接收通道绑定

6.12 Rx Gearbox(变速器)

6.13 Rx 接口


         每个GTP都有一个独立的接收模块,如下图所示。高速串行数据流从外部引进进入PMA端,再从PMA层流入PCS段进而到达用户接口。本章主要内容就是介绍数据流过的各个模块是什么以及如何配置。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

 


6.1 RX的模拟前端

         什么是模拟前端呢?(analog front-end AFE),其目的是处理信号源给出的模拟信号,对其进行数字化分析处理。例如信号放大,电压均衡等。这部分内容就是图4-1的RX EQ,其功能模块的内部结构如下图所示。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

         对于GTP的接收端,模拟前端的主要工作内容有两点,1是配置接收端电压模式,2是校准终端电阻。这部分内容在选项卡中进行配置,主要涉及内容如下:

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

         Differential Swing and Emphasis Mode 是根据所选择的模式(PCIE、OPI等),指定发射器前置光标预加重模式设置。选择自定义模式可启用差异摆动和预加重级别的用户驱动设置。

         RX Equalization是均衡的意思,这里可设置均衡模式。这个在下节内容阐述。

         RX Termination是选择终结电阻,ug482给出了三种模式可供选择。分别支持不同的协议。


6.2 RX的OOB信号

         Out Of Band

带外信号,为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道。GTP收发器接收器支持解码串行ATA(SATA)和串行连接SCSI(SAS)规范中描述的带外(OOB)序列,并支持PCI Express规范中描述的信标。支持SATA / SAS OOB信令的GTP收发器接收器包括解码OOB信号状态和状态机所需的模拟电路,以解码SATA / SAS COM序列的OOB信号突发。GTP收发器接收器还通过使用PCI接口(PIPE)规范的PHY接口中定义的接口信号,支持符合PCI Express的信标。FPGA逻辑对信标序列进行解码。

这块就不细看了,大概知道OOB是什么就可以。

6.3 RX的均衡器

         GTP收发器接收器具有功率有效的自适应连续时间线性均衡器(CTLE),以补偿由于物理信道中的高频衰减引起的信号失真。为了保持与7系列FPGA GTX和GTH收发器的奇偶校验,CTLE被称为低功耗模式(LPM)。

LPM模式(见图4-15)具有自适应低频和高频增强功能。适用于短距离应用的线速率高达6.6 Gb / s的应用,奈奎斯特频率下的信道损耗为12 dB或更低。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

补充个小知识点:

均衡器(equalizer) 通信系统中,校正传输信道幅度频率特性和相位频率特性的部件。将频率为f的正弦波送入传输信道,输出电压与输入电压的幅度比随f变化的特性称为幅度频率特性,简称幅频特性;输出电压与输入电压间的相位差随f变化的特性称为相位频率特性,简称相频特性。

6.4 RX的CDR 时钟数据恢复

CDR即(clock data recovery),时钟数据恢复。就是从串行数据里面提取数据和时钟信息,时钟恢复过程是无法产生一个共用时钟或者同数据一起发送时钟的。是由锁相环(PLL)合成出一个与输入串行信号的时钟频率一致的时钟作为替代,。也就是说,时钟恢复可以理解为时钟相位恢复,能够保证对接收的串行数据准确的采样。毕竟我们无法确定用什么样的相位来接收外接串行数据,但知道用什么频率来接收。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

         上图是GTP的CDR电路,串行数据进过均衡后将信号同时送给边沿采样和数据采样两个模块,数据采用处理后的数据被送到CDR状态机和下游功能块,CDR使用来自边沿和数据采样器的数据来确定输入数据流的相位并控制相位插值器(PI)。边缘采样器的相位被锁定到数据流的过渡区域,而数据采样器的相位位于数据眼睛的中间。

         PLL0或PLL1为相位插值器提供基本时钟。相位插值器反过来产生精细,均匀间隔的采样相位,以使CDR状态机具有精细的相位控制。CDR状态机可以跟踪可以具有与本地PLL参考时钟的频率偏移的输入数据流。

         这部分内容目前理解不说很透彻,就不胡咧咧了~

6.5 RX时钟输出结构

         这个和发送端并无二至,如果看过第五章第二节内容,该部分内容是可以忽略的。RX时钟分频器控制模块有两个主要组件:串行时钟分频器控制和并行时钟分频器和选择器控制。时钟分频器和选择器的详细信息如下图所示。其中需要注意的几点如下:

1、RXOUTCLKPCS和RXOUTCLKFABRIC是冗余输出。新设计是用RXOUTCLK

2、REFCLK_CTRL选项由软件自动控制,用户无法选择。用户只能将IBUFDS_GTE2的O或ODIV2输出之一路由到FPGA逻辑。

3、IBUFDS_GTE2是一个冗余输出,用于提供额外的时钟方案灵活性。

4.、选择/ 4或/ 5分频器块由GTPE2_CHANNEL原语的RX_DATA_WIDTH属性控制。

当RX_DATA_WIDTH = 20或40时选择/ 5,RX_DATA_WIDTH = 16或32.时选择/ 4。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

每个发送器PMA模块都有一个D分频器,它将PLL的时钟分频,以降低线路速率。此串行时钟分频器D可以为具有固定线路速率的应用静态设置,也可以针对具有多个线路速率的协议动态更改。表4-16中描述了串行分频器的控制。有关每个速度等级的线速范围的详细信息,请参见相应数据手册的7系列FPGA文档页面。

要在固定线路速率应用中使用D分频器,必须将RXOUT_DIV属性设置为适当的值,并且RXRATE端口需要连接到3'b000。有关详细信息,请参阅表4-16中的“通过属性进行静态设置”列。

要在多个线路速率应用中使用D分频器,RXRATE端口用于动态选择D分频器值。RXOUT_DIV属性和RXRATE端口必须在器件配置时选择相同的D分频器值。设备配置后,RXRATE用于动态更改D分频器值。有关详细信息,请参阅表4-16中的“通过端口动态控制”一栏。

我们可以选择时钟的路径。

6.6 RX 的极性控制

如果在PCB上意外交换了RXP和RXN差分走线,则GTP收发器RX接收的差分数据将被反转。GTP收发器RX允许在SIPO之后对PCS中的并行字节进行反转,以抵消差分对上的反向极性。极性控制功能使用RXPOLARITY输入,该输入从结构用户界面驱动为高电平以反转极性

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

6.7 RX 的PRBS

GTP收发器接收器包括一个内置的PRBS检查器(见图4-24)。可以将此检查器设置为检查四种行业标准PRBS模式之一。检查器是自同步的,并在K码对齐或解码之前处理传入的数据。此功能可用于测试通道的信号完整性。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

6.8 Rx字节、字的对齐功能

         GTP RX端接收的串行数据在进行解串(并行化)之前,需要进行特征边界对齐,使得并行数据得到正确的恢复。GTP进行对齐操作的方式是通过检测K码实现的。RX接收器从输入的串行数据流中搜索comma,若RX接收器检测到K码则将K码移动到字节边界,使得接收端接收的并行数据与发送端发送的数据一致。为实现该功能,GTP有两种方式,一种是自动对齐一种是手动对齐,手动对齐不做介绍,用到时候再说吧。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

         K码检测模式配置

首先要强调的一点是K码是8B/10B编码中的内容,主要操作是在对GTP配置中实现的,如图所示。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

8B/10B编码方案中会有+1与-1两种状态,这就是所谓的极性偏差( running disparity,RD)。所以在检测K码时,K28.5就会有两种K码,所以K码对齐功能有MCOMMA和PCOMMA模式,也就是plus comma 和Minus Comma。将ENPCOMMALIGN和ENMCOMMALIGN两个打勾使能即可检测两种模式,可与其中一种模式对齐即可。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

Decode Valid Comma Only 如果选择该选项K码检测模块只检测他所默认的K码,即K28.5和K28.1。

Combine plus/minus commas 如果使能该选项,则MCOMMA和PCOMMA模式将合并,comma对齐模块将在串行流中搜索两个K码,实现16b或20b的K码对齐功能。

允许的对齐边界由ALIGN_COMMA_WORD定义。可能边界的间距由RX_DATA_WIDTH确定,边界位置的数量由RXDATA接口中的字节数确定(有关RX_DATA_WIDTH设置,请参阅表4-43,第214页)。图4-30显示了可以选择的边界。(Grey =可以出现在字节上)

RXBYTEISALIGNED是状态信号,为高电平表示边界已经对齐。这时可以将ENPCOMMALIGN和ENMCOMMALIGN两个信号拉低,关闭K码对齐功能。RXBYTEREALIGN是状态信号,用来表示对齐的K码是否发生变化或者说现在是否在对齐状态,=1表示字节对齐边界没有改变,=0表示字节对齐边界改变了。所以当RXBYTEREALIGN为0时我们可以重新使能字节对齐。RXCOMMADET是个状态信号,当K码对齐模块检测到K码时该信号置一,该信号有效几个周期。RXSLIDE是用于手动对齐的。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

 

6.9 Rx接收弹性缓冲区

GTP收发器RX数据通路的PCS部分有两个内部并行时钟域:PMA并行时钟域(XCLK)和RXUSRCLK域。要保证数据的正确接收,不仅要求速率一致,也要解决两个时钟域之间的相位差异。图4-43显示了两个并行时钟域:XCLK和RXUSRCLK。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

为解决该问题,Xilinx提供了两种解决方案,一是利用弹性缓冲区,二是用相位对其功能实现,二者之间如何进行选择,可参考下文的对比。

 

RX Elastic Buffer

RX Phase Alignment

便于使用

如果可能,建议使用RX缓冲区。它坚固且易于操作

相位对齐是一项高级功能,需要额外的逻辑和时钟源的附加约束。

RXOUTCLKSEL必须选择RX恢复时钟作为RXOUTCLK的源来驱动RXUSRCLK。

时钟选项

可以使用RX恢复时钟或本地时钟(带时钟校正)

必须使用RX恢复时钟

初始化

立即工作

在执行RX阶段和延迟校准程序之前,必须等待所有时钟稳定。

处理延迟

缓冲延迟取决于使用的功能,例如时钟校正和通道绑定。

较低的确定性延迟。

时钟纠正

通道绑定

时钟校正和通道绑定所需

未在收发器内执行。需要在用户逻辑中实现。

综上,还是使用弹性缓存区比较好,但在使用弹性缓存区实现需要在配置时勾选使能

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

如果不使用RX弹性缓冲器,我们还可以将其旁路掉。当RX弹性缓冲器被旁路时,RX相位对准电路用于调整PMA并行时钟域(XCLK)和RXUSRCLK域之间的相位差。它还通过调整RXUSRCLK来执行RX延迟校准,以补偿温度和电压变化。RX相位的延迟和对准可以由GTP收发器自动执行或由用户手动控制。

当RX恢复时钟用于源RXUSRCLK和RXUSRCLK2时,可以绕过RX弹性缓冲器以减少延迟。当RX弹性缓冲器被旁路时,通过RX数据通路的延迟很低且确定性,但时钟校正和通道绑定不可用。

         另外,弹性缓冲曲还有时钟纠正和通道绑定的功能,如下文所示。

 

6.10 Rx的时钟纠正

RX弹性缓冲器设计用于桥接两个不同的时钟域,RXUSRCLK和XCLK,这两个时钟来源在上文已经阐述。XCLK和RXUSRCLK并不是严格意义上的同源,不完全相同,即使RXUSRCLK和XCLK以相同的时钟频率运行,也总是存在很小的频率差异。因此会因累积差异使得RX弹性缓冲区最终溢出(上溢或下溢),除非它被纠正。为了允许校正,每个GTP收发器TX周期性地发送一个或多个特殊字符,允许GTP收发器RX根据需要在RX弹性缓冲器中移除或复制。通过在RX弹性缓冲区太满时删除字符并在RX弹性缓冲区太空时复制字符,接收器可以防止上溢或下溢。

上面时ug482的翻译,我在解释一下,首先要确定一点,这种差异一定时累积出来的,而不是来了一包数就造成了溢出,因为用户时钟和接收并行时钟从配置上就是同频不同源时钟,它们之间的差异应该时很小的,基于这个确定条件,我们才能展开下面的操作。

具体来说,就是要要保证缓存区始终处于半满状态,这种状态既不会因读空导致数据中断或重复,也不会应写满造成数据覆盖,而时钟纠正就是通过动态调整保证缓冲区时钟时半满状态。调整方式时插入空闲字符,也就是K28.5(也可能时别的K码),当读比较快时,可能导致下溢读空,这时候就插入特殊字符进行调整,如果快溢出了就删除写特殊字符。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

如下为RX时钟校正端口相关描述

端口

方向

时钟域

描述

RXBUFRESET

IN

Async

重置RX弹性缓冲区和相关逻辑。

RXBUFSTATUS[2:0]

OUT

RXUSRCLK2

指示RX弹性缓冲区的状态:

000:在标称操作范围内,缓冲区占用率在CLK_COR_MIN_LAT和CLK_COR_MAX_LAT范围内

001:RX弹性缓冲区占用率小于CLK_COR_MIN_LAT

010:RX弹性缓冲区占用率大于CLK_COR_MAX_LAT

101:RX弹性缓冲下溢

110:RX弹性缓冲区溢出

RXCLKCORCNT[1:0]

OUT

RXUSRCLK2

当RXDATA中显示时钟校正序列的第一个字节时,报告RX弹性缓冲器的时钟校正状态。

00:无时钟校正

01:跳过一个序列

10:跳过两个序列

11:添加一个序列

RX8B10BEN

IN

RXUSRCLK2

高电平有效,可在GTP收发器RX中启用8B / 10B解码器。如果启用8B / 10B解码,则RX_DATA_WIDTH必须是10的倍数(20,40)。如果未启用8B / 10B解码,则RX_DATA_WIDTH必须是8的倍数(16,32)。

 

6.11 Rx接收通道绑定

         不得不说,弹性缓冲区的功能实在是强大,不仅可以时钟纠正,还能支持通道绑定,我们在使用XAUI和PCI Express之类的协议将多个串行收发器连接组合在一起,以实现更高的吞吐量。每个串行收发器连接称为一个通道。如果使用这种方式,则输入的数据流必须是对齐的。这个过程通常称作通道绑定。通道绑定可以吸收两个或多个通道之间的偏差,将数据提交给用户,就像只使用一条链路进行传送一样。

然而,因厂家不同,设计细节难以统一,极有可能造成通道因长度不同而存在偏差、因时钟修正引起的相位偏差、因锁定和字节对齐引起的时间偏差,所以不能认为每个通道是绝对一致的,而这些偏差必然会导致数据同时传输但在不同时间到达,这就需要提供一个解决方案。

一般会在TX发送端的数据流中加入一个特殊序列,称之为“通道绑定序列”,各个接收端收到通道绑定序列之后,指定其中一个接收端为主通道。主通道和从通道之间存在“CHBONDO”通信链路,主通道向各个从通道发送通道绑定序列在缓冲区的位置,各个从通道根据自己的通道绑定序列在缓存区的位置,计算与主通之间的偏差,调整缓存区的读指针,从而实现各个通道同步输出数据,如下图所示。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

时钟纠正电路和通道绑定电路都涉及对弹性缓冲区指针的操作。正常情况下时钟纠正和通道绑定电路一起工作是没问题的,如果这两个事件同时发生就需要设置优先级,CLK_CORRECT_USE为“TRUE”则时钟纠正优先级更改,反之通道绑定优先级更高。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

         当使能通道绑定后可对通道进行设置,具体设置方式就不阐述了。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

  


6.12 Rx Gearbox(变速器)

RX变速箱支持64B / 66B和64B / 67B接头和有效负载分离。变速箱使用输出端口RXDATA [31:0]和RXHEADER [2:0]作为接收数据的有效负载和标头。与TX Gearbox(第86页)类似,RX变速箱使用单个时钟与PMA一起运行。因此,偶尔输出数据无效。输出端口RXHEADERVALID和RXDATAVALID确定适当的标头和数据是否有效。

RX变速箱支持2字节和4字节接口。

RX变速箱外的数据不一定对齐。对齐在FPGA逻辑中完成。RXGEARBOXSLIP端口可用于逐周期地从变速箱中滑动数据,直到达到正确的对齐。在处理bitlip操作并且输出数据稳定之前,它需要特定的周期数。在FPGA逻辑中完成数据的解扰和块同步。


6.13 Rx 接口

FPGA RX接口是FPGA通往GTP收发器的RX数据通路的网关。

应用程序通过从RXUSRCLK2上升沿的RXDATA端口读取数据,通过GTP收发器接收数据。端口的宽度可以配置为两个或四个字节宽。端口的实际宽度取决于RX_DATA_WIDTH属性和RX8B10BEN端口设置。端口宽度可以是16,20,32和40位。接口处的并行时钟(RXUSRCLK2)的速率由RX线路速率,RXDATA端口的宽度以及是否启用8B / 10B解码确定。在某些工作模式下,必须为发送器中的内部PCS逻辑提供第二个并行时钟(RXUSRCLK)。本节介绍如何驱动并行时钟并解释这些时钟对正确操作的限制。7系列GTP收发器包含一个2字节的内部数据通路。(即便是32bit设置,在内部也是16)可通过设置RX_DATA_WIDTH属性来配置FPGA接口宽度。当使能8B / 10B解码器时,RX_DATA_WIDTH必须配置为20位或40位,在这种情况下,FPGA RX接口仅使用RXDATA端口。例如,当FPGA接口宽度为16时使用RXDATA [15:0]。当绕过8B / 10B解码器时,RX_DATA_WIDTH可配置为任何可用宽度:16,20,32或40位。表4-43显示了如何选择RX数据路径的接口宽度。在RX 8B / 10B解码器,第170页中更详细地描述了8B / 10B解码。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

当8B / 10B解码器被旁路且RX_DATA_WIDTH为20或40时,RXDISPERR和RXCHARISK端口用于将RXDATA端口从16位扩展到20位,或32到40位。表4-44显示了禁用8B / 10B解码器时收到的数据。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

RXUSRCLK和RXUSRCLK2的生成

FPGA RX接口包括两个并行时钟:RXUSRCLK和RXUSRCLK2。RXUSRCLK是GTP收发器发送器中PCS逻辑的内部时钟。RXUSRCLK所需的速率取决于GTPE2_CHANNEL原语的内部数据路径宽度和GTP收发器发送器的RX线路速率。公式4-2显示了如何计算RXUSRCLK所需的速率。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

RXUSRCLK2是进入GTP收发器RX侧的所有信号的主同步时钟。进入GTP收发器RX端的大多数信号在RXUSRCLK2的上升沿采样。RXUSRCLK2和RXUSRCLK具有基于RX_DATA_WIDTH设置的固定速率关系。表4-45显示了每RX_DATA_WIDTH值的RXUSRCLK2和RXUSRCLK之间的关系。

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

对于RXUSRCLK和RXUSRCLK2,必须遵守这些关于时钟之间关系的规则:

  1. RXUSRCLK和RXUSRCLK2必须是正边沿对齐的,它们之间的偏差尽可能小。因此,应使用低偏移时钟资源(BUFG和BUFH)来驱动RXUSRCLK和RXUSRCLK2。
  2. 如果通道配置为相同的振荡器驱动发送器和接收器的参考时钟,则TXOUTCLK可用于驱动RXUSRCLK和RXUSRCLK2,其方式与驱动TXUSRCLK和TXUSRCLK2的方式相同。当时钟校正关闭或RX缓冲器被旁路时,必须使用RX相位对齐来对齐串行时钟和并行时钟。
  3. 如果单独的振荡器驱动通道上的发送器和接收器的参考时钟,并且不使用时钟校正,则RXUSRCLK和RXUSRCLK2必须由RXOUTCLK驱动(RXOUTCLKSEL = 3'b010用于RXOUTCLKPMA),并且相位对齐电路必须是用过的。
  4. 如果使用时钟校正,RXUSRCLK和RXUSRCLK2可以由RXOUTCLK或TXOUTCLK提供。

端口和属性

端口

方向

时钟域

描述

RXDISPERR [3:0]

Out

RXUSRCLK2

禁用8B / 10B解码时,RXDISPERR用于扩展20位和40位RX接口的数据总线.

高电平有效表示RXDATA上显示的相应字节有差异错误。

RXDISPERR [3]对应RXDATA [31:24]

RXDISPERR [2]对应RXDATA [23:16]

RXDISPERR [1]对应RXDATA [15:8]

RXDISPERR [0]对应RXDATA [7:0]

RXCHARISK [3:0]

Out

RXUSRCLK2

禁用8B / 10B解码时,RXCHARISK用于扩展20位和40位RX接口的数据总线。

高电平有效表示当启用8B / 10B解码时,RXDATA上显示的相应字节为K字符。

RXCHARISK [3]对应RXDATA [31:24]

RXCHARISK [2]对应RXDATA [23:16]

RXCHARISK [1]对应RXDATA [15:8]

RXCHARISK [0]对应RXDATA [7:0]

RXDATA [31:0]

Out

RXUSRCLK2

用于传输数据的总线。该端口的宽度取决于RX_DATA_WIDTH:RX_DATA_WIDTH = 16,20:RXDATA [15:0] = 16位宽RX_DATA_WIDTH = 32,40:RXDATA [31:0] = 32位宽当20位或40位时需要总线,8B / 10B编码器的RXCHARISK和RXDISPERR端口与RXDATA端口连接。请参见表4-44,第214页。

RXUSRCLK

In

Clock

该端口用于为内部RX PCS数据路径提供时钟

RXUSRCLK2

In

Clock

该端口用于将FPGA逻辑与RX接口同步。当用户提供RXUSRCLK时,该时钟必须与RXUSRCLK正边沿对齐。