如何使用“收发器向导”和“IBERT”来设置用于光 10G 链路的 GTH 收发器,并评估链路质量
扫描二维码
随时随地手机看文章
在本教程中,我将展示如何创建并使用适用于 Zynq Ultrascale+ XCZU4EV 中 GTH 传输器的示例项目。
我正在使用的板子是来自 MYIR 公司的 MYD-CZU4EV 型号,其内部搭载了 AMD XCZU4EV 处理器,并且配有可连接 SFP+ 线缆的 QSFP+ 机箱。
Vivado 包含了“超大规模 FPGA 传输器向导”,它能够生成一系列的 VHDL/Verilog 文件,这些文件可以根据多种需求进行定制。
使用该向导有以下两种方式:
1. 进行配置,并生成一个 xci 文件,以便使用所提供的模板进行实例化。
2. 对其进行配置,并创建一个示例项目以检查和修改所生成的 RTL 文件。
第二种方法更为灵活,更适合初次使用 GTH 转换器的用户。经验丰富的用户可以直接在他们的项目中使用 xci(尽管其余的代码可能源自示例项目!)
配置收发器
双击 IP 目录中的“收发器向导”,配置图形用户界面就会出现。
该图形用户界面(GUI)提供了众多来自“收发器配置预设”下拉菜单的预设选项。在本教程中,请选择“GTH-10BASE-R”预设:
请确保实际参考时钟与板上的时钟(156.25 MHz)相匹配,可通过选择可用的其中一个数值来实现。
切换到第二个选项卡“物理资源”,选择下方的两个通道,并且所选的参考时钟为“MGTREFCLK1”。这一点非常重要,因为在这个开发板中,MGTREFCLK0 未连接到任何时钟发生器。
注意一下自由运行时钟的频率(250 MHz),该频率将在后续环节中被使用。
可选的“功能”选项卡可以跳过,保持其原样即可。在“结构选项”选项卡中,我们只需选择包含系统内置的 IBERT 核心这一选项即可:
完成所有这些更改后,点击“确定”以关闭图形用户界面。
创建示例项目
该示例项目需要做一些调整:
1. 它需要一个自由运行的时钟,此处采用 250 MHz 的频率。由于 MYD 板本身没有向 PL 电路提供任何时钟信号,所以使用了 PS(电源供应器)。不过,它必须先启动,例如运行一个“hello world”应用程序。
2. 生成的块有一些需要连接的输入/输出端口。在这种情况下,这些端口会连接到一个 VIO(虚拟输入/输出)设备,以便用户能够直接与硬件管理器进行交互。
3. 每个 SFP+ 都有一个“发送使能”引脚,该引脚在此处还与 VIO 连接在一起。
创建 xci 文件后,右键点击该文件,然后选择“打开 IP 示例设计”
在创建的 Vivado 项目中,创建一个新的模块图,并在其上添加一个处理器系统 IP:
双击该 IP 区域,然后点击“预设” > “应用配置”:
浏览查找名为“myd_gth_ps_config.tcl”(已包含)的文件。点击“确定”以关闭图形用户界面。
将源文件“gtwizard_ultrascale_0_example_top”拖放到模块图中:
将所有收发器的接收和发送引脚以及参考时钟输入设为外部连接(使用 Ctrl + T 或右键点击 > 使为外部连接)
接下来,从 IP 目录中添加一个 VIO(虚拟 I/O),并为其配置 2 个输入和 4 个输出。
将 pl_clk1(即 pl_clk0 的反向)连接至 VIO 时钟引脚以及收发器的自由运行时钟输入端。
将收发器模块的两个输出端连接到 VIO 输入端。
将两个 VIO 输出端连接到收发器模块的输入端。
最后,将另外两个 VIO 输出设置为外部输出,并将它们分别命名为“Tx_Ena_LT”和“Tx_Ena_RT”:
现在在“源”面板中右键点击模块图,然后选择“创建硬件描述语言封装”
如果该包装文件并非自动成为顶层文件,请右键点击它并将其设为顶层文件:
设置约束条件
•点击“运行综合”,然后打开合成后的设计。如果“封装”视图未显示,请从右上角的下拉菜单中选择它。
•请注意,收发器的引脚已经固定好,无需再进行重新分配。需要定位的是那些额外的引脚。
•按照电路板的接线图,将 Tx_Ena_LT 置于 AF5 处,将 TxEna_RT 置于 H2 处:
•这些信号将使机箱内的左上角和右上角的 SFP+ 接口能够正常工作,以下是示意图(针对左上角部分):
•将引脚放置到位,将标准设置为“LVCMOS1V8”,并将外部终端设置为“无”:
•使用“CTRL+S”保存更改,并为即将创建的新约束文件输入一个名称(或者也可以将其添加到现有的文件中):
•最后要做的就是将约束文件“gtwizard_ultrascale_0_example_top.xdc”中的第 80 行注释掉。
•这是因为这个时钟来自 PS 系统,并且其设置已经完成。
•点击“生成比特流”。这将重新执行综合流程并进行实现操作。
•最后,点击“文件”菜单中的“导出”选项,以创建 XSA 文件,以便与 Vitis 一起使用。
创建 PS 软件
启动 Vitis 并创建工作区。使用之前生成的 XSA 文件创建一个平台项目。选择独立操作系统和 A53 核心,并生成启动组件。
创建一个应用程序项目,并使用“Hello World”模板。构建整个系统,并检查在“调试” > “SD 卡”下是否生成了“BOOT.BIN”文件:
启动板子并连接硬件管理器
•将 BOOT.BIN 文件复制到具有 FAT 格式的 SD 卡上,并将其插入到 MYD 板中。
•确认启动模式开关已设置为使用 SD 卡启动(板上标有“TF”)。
•将调试串口 USB 接口上的 USB 数据线连接到电脑上。
•将 JTAG 线缆的一端连接到 JTAG 接口,另一端连接到计算机上。
•在电脑上,启动一个终端应用程序,比如“TeraTerm”。
•给电路板通电后,端子应呈现如下图所示的状态:
•现在在 Vivado 开放硬件管理器中点击“打开目标”,选择“自动连接”。它应该能够识别出 IBERT、两个激活的 MGT 以及(未配置的)VIO:
•在每个“VIO”选项卡上,点击“+”按钮并添加所有信号。如果您愿意,还可以将所有输出更改为切换模式。
创建链接并使用 IBERT
点击“创建链接”,然后在图形用户界面中,对于发送端和接收端均选择“MGT_X0Y4”,接着在“新建链接”下方点击“+”号。
右键点击所创建的链接,然后选择“创建扫描”:
保持默认设置,然后点击“确定”:
你应该得到这样的眼图……
这可不行!原因在于传输通道尚未启用。在“VIO”选项卡中,将“Tx_Enable”均设置为“高”。注意查看“link_status_out”的状态,它应该变为“高”状态。
现在重新进行扫描:
现在我们得到了一个在 10.3 Gbps 下的清晰眼图。
通过减少水平和垂直方向上的增量,便能获得更高的分辨率:
还有更多......
SFP+ 模块具有 I2C 接口,用于识别和配置。MYD 板通过 I2C 多路复用器与四个 SFP+ 机箱相连。优化 SFP+ 模块设置以及通过 I2C 监控状态的内容将在另一篇文章中介绍。
本文编译自hackster.io





