ZC706评估板IBERT调试中unlock和link问题

2023-12-06 22:32

本文主要是介绍ZC706评估板IBERT调试中unlock和link问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

----写在前面:主要是针对zc706调试ibert的过程中发现unlock和link问题,找到了网上写的比较好的两篇文章,但是描述都有不足的地方,代码也有修改,我这里结合自己踩的坑,把问题和解决方法讲清楚。

一、IBERT与GT收发器概述

1. IBERT

IBERT(Integrated Bit ErrorRatio Tester,集成误比特率测试工具),是Xilinx提供用于调试FPGA高速串行接口比特误码率性能的工具,最常用在GT高速串行收发器测试:

(1)基于PRBS模块的误码率测试;

(2)测量眼图;

IBERT核心是为PMA评估和演示而设计,GT收发器的所有主要物理介质连接(PMA)功能都得到支持和可控,包括:TX预加重/后加重、TX差速摆动、RX均衡、决策反馈均衡器(DFE)、锁相环(PLL)分频设置等。

2. GT

GT(Gigabyte Transceiver,G比特收发器),通常也称Serdes、高速收发器。Xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器。按支持的最高线速率排序,GTP是最低的,用于A7系列;GTZ最高,用于少数V7系列;K7和V7中常见的是GTX和GTH。ZC706中包含16个GTX。

GT的应用非常广泛,高速ADC和DAC使用的JESD204B、高速接口SRIO(Serial RapidIO)、Aurora、PCIE、千兆网、XAUI万兆网等都是基于GT实现。在使用GT之前,首先需要进行IBERT测试,给出误码率、眼图等信息,保证GT收发器工作正常。若IBERT测试不通过,则根据近端、自环和远端的测试去排除PCB走线、阻抗、时钟、复位、电源等原因。

二、IBERT配置

1.在“IP Catalog”中找到IBERT

双击IP核进行配置。
100062789-125347-01.png

2. 第一页配置高速串行协议

第一页协议选项中默认为Custom1,可以自行输入线速率、时钟等参数,其余协议选项是对应着固定的线速率和时钟,比如tenGBASE-R对应10.3125G通信速率的万兆网通信,使用时钟频率156.25MHz,选择使用QPLL锁相环选择后整个Quad的4个GT共用一个QPLL(Quad PLL),否则每个Channel通道各自使用自己的CPLL(Channel PLL)。

在这里插入图片描述

3. 第二页配置Quad和参考时钟

ZC706原理图中,ZC706中的BANK109~112四个Bank是高速收发器Bnak,每个Bnak中含有4个独立的GT收发器和一个QPLL,组成一个Quad,每个GT称为一个Channel。
在这里插入图片描述

Quad109-112对应bank109-112,quad序号对应bank序号,channel序号对应bank上的引脚下标XXXX_XXX_XX,

Quad109的参考时钟0来源于FMC_HPC板卡,参考时钟1未连接(NC);

Quad110的参考时钟0来源于FMC_HPC板卡,参考时钟1来源于一个时钟芯片SI5324,但是需要进行相应配置才能输出(IIC配置寄存器);

Quad111的参考时钟0来源于FMC_LPC板卡,参考时钟1通过SMA接头由外部输入;

Quad112的参考时钟0来源于PCIE设备,参考时钟1未连接(NC);

综上考虑,在ZC706没有连接FMC和PCIE设备情况下,只能使用Quad111的参考时钟1,通过外部SMA接入差分的参考时钟。

其实zc706官方ibert例程给的是用112的ch0来源于pcie的时钟源,这个是需要插入pcie板的,这一点在kc705的例程中给出了接线图所以比较明显
在这里插入图片描述
而k7的例程中清楚阐述了两种方法:
在这里插入图片描述
重要!由于相邻Bnak可以相互借用时钟,所以,这里在使用Bnak111的参考时钟1的前提下,也可以选择Bnak110和Bnak112上的GT进行IBERT测试,但是不能使用Bnak109,因为Bank111的时钟无法给Bank109使用,但是可以给Bnak110和Bank112使用。

那么BANK111的时钟源哪来呢?要么用信号源仪器产生单端信号源再用balun板转成差分信号,灌入bank111时钟源的sma接口,要么就看板上有没有自产生的差分信号源。

在ZC706板上,如下图所示,有一个一上电就会输出的差分时钟USRCLK,默认输出频率156.25MHz,恰好可以用来作为时钟,并将其通过SMA接头的USER_SMA_CLOCK输出,外部使用SMA接头射频线将USRCLK和USER_SMA_CLOCK连接,即为Quad111引入了一组156.25MHz的差分时钟。(注意!差分时钟的两根射频线必须等长)

标号9和10的两对SMA接口使用等长的射频线连接,丝印号P端连接P端,N端连接N端。
在这里插入图片描述

回到IP配置,这里选择QUAD_111,并将参考时钟选择Quad111的参考时钟1(MGTREFCLK1),由于使用整个Quad的四个通道,并且使用QPLL,所以这里的Channel任选一个Channel0 ~ Channel3即可。
在这里插入图片描述

4. 第三页配置时钟来源

时钟来源配置为Quad111的参考时钟1,这里由于source没有选择external,所以要使用缓存器,在第四部分中会详细说明
在这里插入图片描述

三、示例工程

然后一定要打开example design,可以随后生成RTL电路看下是否正确
在这里插入图片描述

四、时钟配置

FPGA从外部输入时钟时,必须使用全局时钟输入管脚输入,必须经过全局时钟缓冲IBUFG(单端时钟)或IBUFGDS(差分时钟),否则布线报错,常见的使用方式是IBUF或IBUFDS后加一个BUFG组合。

蓝框是要在example里添加的代码:


在端口中增加差分输入时钟USRCLK和输出时钟sma口,后面会提到通过约束文件将输入端口绑定到pin上,

输入使用IBUFDS差分输入转单端得到wire user_clk,然后使用全局缓冲BUFG资源将user_clk绑定全局时钟网络user_clk_bufg,最后使用OBUFDS单端转差分输出。

BUFG,全局缓冲,输出到达FPGA内部个逻辑单元的时钟延迟和抖动最小。

参考 https://blog.csdn.net/zkf0100007/article/details/82559250

这里使用的是原语,举例说明:IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。

Verilog Instantiation Template

IBUFDS instance_name (

​ .O (user_O),
​ .I (user_I),
​ .IB (user_IB));

下面是要在example里添加的代码:

wire user_clk;
IBUFDS IBUFDS_inst_user_clk(.O(user_clk),            // Buffer output.I(USRCLK_P_I),        // Diff_p bufferinput    .IB(USRCLK_N_I)              //Diff_n buffer input 
);  wire user_clk_bufg;
BUFG BUFG_inst_user_clk (.O(user_clk_bufg),    // 1-bit output: Clock output.I(user_clk)
);OBUFDS OBUFDS_inst_user_clock (.O (USER_SMA_CLOCK_P_O),         // Diff_p output       .OB(USER_SMA_CLOCK_N_O),     //Diff_n output.I (user_clk_bufg)                      //Buffer input
);

IBUFDS+BUFG+OBUFDS。

在这里插入图片描述

在约束文件里面添加,设置XDC时钟约束和管脚约束:

create_clock -name usrclk -period 6.4 [get_ports USRCLK_P_I]
create_clock -name user_sma_clk -period 6.4 [get_portsUSER_SMA_CLOCK_P_O]
set_property PACKAGE_PIN AF14 [get_ports USRCLK_P_I]
set_property IOSTANDARD LVDS_25 [get_ports USRCLK_P_I]
set_property PACKAGE_PIN AD18 [get_ports USER_SMA_CLOCK_P_O]
set_property IOSTANDARD LVDS_25 [get_ports USER_SMA_CLOCK_P_O]

用auto-deteck links就可以了,如果出不来说明有问题再选择creat links,后续观察眼图可以参照其他博主的博客,随便找找都有。

问题定位过程:

1、一开始用zc706板没有意识到需要pcie模块来提供时钟,导致一开始虽然creat bitstream ok了,但是link上也显示不出来cpri速率

2、还有就是没有在配完ip后生成example代码,导致会在生成bitstream的时候报时钟源的错误

3、1的发现过程是和k7的教程、在板测试中领悟到的,因为k7提供了不使用pcie模块的方法

4、如果是编译综合中发生时钟源报错就是ip核配置或者是没生成example

5、如果是unlock那就思考下是否时钟源链路合理且正确配置

6、一般lock后就能link且OK

参考文章:

1、ZC706评估板IBERT误码率测试和眼图扫描【GT高速串行收发器】【IBERT】【FPGA】【眼图】【FPGA探索者】https://cloud.tencent.com/developer/article/1801187?ivk_sa=1024320u

2、ZC706 GTX折腾记https://blog.csdn.net/zkf0100007/article/details/82559250

这篇关于ZC706评估板IBERT调试中unlock和link问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/463586

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo