IBERT眼图扫描(高速收发器八)

  前文讲解了GTX的时钟及收发数据通道的组成,之后讲解了眼图、加重、均衡等原理及原因,本文通过xilinx提供的IBERT IP完成实际工程的眼图扫描,确定加重和幅值调节的参数。

1、回环模式

  在此之前,需要了解一下GTX的回环模式。如果板卡有两个光口,可以通过光纤把两个光口连接进行测试,如果只有一个光口,通过GTX的回环模式也可以完成测试。

  回环模式的链路如下图所示,左侧是FPGA的一个GTX通道,右侧可以是其余板卡的一个高速收发器通道,中间使用光纤连接。

在这里插入图片描述

图1 回环路径

  信号可以通过4条路径回环,路径1是经过FPGA内部PCS之后直接回环到接收端的PCS。路径2是经过FPGA发送端的PCS和PMA之后,直接环回到接收端的PMA。

  路径3是经过其他板卡的高速收发器通道接收端的PMA后环回到发送端的PMA,然后输出给FPGA的接收通道。

  路径4的原理与路径3类似,只不过经过了PCS转换。下图是GTX中对应的三条回环路径,红色路径对应上图路径2,蓝色路径对应上图路径3,紫色路径对应上图路径4,路径1在下图中没有体现。

  其中路径1和路径2在自身的GTX中完成回环,被称为近端回环。而路径3和路径4在另一个GTX中回环,回环的节点相对于发送端的距离较远,被称为远端回环。

在这里插入图片描述

图2 GTX中回环路径

  在GTX IP或者IBERT IP中,都可以通过信号的取值来更改回环模式,在GTX IP中勾选LOOPBACK,在生成IP后,会提供给用户一个gt0_loopback_in信号,用户修改回环模式。

在这里插入图片描述

图3 回环模式设置

  进入和退出近端PMA回环后需要复位GTX的接收通道。要使近端PCS回送正常工作,必须使能接收通道的弹性buffer并选择接收通道恢复时钟作为XCLK的时钟源(RX_XCLK_SEL设置为RXREC)。

  在近端PCS回送中,RX XCLK域由TX PMA并行时钟(TX XCLK)提供时钟。

  回环模式的设置如下表示所示,在光口的测试中,没有光纤时使用较多的是近端PMA回环,有光纤时,可以使用远端PCS进行测试。

表1 回环模式
LOOPBACK取值回环模式
3’b000正常工作模式
3’b001近端PCS回环
3’b010近端PMA回环
3’b100远端PMA回环
3’b110远端PCS回环
其余取值保留

2、IBERT IP配置

  GTX IP自身也支持眼图测试功能,但是在实际使用时,更多会通过IBERT IP来测试信道的眼图。眼图测试的数据也是通过GTX内部的PRBS发生器生成,在接收端通过PRBS检查器接收数据。

  关于IBERT IP生成如下图所示,在vivado的IP catalog中搜索ibert即可。

在这里插入图片描述

图4 生成IBERT IP

  对IBERT IP的Protocol Definition进行配置,本文对万兆网口进行测试,因此协议可以直接选择”tenGBASE-R”,然后线速率固定为10.3125Gbps。

在这里插入图片描述

图5 Protocol Definition参数配置

  上图中3处是设置GT参考时钟的频率,根据开发板提供给GT bank的时钟频率进行设置,我板卡的GT参考时钟是使用一个可编程晶振实现的,原理图如下所示。

在这里插入图片描述

图6 可编程晶振

  可编程时钟信号通过左侧的SW6拨码开关调节输出差分时钟的频率,开发板默认使用的是156.25MHz时钟,因此图5的参考时钟选择156.25MHz。

在这里插入图片描述

图7 可编程芯片的调节

  因为线速率大于6.5Gbps,必须使用QPLL,因此图5中的4处勾选QPLL。

  然后设置的Protocol Selection界面参数,如下图所示,Protocol Selected选择前面设置的tenGBASE-R/10.3125Gbps。

在这里插入图片描述

图8 Protocol Selection参数配置

  参考时钟的来源需要根据开发板上的差分时钟输入位置确定,我使用开发板上述可编程晶振接在REFCLK0引脚上,因此选择CLK0时钟引脚。

  3是选择发送端用户时钟源,选择需要测试的通道即可。

在这里插入图片描述

图9 GT bank原理图

  之后配置Clock Settings界面,这是用于配置IP的系统时钟信号,该时钟信号可以来源于任何bank,为了方便,可以直接使用GTX的时钟通过BUFG输出作为IP的系统时钟。

  如下图所示,系统时钟来源直接选择QUAD112 0,表示将高速收发器时钟作为IP系统时钟,2、3、4处就不需要用户配置时钟输入引脚和时钟频率了。

  如果时钟其余时钟,需要配置时钟管脚以及时钟频率。

在这里插入图片描述

图10 Clock Settings参数配置

  最后IP的参数汇总如下图所示,点击OK生成IP。

在这里插入图片描述

图11 参数汇总

  生成IP之后,在Hierarchy中选中生成的IP,然后鼠标右键点击Open Example Design…,打开示例工程,用户可以直接使用示例工程完成眼图测试。

  注意如果发现Open Example Design…是灰色的,可能是因为vivado还在生成IP,右上角的圆圈还在旋转,等待IP生成之后再进行操作即可。

在这里插入图片描述

图12 生成示例工程

  选择示例工程存放路径,如下图所示。

在这里插入图片描述

图13 选择示例工程存放路径

  下图是光纤的原理图,需要注意该模块有一个失能引脚SFPB_TX_DIS,该引脚为高电平时,光纤模块无法工作,又由于该引脚通过4.7K电阻上拉到VCC,默认为高电平。因此在使用时,需要给该引脚提供低电平,才能正常工作。

在这里插入图片描述

图14 光纤转换模块

  打开示例工程的顶层文件,添加一个2位的失能信号,输出低电平,分别接到两个光模块的失能引脚。

在这里插入图片描述

图15 添加失能信号

  之后综合示例工程,然后分配顶层模块信号的各个管脚,如下图所示,默认会使用一个bank的所有高速收发器,实际测试时,只有正常工作的才会显示眼图。

在这里插入图片描述

图16 引脚配置

  引脚信息保存后,直接生成bit流文件。

3、眼图扫描

  当bit流生成完成后,通过光纤连接两个光纤,如下图所示。

在这里插入图片描述

图17 开发板光纤短接

  将生成的bit流下载到FPGA中,然后再Hardware下可以查看QPLL的状态,如下图所示,1处显示QPLL已经锁定,如果显示没有锁定,请检查输入GT的参考时钟的频率与IP设置的频率是否一致,另外差分参考时钟信号的引脚是否分配正确。

  2处显示两个高速收发器通道正在运行,而另外两个通道没有连接,这是因为板卡上另外两个通道用于PCIE,本次并没有使用这两个通道。

在这里插入图片描述

图18 查看通道状态

  在Serial I/O Links选项卡下面可以查看正常收发数据各个通道的状态,如果想要查看其余通道,也可以点击+号添加没有连接的通道状态。

  在1处可以查看两个通道的误码率,2处可以复位IP。

在这里插入图片描述

图19 查看连接通道状态

  后续的参数和状态设置如下所示,1处可以设置发送通道和接收通道的伪随机序列。2处可以设置加重、幅值门限、DFE使能。3处可以复位发送、接收的通道,4处显示各个通道锁相环的状态,5处可以设置回环模式。

在这里插入图片描述

图20 通道参数设置

  选中需要查看眼图的通道,然后鼠标右击,选择Create Scan…,如下图所示。

在这里插入图片描述

图21 创建眼图

  之后会弹出如下界面,可以对一些参数进行修改,一般保持默认即可。

在这里插入图片描述

图22 眼图参数设置

  扫描得到的眼图如下所示,眼睛张开的区域占33.33%,K7芯片线速率10.3125Gbps,能够达到这个效果也可以了。

在这里插入图片描述

图23 眼图扫描结果

  综上所述,查看了一组加重、均衡参数对应的眼图结果,如果要得到眼图张开最大,误码率最低的参数该如何做呢,可以手动修改参数,然后复位,重复获取每组数据的眼图,软件还给用户提供了眼图扫描功能,如下所示。

  选中需要扫描的通道,然后鼠标右键,点击Create Sweep…,如下图所示。

在这里插入图片描述

图23 眼图扫描

  会弹出如下选项框,勾选每次扫描之后复位接收端,其余设置保持不变,如下图所示。

在这里插入图片描述

图24 参数设置

  由于参数比较多,扫描的时间会比较久,在Serial I/O Scans选项卡中可以看到一些扫描完成的参数。

  下图中每一项代表一组参数对应的眼图扫描结果,左侧红框中的参数就是加重和接收端幅值参数,右侧框中表示对应参数眼图扫描结果眼睛睁开区域的占比,该值越大,表示眼睛睁开越大,采集数据越准确。

在这里插入图片描述

图25 部分扫描结果

  双击上图中扫描的结果,便可以打开对应参数对应的眼图。双击UI占比为22.22%的一次扫描结果,得到如下所示眼图。

在这里插入图片描述

图26 打开一组参数对应眼图

4、回环测试

  如果用户没有光纤,可以使用回环模式,进行测试。前文讲到,我开发板有两个高速收发器通道用于PCIE通信,并没有接光纤,因此不能使用光纤连接,眼图扫描时显示的未连接,本文使用这两个通道来说明回环的使用吧。

  首先需要将这两个通道加入Serial I/O Links界面,如下图所示,点击+号,然后点击Create Links…

在这里插入图片描述

图27 添加没有连接的通道

  如下图所示,首先选中需要添加的通道,然后点击+号即可。

在这里插入图片描述

图28 添加对应通道

  下图将两个未连接的通道添加成功的截图,然后点击OK。

在这里插入图片描述

图29 添加两个通道信号

  如下图所示,下面框中添加的两个通道没有建立连接,因为没有通道接收数据、也没有通道向他们发送数据。

在这里插入图片描述

图30 添加未连接通道

  然后将这两个通道回环模式分别设置为近端PCS回环和近端PMA回环,如下图所示,设置成功之后复位两个收发器的接收和发送通道。

在这里插入图片描述

图31 设置回环模式及复位

  之后再查看两个通道的状态,他们各自已经能够自己回环收发数据了,这种方式可以用来测试自己的代码是否正确。

在这里插入图片描述

图32 通道状态

  之后选中近端PCS回环的通道,然后查看其眼图,结果如下所示,眼睛张开区域达到100%。这是因为PCS只是数字信号处理,GTX内部直接回环,并没有经过外部电路的损耗传输,因此可以达到100%。

在这里插入图片描述

图33 近端PCS回环测试眼图

  下图是近端PMA回环的测试结果,因为再GTX中已经转换成串行的物理信号后进行的回环,接收端接收的数据有部分衰减,眼睛睁开达到77.78%。

在这里插入图片描述

图34 近端PMA回环测试眼图

  有兴趣的可是试试远端回环,本文远端的回环与真实情况差不多,因为都经过了光纤和PCB的传输,本文不再赘述。

  本文主要讲解眼图扫描IP的使用方式,以及回环模式的含义及作用。需要本文工程的可以在公众号后台回复“眼图扫描”(不包括引号)即可。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【字典树(前缀树) 字符串】2416. 字符串的前缀分数和

本文涉及知识点 字典树(前缀树) 字符串 LeetCode 2416. 字符串的前缀分数和 给你一个长度为 n 的数组 words ,该数组由 非空 字符串组成。 定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。 例如,如果 words [“a”,…

【list】list库介绍 + 简化模拟实现

本节博客先对list进行用法介绍,再在库的基础上简化其内容和形式,简单进行模拟实现,有需要借鉴即可。 目录 1.list介绍1.1 list概述1.2相关接口的介绍 2.简化模拟实现3.各部分的细节详述3.1结点3.2迭代器细节1:迭代器用原生指针还是…

深入理解TCP滑动窗口协议

在计算机网络中,传输控制协议(TCP)是确保可靠数据传输的核心协议之一。TCP的可靠性和高效性部分得益于其滑动窗口机制。本文将详细介绍TCP滑动窗口协议的工作原理及其在实际中的应用。 什么是滑动窗口协议? 滑动窗口协议是一种用…

【Codesys】-执行第三方程序,或Windows脚本

该记录旨在解决RTE作为第一个Windows的一个exe程序不能调用其他程序的问题。 可以实现:在PLC界面打开第三方程序、在PLC界面关闭本机Windows操作系统 首先添加依赖库-SysProcess,3.5.17.0 然后在程序里执行相应的指令,该指令可以被Windows识别为类似于执行Bat文件…

国产操作系统上使用rsync恢复用户数据 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上使用rsync恢复用户数据 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇关于在国产操作系统上使用rsync备份并还原用户数据的文章。rsync是一款功能强大的文件同步和备份工具,广泛用于Linux系…

河南乙级道路与桥梁资质年审材料准备要点解析

河南乙级道路与桥梁资质年审材料准备要点解析如下:河南宽信权经理 一、企业基本情况材料 营业执照副本复印件:确保复印件清晰、完整,并加盖企业公章。 企业章程:提供最新的企业章程,并加盖企业公章。此材料需反映企业…

代码随想录——从前序与中序遍历序列构造二叉树(Leetcode105)

题目链接 递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

Linux(三)

Linux(三) Linux网络配置管理网络基础知识 IP地址A类 由1个字节网络地址3个字节主机地址B类 由2个字节网络地址2个主机地址C类 由3个字节网络地址1个主机地址D类:主要用于组播E类:为将来使用保留 子网掩码子网掩码作用网关DNS服务器 Linux用户管理用户的…

如何看centos 有没有安装x11

在CentOS系统中,可以通过检查是否存在X11相关的包来判断是否安装了X11。你可以使用yum工具来查询是否安装了xorg-x11-server-Xorg包,这通常是X11服务器的包名。 打开终端,输入以下命令: yum list installed | grep xorg-x11-ser…

浅析部署架构中的GZone、RZone和CZone

在现代软件开发中,理解和应用各种技术概念是成功的重要因素。本文将详细介绍GZone、RZone和CZone三个概念,解释它们的定义、特点、功能及应用场景,并通过实际案例帮助读者更好地理解这些概念。 一、GZone 1.1 定义 GZone是指“Global Zone…

MTK Android9.0 给vendor下文件夹权限,用于读取文件列表

1.背景 最近在TV开发中遇到一个问题:如何判断设备烧录过HDCP KEY的问题,由于MTK的官方接口返回值并不准确,只能判断2.2是否烧录,不能准确判断1.4是否烧录过,因为HDCP 的KEY有两个,分别是1.4和2.2&#xff…

结构体常见问题

问题一: 结构体的自引用 错误: typedef struct _Pos{ int x; int y; struct _Pos z; }pos; 定义一个结构体,其内部又定义了一个同类的结构体变量,这是一种错误。(因为如果你在结构体内部定义自己类型的结构体变量,在定义结构体的…

Shell脚本零碎知识积累

1、使用While循环打印目录中的所有文件&#xff1a; #!/bin/bash# 定义要遍历的目录 directory"./"# 使用while循环读取目录中的文件 while read file doecho "Found file: $file" done < <(find "$directory" -maxdepth 1 -type f)最后一…

linux创建离线yum源给局域网机器使用

适用场景&#xff1a;在封闭的内网环境中&#xff0c;无法使用互联网进行安装各种rpm包的时候&#xff0c;离线yum源可以解决大部分问题&#xff0c;配置号后可直接使用yum进行安装包 1.准备好镜像源ISO&#xff1a; 例如以下示例&#xff0c;具体可参考自己的系统进行下载&a…

新书推荐:7.3 for语句

本节必须掌握的知识点&#xff1a; 示例二十四 代码分析 汇编解析 7.3.1 示例二十四 ■for语句语法形式&#xff1a; for(表达式1;表达式2;表达式3) { 语句块; } ●语法解析&#xff1a; 第一步&#xff1a;执行表达式1&#xff0c;表达式1初始化循环变量&#xff1b; …

MATLAB基础应用精讲-【数模应用】贝叶斯优化

目录 前言 算法原理 朴素贝叶斯算法核心思想 示例 贝叶斯定理

【错题集-编程题】kotori 和迷宫(BFS / DFS)

牛客对应题目链接&#xff1a;kotori和迷宫 (nowcoder.com) 一、分析题目 迷宫问题的扩展。 二、代码 #include <iostream> #include <cstring> #include <queue>using namespace std;const int N 35; int x1, y1; // 标记起点位置 int n, m; char arr[N][…

Java实现抢红包算法——详细注释,标准语法

package learn;import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random;public class RobRedPacket {// 发红包算法&#xff0c;金额参数以分为单位public static List<Integer> divideRedPacket(Integer totalAmoun…

电机控制系列模块解析(23)—— 同步机初始位置辨识

一、两个常见问题 为什么感应电机&#xff08;异步机&#xff09;不需要初始位置辨识&#xff1f;&#xff08;因此感应电机转子磁场在定子侧进行励磁&#xff0c;其初始位置可以始终人为定义为0&#xff09; 为什么同步磁阻电机需要初始位置辨识&#xff1f;&#xff08;因为…

【前端每日基础】day22——js控制结构

循环语句用于重复执行代码块。 for 循环 常用于需要精确控制循环次数的情况。 for (let i 0; i < 5; i) {console.log("Iteration:", i); }while 循环 当条件为真时重复执行代码块&#xff0c;适用于循环次数不确定但条件明确的情况。 let i 0;while (i <…