米尔电子
直播中

卿小小_9e6

7年用户 2210经验值
擅长:可编程逻辑
私信 关注
[技术]

【米尔-Xilinx XC7A100T FPGA开发板试用】+04.SFP之Aurora测试(zmj)

【米尔-Xilinx XC7A100T FPGA开发板试用】+04.SFP之Aurora测试(zmj)

在前一篇文章“【米尔-Xilinx XC7A100T FPGA开发板试用】+03.SFP光口测试(zmj) ”通过iBERT进行了SFP接口的基础功能测试。本文主要针对应用场景之一的Aurora协议进行测试,其他的应用场景包括千兆网、万兆网XAUI、SRIO、PCIE等协议不再额外测试。

1. 简介

参考资料:

PG168 : 7 Series FPGAs Transceivers Wizard
UG476 : 7 Series FPGAs GTX/GTH Transceivers
UG482 : 7 Series FPGAs GTP Transceivers
PG046 : Aurora 8B/10B
PG074 : Aurora 64B/66B

*附件:pg074-aurora-64b66b.pdf
*附件:pg046-aurora-8b10b.pdf
*附件:ug476_7Series_Transceivers.pdf
*附件:ug482_7Series_GTP_Transceivers.pdf
*附件:pg168-gtwizard.pdf

1.1 GTP简介

在7系列的FPGA中,GTP高速收发器通常使用Quad来划分,一个Quad由四个GTPE2_CHANNEL原语和一个GTPE2_COMMON 原语组成。每个GTPE2_COMMON中包含两个PLL(PLL0/PLL1)。只有在应用程序中使用PLL时,才需要实例化GTPE2_COMMON。

每个GTPE2_CHANNEL由一个transmitter和一个receiver组成。一个参考时钟可以直接连接到一个GTPE2_CHANNEL原语,而不需要实例化GTPE2_COMMON。

GTP收发器的发送端和接收端功能是相互独立,都是由Physical Media Attachment(物理媒介适配层PMA)和Physical Coding Sublayer(物理编码子层PCS)组成。PMA内部集成了串并转换(PISO)、预加重、接收均衡、时钟发生器和时钟恢复等;PCS内部集成了8b/10b编解码、弹性缓冲区、通道绑定和时钟修正等。

在AMD-Xilinx-Artix-7系列的FPGA中,对于GTP收发器,其最大速率是6.25Gbps。

//-------参考文档:7 Series FPGAs Transceivers Wizard (PG168)
https://docs.amd.com/r/en-US/pg168-gtwizard/7-Series-FPGAs-Transceivers-Wizard-v3.6-LogiCORE-IP-Product-Guide
XilinxPG168手册是针对7系列FPGATransceivers WizardLogiCORE IP产品指南,它提供了关于如何使用和配置Transceivers Wizard的详细指导,以便在Xilinx 7系列FPGA中实现高速串行通信。

1.2 8B/10B编码简介

在光纤通信中,线路编码是必要的,因为电端机输出的数字信号是适合电缆传输的双极性码,而光源不能发射负脉冲,只能用光脉冲的"有" 和"无" 来表示二进制码中的"1"和"0"。该方法虽然简单,却存在三个问题:

1.遇到数字序列中出现长连"0" 或长连"1" 时,将给光纤线路上再生中继器和终端光接收机的定时信息提取工作带来困难;

2.简单的单极性码中含有直流分量。由于线路上光脉冲中"1" 和"0" 是随机变化的,这将导致单极性码的直流成分也作随机性的变化。这种随机性变化的直流成分,可以通过光接收机的交流耦合威廉希尔官方网站 引起数字信号的基线漂移, 给数字信号的判决和再生带来困难;

3.不能实现不中断通信业务下的误码检测;为解决以上问题,通常对于由电端机输出的信号码流,在未对 LED(或 LD)调制以前,一般要先进行码型变换使调制后的光脉冲码流由简单的单极性码,转换为适合于数字光纤传输系统传输的线路码。

其他关于8B/10B编码的内容请参考下述链接,此处不再赘述:

参考一:8B/10B ENCODE/DECODE详解
https://www.cnblogs.com/YINBin/p/11011232.html
参考二:高速串行总线系列(18B/10B编码技术
https://blog.51cto.com/u_15338162/5198192
参考三:Aurora 协议学习理解与应用——Aurora 8B10B协议学习
https://myfpga.blog.csdn.net/article/details/137796131?fromshare=blogdetail&sharetype=blogdetail&sharerId=137796131&sharerefer=PC&sharesource=weixin_43511502&sharefrom=from_link

1.3** **Aurora简介

Aurora协议是Xilinx公司提供的一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议。这为物理层提供透明接口,让专有协议或业界标准协议上层能方便地使用高速收发器。Aurora协议在Xilinx的FPGA上有两种实现方式:Aurora-8b10b和Aurora-64b66b。

两个协议大部分相同,主要区别在编码方式上:

Aurora 8B/10B:

** **将8bit数据编码成10bit数码进行传输,尽量平衡数据中“0”和“1”的个数以实现DC平衡,显然这个编码方式的开销是20%,也就是效率为80% Aurora 64B/10B:

** **将64bit数据编码成66bit块传输,66bit块的前两位表示同步头,主要由于接收端的数据对齐和接收数据位流的同步。同步头有“01”和“10”两种,“01“表示后面的64bit都是数据,“10”表示后面的64bit是数据信息。数据信息0和1不一定是平衡的,因此需要进行加扰,开销较小

Aurora 8B/10B 常用于芯片(FPGA)与芯片(FPGA)之间通信,它用于使用一个或多个收发器在设备之间传输数据,其连接可以是全双工(双向数据)或单工。最多可实现16个收发器(GTX,GTP或GTH),吞吐量可从480Mb/s扩展到84.48Gb/s。Aurora核心吞吐量取决于收发器的数量以及所选收发器的线路速率。 通过使用20%的开销来计算吞吐量Aurora-8B/10B协议编码和以及线速0.5Gb/s至6.6Gb/s的线速范围来计算,其传输吞吐量为从单通道设计的0.4Gb/s到最高16通道的84.48Gb/s。

2. 程序设计

2.1 IP 配置

创建一个工程,搜索“transceiver”可以添加“7 Series FPGAs Transceivers Wizard IP”,双击该IP打开配置界面:

【第1页配置:GT-Selection】

默认配置即可。

image-20241114095454647.png
【第2页配置:Line-Rate, RefClk Selection】

先设置 Protocol 为 “aurora 8b10b single lane 4 byte” ,也就是对外接口为 32bit 位宽;

然后设置收发器速率,收发器的发送和接收通道是独立的,可以选择不同的编码和速度,此处统一设置线速率Line-Rate为2.5Gbps;

最后设置参考时钟为125MHz(如果设置成3.125Gbps,需要156.25MHz的时钟),TX-Clock-Source选择REFCLK1-Q0。

特别说明:参考时钟必须和开发板时钟一致,否则会无法通信。

image-20241114100008761.png
【第4页配置:Comma Alignment and Equalization】

本页默认配置即可。其中Comma-Alignment(K码)用来修正数据对齐,选择 K28.5。
image-20241114101150239.png

【第5页配置:PCIe, SATA, PRBS】

本页不涉及Aurora协议内容,默认配置即可。
image-20241114101302945.png
【第6页配置:CB and CC Sequence】

本页默认配置即可。

Xilinx 收发器IP核支持通道绑定,将多个收发器通道"绑定"成一个速率更高的传输通道,利用FIFO消除其间的延时不确定性。CB/CC序列主要用来配合完成时钟校准,并且设置每5000个字节发送一组CC Seq。因为从数据流中恢复出来的时钟和本地产生的FIFO读侧的时钟的频率不可能完全一致,所以才要进行CC处理。这个周期是根据发送侧和接收侧的时钟差算出来,然后再根据实际调试结果进行一定的修正。不同的板子不同的环境,这个值都是不同的。接收通道中同样有两个时钟域:从CDR恢复出的XCLK和接收通道工作时钟RXUSRCLK。RX通道使用RX Elastic Buffer来桥接两时钟域,但由于两者细微的差异会使缓存变空或溢出。为此引入时钟矫正,在发送端周期性发送一些特殊字符,接收端在弹性缓存快满时删除这些字符,快空时复制这些字符从而保证缓存内数据维持动态平衡的状态。所以,GTP的发送时钟和GTP的接收后的恢复时钟,会存在一定的动态变化,这就是前面我们设置 TXUSERCLK和RXUSERCLK的时候必须要考虑的问题,比如增加 FIFO,解决跨时钟的问题。

image-20241114101906069.png

【第7页总结:Smmary】

本页为相关配置统计信息,确认无误后点击OK生成IP核。
image-20241114102850154.png

2.2 工程创建

完成“2.1 IP配置”后,右键选中生成的GTP-IP核,点击“Open IP Example Design...”可以生成Example工程。
image-20241114103543752.png

工程如下图所示,gt_aurora_GT_FRAME_GEN 模块产生要发送的测试帧数据;gt_aurora_GT_FRAME_CHECK 模块检查回环后收到的数据是否正确。
image-20241114110057193.png

2.3 工程修改

生成Example工程后,需要根据板卡实际状况进行工程调整。此处主要调整时钟和复位。

Aurora(GTP-IP核)主要涉及下面四组时钟:

名称 功能
ref_clk Aurora IP核是基于GT作为物理层实现的,所以时钟ref_clk就是GT的参考时钟。GT的时钟参考只能使用外部的差分时钟,所以具体的值取决板卡的硬件设计。默认125Mhz。
INIT_CLK 初始化阶段的时钟 ,在上电初始化阶段,可以使用该时钟来驱动一些逻辑。默认值:50Mhz。
DRP_CLK DRP时钟,动态重配置,一般没用(通常一个内部模块需要进行配置,使用两种方法:端口控制和配置参数控制。一个常见的应用就是线速率切换。这时候就需要利用DRP端口来调整部分参数的值,然后复位GTX,使GTX工作在不同的线速率下。)
user_clk_out 是IP核根据设置的线速率及Lane的位宽计算出来的用户时钟,用户需要传输的数据必须是该时钟域下的数据,否则会存在亚稳态风险。

总结:

1.ref_clk的值根据对应硬件设计的来;

2.INIT CLKDRP CLK可以用PLL或者MMCM生成;

3.user_clk_out是用户时钟域,数据收发接口应该工作在此时钟域下。

【修改内容】

1.删除DPR_CLK;
2.删除复位信号;
3.添加系统差分时钟sys_clk_p/sys_clk_n(频率200MHz),通过PLL分频,用来对接DRP_CLK;
4.增加差分时钟约束到约束文件gtwizard_0_exdes.xdc:
create_clock -period 5.000 [get_ports sys_clk_p]
set_property PACKAGE_PIN R4 [get_ports sys_clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p]

【图】工程修改内容
image-20241114111605862.png

image-20241114111615348.png

2.4 工程编译

初次编译时,因为增加误码注入的逻辑功能(资源占用比例不高),以及debug信号未考虑跨时钟域的情况,出现了时序违例情况:
image-20241114112030458.png

打开布局布线“Open-Implementation-Design”,分析时序可知主要是debug信号未考虑跨时钟域引起的“Inter-Clock-Paths”时序违例。

image-20241114205732216.png

通过设置异步时钟组可以消除该时序违例:

image-20241114205955629.png

重新生成bitstream,最终时序正常。
image-20241114210126946.png

3. 程序测试

米尔-Xilinx XC7A100T FPGA开发板的两个SFP接口通过“光模块+光纤”实现回环连接,烧录bitstream程序进行Aurora测试。

3.1 正常测试

先强制触发ILA,Error计数器(gt0_error_count_i)的值为0x00;

然后设置ILA触发条件为:Error计数器的值不等于0时触发ILA;

持续观察一段时间,ILA未被触发,即Aurora-2.5Gbps回环测试正常。

image-20241114211148682.png

3.2 异常测试

先强制触发ILA,Error计数器(gt0_error_count_i)的值为0x00;

然后设置ILA触发条件为:Error计数器的值不等于0时触发ILA;

通过VIO注入误码,ILA会被触发,即误码注入时Aurora-2.5Gbps回环测试会触发Error计数,符合测试预期。

image-20241114211413071.png

//------end

更多回帖

发帖
×
20
完善资料,
赚取积分