Vivado - 在硬件中调试 Serial I/O (IBERT)

news2024/10/12 17:57:26

目录

1. 简介

2. 硬件平台

2.1 ZCU102

2.1.1 Clock Sources & Destinations

2.2 ZCU106

2.2.1 Clock Sources & Destinations

2.2.2 IP 配置

2.2.3 约束

3. 结果

3.1.1 IBERT UI

3.1.3 配置链路

3.1.4 扫描参数

3.1.5 Scan Plot

4. 总结


1. 简介

IBERT ,即 Integrated Bit Error Ratio Tester(集成比特误码率测试仪)。

In-System IBERT (ISI) 和 IBERT Ultrascale GTY 都是用于高速串行接口测试的 IP Core,用于在 Xilinx FPGA 设计中进行串行收发器(SerDes)的性能和功能验证。

In-System IBERT v1.0

1)功能:

  • In-System IBERT允许用户在系统运行时对FPGA内的高速串行收发器进行实时测试和监控。
  • 支持多种串行协议和接口标准。
  • 提供了一个图形用户界面,通过它用户可以配置测试参数,如数据率、编码方式等,并监控测试结果。
  • 可以进行眼图分析,帮助用户评估信号完整性。

2)应用场景:

  • 适用于系统级的调试和验证,特别是在硬件已经部署后的性能调优和问题诊断。

IBERT Ultrascale GTY v1.3

1)功能:

  • IBERT Ultrascale GTY 专为 Ultrascale 架构中的 GTY 收发器设计,提供高精度的信号完整性测试。
  • 支持高达 32.75 Gbps 的数据速率测试。
  • 同样提供眼图分析工具,以及其他高级分析功能,如误码率测试(BER)。
  • 用户界面允许详细配置各种测试参数,并可以保存和回放测试配置。

2)应用场景:

  • 主要用于设计和验证阶段,确保GTY收发器能在规定的性能指标下工作。
  • 适用于需要高数据速率和高信号完整性的应用,如数据中心、高性能计算和高端网络设备。

主要区别:

1)目标平台和收发器类型:

  • In-System IBERT 可以支持多种 Xilinx FPGA 平台和不同类型的收发器。
  • IBERT Ultrascale GTY 专门针对 Ultrascale 平台上的GTY类型收发器。

2)功能和性能:

  • IBERT Ultrascale GTY提供了更专业的测试功能,特别是在高速数据通信领域,支持更高的数据速率和更复杂的信号分析。
  • In-System IBERT更侧重于通用性和在系统运行时的调试与测试。

3)用户界面和操作复杂度:

  • 两者都提供图形用户界面,但IBERT Ultrascale GTY的界面可能提供更高级的配置和分析工具。

2. 硬件平台

  • ZCU102,包含6个 GT Bank
  • ZCU106,包含5个 GT Bank

2.1 ZCU102

2.1.1 Clock Sources & Destinations

Source:
----------------------------------------------------------------------
U56(SI570)(156.25 MHz) -> USER_MGT_SI570_P(N) -> U51(SI53340-B-GM) ->|


Destinations(xczu9eg-ffvb1156-2-e):
-------------------------------------------------------------------------------------
|-> USER_MGT_SI570_CLOCK1_P -Cap-> USER_MGT_SI570_CLOCK1_C_P -> U1.L27(MGT.129.CLK0P)
|-> USER_MGT_SI570_CLOCK1_N -Cap-> USER_MGT_SI570_CLOCK1_C_N -> U1.L28(MGT.129.CLK0P)
|
|-> USER_MGT_SI570_CLOCK2_P -Cap-> USER_MGT_SI570_CLOCK2_C_P -> U1.C8(MGT.230.CLK0P)
|-> USER_MGT_SI570_CLOCK2_N -Cap-> USER_MGT_SI570_CLOCK2_C_N -> U1.C7(MGT.230.CLK0P)

2.2 ZCU106

2.2.1 Clock Sources & Destinations

Source:
----------------------------------------------------------------------
U56(SI570)(156.25 MHz) -> USER_MGT_SI570_P(N) -> U51(SI53340-B-GM) ->|


Destinations(xczu7ev-ffvc1156-2-e):
-------------------------------------------------------------------------------------
|-> USER_MGT_SI570_CLOCK1_P -Cap-> USER_MGT_SI570_CLOCK1_C_P -> U1.U10(MGT.226.CLK1P)
|-> USER_MGT_SI570_CLOCK1_N -Cap-> USER_MGT_SI570_CLOCK1_C_N -> U1.U9(MGT.226.CLK1N)
|
|-> USER_MGT_SI570_CLOCK2_P -Cap-> USER_MGT_SI570_CLOCK2_C_P -> U1.R10(MGT.227.CLK1P)
|-> USER_MGT_SI570_CLOCK2_N -Cap-> USER_MGT_SI570_CLOCK2_C_N -> U1.R9(MGT.227.CLK1N)

2.2.2 IP 配置

1)添加 IP:IBERT Ultrascale GTH v1.4

2)打开示例设计

不用做任何更改,直接编译生成比特流。

2.2.3 约束

1)example_ibert_ultrascale_gth_0.xdc

  • Icon Constraints: 设置调试核心的时钟输入频率和使能时钟分频器。
  • GTH Refclk Lock Constraints: 定义了GTH参考时钟的引脚分配。
  • Refclk Constraints: 创建了GTH参考时钟,并将其分组为异步时钟组。
## Icon Constraints
set_property C_CLK_INPUT_FREQ_HZ 156250000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER true [get_debug_cores dbg_hub]

##gth_refclk lock constraints
set_property PACKAGE_PIN V8 [get_ports gth_refclk0p_i[0]]
set_property PACKAGE_PIN V7 [get_ports gth_refclk0n_i[0]]
set_property PACKAGE_PIN U10 [get_ports gth_refclk1p_i[0]]
set_property PACKAGE_PIN U9 [get_ports gth_refclk1n_i[0]]
set_property PACKAGE_PIN T8 [get_ports gth_refclk0p_i[1]]
set_property PACKAGE_PIN T7 [get_ports gth_refclk0n_i[1]]
set_property PACKAGE_PIN R10 [get_ports gth_refclk1p_i[1]]
set_property PACKAGE_PIN R9 [get_ports gth_refclk1n_i[1]]

## Refclk constraints
create_clock -name gth_refclk0_3 -period 6.4 [get_ports gth_refclk0p_i[0]]
create_clock -name gth_refclk1_3 -period 6.4 [get_ports gth_refclk1p_i[0]]
set_clock_groups -group [get_clocks gth_refclk0_3 -include_generated_clocks] -asynchronous
set_clock_groups -group [get_clocks gth_refclk1_3 -include_generated_clocks] -asynchronous
create_clock -name gth_refclk0_4 -period 6.4 [get_ports gth_refclk0p_i[1]]
create_clock -name gth_refclk1_4 -period 6.4 [get_ports gth_refclk1p_i[1]]
set_clock_groups -group [get_clocks gth_refclk0_4 -include_generated_clocks] -asynchronous
set_clock_groups -group [get_clocks gth_refclk1_4 -include_generated_clocks] -asynchronous

 2)ibert_ultrascale_gth_ip_example.xdc

针对每个GTH通道的发送和接收时钟,设置了异步时钟组。

## TX/RX out clock clock constraints
##
# GT X0Y12
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[0].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[0].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y13
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[1].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[1].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y14
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[2].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[2].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y15
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[3].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[0].u_q/CH[3].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y16
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[0].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[0].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y17
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[1].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[1].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y18
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[2].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[2].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]
# GT X0Y19
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[3].u_ch/u_gthe4_channel/RXOUTCLK}] -include_generated_clocks]
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins {u_ibert_gth_core/inst/QUAD[1].u_q/CH[3].u_ch/u_gthe4_channel/TXOUTCLK}] -include_generated_clocks]

3. 结果

3.1.1 IBERT UI

下载 bitstream 后,会出现 IBERT UI:

3.1.3 配置链路

  • TX Pre-Cursor:在信号的上升沿和下降沿之前增加的高频分量,减少码间干扰(ISI)。
  • TX Post-Cursor 是指在信号的上升沿和下降沿之后增加的高频分量,减少信号拖尾现象。
  • DFE:选择是否在接收器上启用决策反馈均衡器(Decision Feedback Equalizer)。
  • 回环方式:近端回环(在器件内部:1、2)和远端回环(两个器件之间:3、4)。


 

3.1.4 扫描参数

扫描类型包括:

  • 2-D full eye scan,二维全眼扫描
  • 1-D bathtub plot,一维浴缸图

扫描步进(水平、垂直):

  • 范围均在 1-16,数值越小,扫描图约精细,耗时越长。
  • 水平即时间(X轴),1UI=200ps(@5Gpbs)。
  • 垂直即电压(Y轴)。

扫描范围(水平、垂直):保持默认即可。

停留时间(Dwell):

  • 图表中的每个点都会被扫描一定的时间(用来绘制等高图,Z轴)。
  • 例如 1e-5 意味着每个扫描步进需要采集 1e5 个样本。

3.1.5 Scan Plot

测试条件:Near-end PMA,二维全眼扫描,增量(水平、垂直)=1。

Open Area:

  • 定义:眼图中没有被信号轨迹覆盖的区域称为 open area。
  • 用途:open area越大,表示信号的抖动和噪声越小,信号的完整性越好。

Open UI:

  • 定义:眼图中未被信号轨迹覆盖的单位间隔(UI)的百分比。
  • 用途:open UI 用于衡量信号在一个单位间隔内的稳定性。open UI越大,表示信号在单位间隔内的抖动越小,接收器能够更准确地判断信号的高低电平。

4. 总结

本文分享在 ZCU102 和 ZCU106 板卡上使用 IBERT Ultrascale GTY 进行眼图测量的示例。

参考:

https://zhuanlan.zhihu.com/p/660133545

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

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

相关文章

国产AI工具「神笔马良」!只需上传剧本,AI一键成片!(附保姆级教程)

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~(AI资料点文末卡片自取) 记得 AI 视频刚…

使用阿里巴巴的图

参考链接1 引用彩色图标可参考以下链接 &#xff08;到第三步 测试图标效果 的时候 还是可以保持之前的写法&#xff1a;<i/sapn class“iconfont icon-xxx”>也会出现彩色的&#xff09; 参考链接2 阿里巴巴字体使用 也可以直接将官网的代码复制过来到页面的css区域

想要去日本做IT,本篇文章给您一些中肯的建议!

关于在日本从事IT行业&#xff0c;以下是一些建议&#xff1a; 一、了解行业现状与趋势 行业需求旺盛&#xff1a;随着人工智能、大数据、云计算等技术的不断发展&#xff0c;日本IT行业对程序员的需求持续增长&#xff0c;特别是在金融科技、电子商务、游戏开发、移动应用等…

如何评估TPM管理咨询公司的人才培养效果?

在探讨如何评估TPM管理咨询公司的人才培养效果时&#xff0c;我们需要从多个维度进行深入分析&#xff0c;以确保评估的全面性和准确性。TPM管理咨询公司作为推动企业生产效率与质量管理提升的重要力量&#xff0c;其人才培养效果直接关系到咨询项目的实施效果及企业的长远发展…

3DCAT实时云渲染赋能2024广东旅博会智慧文旅元宇宙体验馆上线!

广东国际旅游产业博览会&#xff08;以下简称“旅博会”&#xff09;是广东省倾力打造的省级展会品牌&#xff0c;自2009年独立成展至今已成功举办十五届。2024广东旅博会于9月13—15日在广州中国进出口商品交易会展馆A区举办&#xff0c;线上旅博会“智慧文旅元宇宙体验馆”于…

Word 首行缩进 2 字符怎么设置?具体步骤演示

在日常的文档编辑和排版中&#xff0c;首行缩进是一个非常常见且重要的排版需求。尤其是在中文文档中&#xff0c;首行缩进能够提高文章的美观度和可读性&#xff0c;使文章结构更加清晰。那 Word 首行缩进 2 字符怎么设置呢&#xff1f;下面就给大家展示具体的操作步骤。 设置…

SA2601A ,600V高速风筒半桥栅极驱动芯片

描述 SA2601A是一款针对于双NMOS的半桥栅极驱动芯片&#xff0c;专为高压、高速驱动N型功率MOSFET和IGBT设计&#xff0c;可在高达600V电压下工作。 SA2601A内置VCC和VBS欠压(UVLO)保护功能&#xff0c;防止功率管在过低的电压下工作&#xff0c;提高效率。 SA2601A输入脚兼容3…

Django的模板语法

Django的模板语法 1、初步认识2、原理 1、初步认识 本质上&#xff1a;在HTML中写一些占位符&#xff0c;由数据对这些占位符进行替换和处理。 在views.py中用字典&#xff08;键值对&#xff09;的形式传参&#xff0c;在html文件中用两个花括号来显示单独的值 列表、元组等数…

神经网络超参数优化

遗传算法与深度学习实战&#xff08;16&#xff09;——神经网络超参数优化 0. 前言1. 深度学习基础1.1 传统机器学习1.2 深度学习 2. 神经网络超参数调整2.1 超参数调整策略2.2 超参数调整对神经网络影响 3. 超参数调整规则小结系列链接 0. 前言 我们已经学习了多种形式的进化…

Python编程常用的36个经典案例!

Python 的简洁和强大使其成为许多开发者的首选语言。本文将介绍36个常用的Python经典代码案例。这些示例覆盖了基础语法、常见任务、以及一些高级功能。 1. 列表推导式 fizz_buzz_list ["FizzBuzz" if i % 15 0 else "Fizz" if i % 3 0 else "Buz…

腾讯云-云直播

云直播&#xff08;Cloud Streaming Services&#xff09;为您提供极速、稳定、专业的直播云端处理服务&#xff0c;根据业务中不同直播场景的需求&#xff0c;云直播提供标准直播、快直播、慢直播和云导播台服务&#xff0c;分别针对大规模实时观看、高并发推流录制及超低延时…

鸿蒙开发之ArkUI 界面篇 三十二 Styles(封装组件)

鸿蒙提供了Extend组件&#xff0c;作用是对组件的属性、点击事件的封装&#xff0c;简化代码、方便调用&#xff0c;但是这个组件的缺点是只能封装一种组件&#xff0c;例如只能封装Text或者是Button&#xff0c;不能跨组件使用&#xff0c;如果不同组件有相同的地方、需要使用…

常见锁策略总结:从悲观锁到自旋锁

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持&#xff01; 在多线程编程中,锁是保证数据一致性和线程安全的重要机制.本文将直观且简洁的介绍常见的锁策略,包括它们的基本逻辑,使用场景以及优缺点. 悲观锁 与 乐观锁 悲观锁:预防性策略 悲观锁是一种主动锁…

Pandas处理时间序列之预测

import pandas as pd import numpy as np import matplotlib.pylab as plt %matplotlib inline from matplotlib.pylab import rcParams rcParams[figure.figsize] 15, 6 一、移动平均过程&#xff08;MA&#xff09; 移动平均过程&#xff08;Moving Average process&#…

机器学习——自动化机器学习(AutoML)

机器学习——自动化机器学习&#xff08;AutoML&#xff09; 自动化机器学习&#xff08;AutoML&#xff09;——2024年的新趋势什么是AutoML&#xff1f;AutoML的关键组成部分AutoML的优势AutoML 实例&#xff1a;使用Auto-sklearn进行回归分析AutoML的应用领域2024年值得关注…

webm格式怎么转换成mp4?这几种方法可以轻松完成视频转换!

webm格式怎么转换成mp4&#xff1f;WebM&#xff0c;作为一种新兴的视频文件格式&#xff0c;尽管携带了众多优势&#xff0c;却也不乏其固有的局限性&#xff0c;这些局限在实际应用中尤为凸显&#xff0c;成为了用户关注的焦点。本文将深入探讨WebM格式面临的挑战&#xff0c…

Compose第六弹 对话框与弹窗

1.compose中怎么使用对话框&#xff1f; 2.怎么显示Popup弹窗&#xff1f; 一、Compose显示对话框 二、Popup Popup就类似以前的Popupwindow&#xff0c;我们可以看到其实上面的DropdownMenu是Popup的一个具体实现。 2.1 Popup定义 Popup的定义如下&#xff1a; Composable…

ANSYS apdl界面频繁停止工作,需要卸载重装吗

如果经常出现以上报错界面&#xff0c;无需重装&#xff0c;一般是因为你在此图形显示界面滚动了鼠标滚轮&#xff0c;导致ANSYS停止工作 出现这个界面是因为前一次ANSYS非正常退出&#xff0c;再次进入就会出现

天塌了!「系分」新教程10月出版?11月软考会用到新内容吗?

软考教程改版相关事宜一直都有在关注&#xff0c;今天&#xff0c;发现“中国权威的出版物数据服务平台”网站更新了软考教程出版信息。 01、系统分析师新版教程 2024年8月&#xff0c;在“中国权威的出版物数据服务平台”网站搜索“系统分析师教程”显示的出版时间是2024年&a…

自动化运维:提升效率、降低风险的利器

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…