FPGA Xilinx 7系列高速收发器GTX通信

2023-11-19

Xilinx 7系列高速收发器GTX

说明:
FPGA:
TX端_zynq(7z035)
RX端_zynq(7z100)。
两个FPGA通过SFP(光纤)接口相连进行GTX的通信。

环境:Vivado2018.2。

IP核:7 Series FPGAs Transceivers Wizard(3.6)

直通☛ 200页+ FPGA/IC秋招面试笔试题

工程代码下载

SFP模块:

硬件连接示意图:
在这里插入图片描述


1.IP核配置前熟悉原理图

TX端

(1).GTX端口:
在这里插入图片描述

从原理图中标号①中看出发送端SFP1接口连接在FPGA的BANK111,发送端我们只需要MGTXTXP1与MGTXTXN1两个差分信号端(TX)。

(2).GTX时钟:

  如原理图中标号②SFP接口在BANK111中使用了差分时钟MGTREFCLK1(MGTREFCLK1P、MGTREFCLK1N)。所谓差分时钟,看图,实测的。

gtx时钟为156.25M。

RX端

(1).GTX端口:

在这里插入图片描述
在这里插入图片描述
接收端SFP1接口连接在FPGA的BANK110,接收端差分信号为MGT_110_RX0_P、MGT_110_RX0_N。

(2).GTX时钟:
接收端的采用的MGT_110_CLK1(MGT_110_CLK1_P、MGT_110_CLK1_N)差分时钟,为156.25M。


2.GTX收发器解析

TX端

TX发送端框图:
在这里插入图片描述
框图解析:
发送端由PMA(Physical Media Attachment,物理媒介适配层)PCS(PhysicalCoding Sublayer,物理编码子层)组成
PMA子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复电路。
PCS 子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正电路。
PISO 并转串
SIPO串转并
FPGA内部并行数据通过FPGATX Interface进入TX发送端,然后经过PCS和PMA子层的各个功能电路处理之后,最终从TX驱动器中以高速串行数据输出

TX发送端时钟:
在这里插入图片描述
框图解析:
Phase Adjust FIFO:即TX BUFF。
PMA和PCS在不同的时钟域PMA(XCLK)PCS(TXUSRCLK),中间的Phase Adjust FIFO(FIFO具有隔离时钟的功能)连接着不同的时钟域XCLK和TXUSRCLK,为了数据发送的稳定,XCLK和TXUSRCLK必须是速率匹配,相位差可以消除的,TX Buffer主要用于匹配两时钟域的速率和消除两时钟域之间的相位差。Phase Adjust FIFO也可以被旁路,TX发送端提供了一个相位对齐电路,可以解决XCLK和TXUSRCLK时钟域之间的相位差,但是TX_XCLK_SEL需设置为“TXUSR”来保持XCLK时钟域和TXUSRCLK保持同频。
TXUSRCLK2: 是进入GTX端的所有信号的主要同步时钟,进入GTX收发器TX端的大多数信号都经过在TXUSRCLK2上升沿的采样。 TXUSRCLK和TXUSRCLK2基于TX_DATA_WIDTH 和TX_INT_DATAWIDTH的设置有固定的速率。如下图描述:
在这里插入图片描述
TXUSRCLK与TXUSRCLK2对应关系:
在这里插入图片描述

RX端

RX接收端框图:
在这里插入图片描述
框图解析:
每个GTX收发器都包括一个独立的接收器,该接收器由一个PCS(物理编码子层 )和PMA(物理媒介附加子层)。
PCS (物理编码子层 ):负责串化/解串化
PMA (物理媒介附加子层):负责数据流的编码解码
高速串行数据从板上的走线到GTX的PMA中,进入PCS,最后进入FPGA逻辑。
PISO并转串
SIPO串转并
RX CDR 图中三角形处,因为GTX传输不带随路时钟,因此在接收端必须自己做 时钟恢复和数据恢复。
LPM、DFE 为RX接收端的均衡器
LPM功耗较低,DFE能提供更精确的滤波参数,从而可以更好的补偿传输信道损失,因此性能更好。
Polarity :极性控制,解决PCB上TX/RX反转的问题。

RX接收时钟:
在这里插入图片描述
在这里插入图片描述

FPGA RX接口包括两个并行时钟:RXUSRCLK and RXUSRCLK2
RXUSRCLK 是GTX发送器中PCS(负责串化/解串化)逻辑的内部时钟。
RXUSRCLK 所需的速率取决于内部数据路径宽度
RXUSRCLK = 线速/内部数据路径宽度

RXUSRCLK2是所有同步信号进入RX端信号的主要同步时钟。
进入GTX收发器RX端的大多数信号是在RXUSRCLK2的上升沿采样。
RXUSRCLK2和RXUSRCLK 有一个基于RX_DATA_WIDTH和RX_INT_DATAWIDTH的固定速率关系,线速大于6.6Gb/s通过RX_INT_DATAWIDTH设置为1 ,需要使用4字节内部数据路径。


3. IP核配置

熟悉FPGA原理图后进行IP核的配置。点击IP Catalog。
在这里插入图片描述
搜索并选择7 Series FPGAs Transceivers Wizard。
在这里插入图片描述

TX端IP配置

page1:
GT Type选择gtx,勾选example。
在这里插入图片描述
page2:
线速率为: 3.125Gbps。
参考时钟:选择REFCLK1 Q2 大小为156.25MHz(原理图中GTX采用了时钟MGTREFCLK1,大小为156.25MHz)。
在这里插入图片描述
page3:
数据宽度:16bit。
编码方式:8B/10B.
内部数据宽度:自动设置为20bit。
DRP时钟为50M(连接到系统时钟)。
在这里插入图片描述
系统时钟:
在这里插入图片描述

page4:
在这里插入图片描述
page5:
没采用协议,保持默认。
page6:
保持默认。
page7:
配置总结,在这里线速率为3.125Gbps,内部数据宽度为20bit,所以RXUSRCLK2=3125/20=156.25MHz。
在这里插入图片描述

RX端IP配置

page1:
GT Type选择gtx,勾选example。
在这里插入图片描述
page2:
线速率为: 3.125Gbps。
参考时钟:选择REFCLK1 Q1 大小为156.25MHz(原理图中GTX采用了时钟MGT_110_CLK1,大小为156.25MHz)。
在这里插入图片描述

page3:
数据宽度:16bit。
编码方式:8B/10B.
内部数据宽度:自动设置为20bit。
DRP时钟为100M(连接到系统时钟)。
在这里插入图片描述
系统时钟:
在这里插入图片描述
page4:
K码选择K28.5。
在这里插入图片描述
page5:
默认。
page6:
默认。
page7:
配置总结,在这里线速率为3.125Gbps,内部数据宽度为20bit,所以RXUSRCLK2=3125/20=156.25MHz。
在这里插入图片描述

4.生成IP Example 工程并做相应修改

在配置好GTX的IP核后,打开IP核的example工程,做一定的修改并加入ILA核进行调试。

TX端

配置IP核后,点击Open IP Example Design生成IP核的Example工程。
在这里插入图片描述
打开Example工程,包含以下模块。
在这里插入图片描述
●注:
1.GT_FRAME_GEN为数据获取模块,在此模块中将本地文件gt_rom_init_tx.dat中的数据读取FPGA内部进行数据的传输。数据如下:
在这里插入图片描述
GT_FRAME_GEN模块中可以看出读入的数据长度为512。
在这里插入图片描述

2.数据中BC为K码:K28.5,当K码出现时charisk信号为1(具体的16bit数据和charisk怎么从如下数据中提取出来的详细看GT_FRAME_GEN中代码)。如下:
在这里插入图片描述
Example工程中需要修改的地方

1.gtx_tx_exdes中gt0_data_valid_in拉高。
在这里插入图片描述
括号内替换为1’b1
在这里插入图片描述
2.DRP时钟
默认DRP时钟为差分时钟。在这里插入图片描述
因为我们要连接到系统时钟为单端时钟,所以进行以下修改(如果板子上有多余的差分时钟也可以之间连接)。
将DRP时钟的输入改为单端。
在这里插入图片描述
在COMMON PORTS处屏蔽差分转单端原语(IBUFDS)。并将BUFG的输入改为我们的单端时钟DRP_CLK_IN(约束时只需要约束单端时钟)。
在这里插入图片描述

RX端

配置IP核后,点击Open IP Example Design生成IP核的Example代码。
在这里插入图片描述
接收端example工程更改:
1.在以下模块中gt0_data_valid_in拉高。
在这里插入图片描述

括号内替换为1’b1
在这里插入图片描述
2.DRP时钟
因为接收端FPGA的系统时钟为差分时钟,所以源代码不用修改。
在这里插入图片描述

5.约束

不具体写了
注意以下几点:
1.在Implementation中选择Floorplanning
在这里插入图片描述
在这里插入图片描述
可以看到我们约束好的GTX引脚,并且可以看到GTX位置为X0Y9,正好符合我们当时选择的通道。
在这里插入图片描述
时钟也一样可以看到
在这里插入图片描述
如果约束出问题了可以在这里查看一下。
2.多时钟域约束
设计中出现存在多个时钟,并且时钟域之间无数据交换,则需要给这些时钟之间设置假路径约束。
sys_clk(DRP时钟)
TXOUTCLK(GTX时钟)

set_false_path -from [get_clocks sys_clk] -to [get_clocks gtx_tx/gtx_tx_support_i/gtx_tx_init_i/inst/gtx_tx_i/gt0_gtx_tx_i/gtxe2_i/TXOUTCLK]

如果不约束会出现时序违例。
WNS 代表最差负时序裕量 (Worst Negative Slack)
TNS 代表总的负时序裕量 (Total Negative Slack),也就是负时序裕量路径之和。
WHS 代表最差保持时序裕量 (Worst Hold Slack)
THS 代表总的保持时序裕量 (Total Hold Slack),也就是负保持时序裕量路径之和。
这些值告诉设计者设计与时序要求相差多少。如果为正值,则说明能达到时序要求,若为负值,则说明时序达不到要求。

6.调试结果

加ila核,还记不记得:
TXUSRCLK2:是进入GTX端的所有信号的主要同步时钟,进入GTX收发器TX端的大多数信号都经过在TXUSRCLK2上升沿的采样。
RXUSRCLK2是所有同步信号进入RX端信号的主要同步时钟。
进入GTX收发器RX端的大多数信号是在RXUSRCLK2的上升沿采样。

不记得在看一遍图(红框):
在这里插入图片描述
在这里插入图片描述

TX端
ila_0 ila_tx (
	.clk(gt0_txusrclk2_out), // input wire clk
	
	.probe0(gt0_txdata_in), // input wire [15:0]  probe0  
	.probe1(gt0_txcharisk_in) // input wire [1:0]  probe1
);

在这里插入图片描述

RX端
ila_0 ila_rx (
	.clk(gt0_rxusrclk2_out), // input wire clk

	.probe0(gt0_rxdata_out), // input wire [15:0]  probe0  
	.probe1(gt0_rxcharisk_out) // input wire [1:0]  probe1
);

在这里插入图片描述

★★★如有错误欢迎指导!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA Xilinx 7系列高速收发器GTX通信 的相关文章

  • Verilog--CDC跨时钟域处理(快时钟域到慢时钟域)

    Verilog CDC跨时钟域处理 快时钟域到慢时钟域 CDC问题 单比特信号的跨时钟域问题 从快时钟域到慢时钟域 从慢时钟域到快时钟域 多比特信号的跨时钟域问题 异步FIFO 握手协议 DMUX 格雷码 双D触发器 今天先写单比特信号从快
  • FPGA面试真题解析(3)

    9 寄存器的Tsu 建立时间 是如何定义的 硬件逻辑实习岗 A 在时钟沿到来之后数据保持稳定的时间 B 在时钟沿带来前后数据都需要保持稳定的时间 C 在整个时钟周期数据保持稳定的时间 D 在时钟沿到来之前数据保持稳定的时间 解析 考察数字电
  • Xilinx ISE系列教程(9):LabTools下载、安装、使用教程(独立的下载工具)

    文章目录 1 ISE Vivado LabTools简介 2 ISE 14 7 Lab Tools下载 安装 3 Vivado 2018 3 LabTools下载 安装 1 ISE Vivado LabTools简介 Xilinx LabT
  • 【原创】always语句 和 initial语句

    过程语句 有 always语句 和 initial语句 相同点 1 always语句 和 initial语句 可以多次使用 2 always语句 和 initial语句 各语句块 整体 是独立运行 3 always语句 和 initial语
  • 硬件设计---了解电源篇

    1 概述 在高速电路设计中一块单板上常存在多种电源 3 3V 1 8V 1 2V 1 0V 0 9V 0 75V等 有时光是对FPGA供电就需要五六种电源 为了便于使用往往用户只需要提供一种或几种电源 然后经过板上电源模块转换到各个目标电源
  • 2022芯原芯片设计 笔试题分析和讨论

    2022芯原设计笔试题分析和讨论 以下仅为个人理解和分析 不保证正确 欢迎大家发表自己的想法 讨论出正确答案 企业知识题 1 1 D 芯原的主要经营模式为芯片设计平台即服务 Silicon Platform as a Service SiP
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • [HDLBits] Exams/ece241 2014 q7a

    Design a 1 12 counter with the following inputs and outputs Reset Synchronous active high reset that forces the counter
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 映射 MMIO 区域写回不起作用

    我希望对 PCIe 设备的所有读写请求都由 CPU 缓存进行缓存 然而 它并没有像我预期的那样工作 这些是我对回写 MMIO 区域的假设 对 PCIe 设备的写入仅在缓存回写时发生 TLP 有效负载的大小是缓存块大小 64B 然而 捕获的
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻

随机推荐

  • Hudi原理

    1 摘要 Apache Hudi提供了不同的表类型供根据不同的需求进行选择 提供了两种类型的表 Copy On Write COW Merge On Read MOR 2 术语介绍 在深入研究 COW 和 MOR 之前 让我们先了解一下 H
  • checking for module ‘sqlite3‘ package ‘sqlite3‘ not found

    checking for module sqlite3 package sqlite3 gt 某个版本号 not found 在编译安装其他源码包的时候遇到缺少sqlite3库的问题 这里字面上的意思是没有安装sqlite3 但是造成这个问
  • (python)常见面试题

    1 一行代码实现1 100之和 2 如何在一个函数内部修改全局变量 3 列出5个python标准库 os 提供了不少与操作系统相关联的函数 sys 通常用于命令行参数 re 正则匹配 math 数学运算 datetime 处理日期时间 4
  • Redis数据实战之“万金油”的String,为什么不好用了?

    Redis数据实战之 万金油 的String 为什么不好用了 引言 为什么 String 类型内存开销大 用什么数据结构可以节省内存 如何用集合类型保存单值的键值对 引言 以一个项目需要为例 需要开发一个图片存储系统 要求这个系统能快速地记
  • DNS使用TCP与UDP

    DNS同时占用UDP和TCP端口53是公认的 这种单个应用协议同时使用两种传输协议的情况在TCP IP栈也算是个另类 但很少有人知道DNS分别在什么情况下使用这两种协议 先简单介绍下TCP与UDP TCP是一种面向连接的协议 提供可靠的数据
  • tensorflow-ssd 实现纸张缺陷检测

    环境 win10 tensorflow1 10 python3 6 9 下载https github com balancap SSD Tensorflow到本地 1 解压并测试demo 打开Anaconda prompt 切换到SSD T
  • 我又把HTMLTestRunner改了一下,支持Python3,添加echarts统计饼图

    之前用Bootstrap把HTMLTestRunner改的美观了一点 同时改成了中文的报告 但那个是基于Python2的 见这篇博文 selenium之 输出报告 对HTMLTestRunner进行样式调整后的示例 这次呢 博主又给它改成了
  • mac编译安装Nginx

    一 安装wget 使用homebrew安装wget brew install wget 安装wget时报错 tar Error opening archive Failed to open Users xxx Library Caches
  • 【数据库】如何创建一个非常便宜的无服务器数据库

    云对象存储可以用作功能强大且非常便宜的数据库 您是否相信您可以使用完全托管 可大规模扩展 高度可用且价格低廉的无服务器数据库 每月只需 5 美元 您就可以存储数亿条记录并读写数十亿条记录 如果您的数据库需求可以通过非常简单的键值存储来满足
  • 近期deep learning做图像质量评价(image quality assessment)的论文4

    1 2017会议论文ICME An accurate deepconvolutional neural networks model for no reference image quality assessment 复旦大学 1 1用了部
  • Python开发环境Wing IDE如何查看调试数据

    Wing IDE具有一个十分有用的特性 就是处理复杂bug的时候可以以各种各样的方式查看调试数据值 这个功能具体是由Watch工具实现的 查看数据值 在PrintAsHTML中发生异常时 右键单击Stack Data工具中的本地数值 这将显
  • 【STM32学习笔记】(13)——外部中断详解

    EXTI 简介 EXTI External interrupt event controller 外部中断 事件控制器 管理了控制器的 20 个中断 事件线 每个输入线可以独立地配置输入类型 脉冲 或挂起 和对应的触发事件 上升沿或下降沿或
  • unity本地分数排行榜简单解决方案(Json)

    具体效果 大体方法 创建一个分数类Score和一个分数类的容器List
  • TLSv1.2抓包解密分析过程之ECDHE_RSA_WITH_AES_128_CBC_SHA256

    ECDHE RSA WITH AES 128 CBC SHA256模式下 RSA只用于身份验证 不用于加密 加密密钥是通过有限域的椭圆曲线算法交换的 需要拿到ECDH的私钥才能解密 本文的demo样本使用了特殊方法来获取这些参数 椭圆曲线加
  • Nginx 通过upstream反向代理报 400 Bad Request

    首先看一下400错误的定义 400 Bad Request 是一种 HTTP 错误状态码 HTTP 1 1 对 400 Bad Request的定义主要是 语义有误 当前请求无法被服务器理解 请求参数有误 丢包导致异常 背景一 开发了一个s
  • 从一道题目学习Nunjucks模板

    Nunjucks简介 Nunjucks 是一个功能丰富 强大的 JavaScript 专用模板引擎 Nunjucks 提供丰富的语言特性和块继承 自动转移 宏和异步控制等等 重点要关注的是 Nunjucks 模板引擎的代码在沙箱环境中运行
  • xilinx xdma PCIe中断bug

    xilinx xdma PCIe中断存在bug bug1 此中断虽然是msi或者msx中断 但是不中断cpu bug2 此中断不是边沿中断 而是电平中断 在驱动层需要不断地轮训查询中断事件 bug3 此中断持续时间必须长 而且在收到中断应答
  • 关于the selection cannot be run on any server错误的问题,如何快速的解决。

    最近在导入外来项目时 遇到了一个难题 就是出现了图中的错误 the selection cannot be run on any server 无法在任何服务器上运行所选内容 这个错误的原因在于Dynamic Web Module 的版本与
  • 基于CNN-GRU的多维数据预测算法——附带Matlab代码

    基于CNN GRU的多维数据预测算法 附带Matlab代码 近年来 卷积神经网络 CNN 和门控循环单元 GRU 在时序数据处理中的应用十分广泛 本文提出了一种基于CNN GRU结构的多维数据预测算法 并提供了相应的Matlab代码 首先
  • FPGA Xilinx 7系列高速收发器GTX通信

    Xilinx 7系列高速收发器GTX 说明 FPGA TX端 zynq 7z035 RX端 zynq 7z100 两个FPGA通过SFP 光纤 接口相连进行GTX的通信 环境 Vivado2018 2 IP核 7 Series FPGAs