基于GTX的64B66B编码IP生成(高速收发器二十)

  点击进入高速收发器系列文章导航界面


1、配置GTX IP 相关参数

  前文讲解了64B66B编码解码原理,以及GTX IP实现64B66B编解码的相关信号组成,本文生成64B66B编码的GTX IP。

  首先如下图所示,需要对GTX共享逻辑进行设置,为了便于扩展,与8B10B编码一致,将共享逻辑放在IP外部的示例工程中。

在这里插入图片描述

图1 设置“GT Selection”界面

  之后将发送通道和接收通道的线速率均设置为10Gbps,参考时钟频率选择156.25MHz(开发板提供给高速收发器的参考时钟频率)。由于线速率大于5.5Gbps,因此接收通道和发送通道的时钟只能来自QPLL输出。其余设置与8B10B编码保持一致。

在这里插入图片描述

图2 设置”Line Rate,RefClk Selection”界面

  设置“Encoding and Clocking”界面时,根据前文可知,GTX的发送通道可以由用户逻辑提供变速器的计数器,也可以使用IP内部自带的计数器,因为GTH等高速收发器内部变速器没有自带计数器,为了与其余高速收发器设计保持一致,1处发送通道选择使用外部计数器的64B66B编码方式。

  此处可以计算出PCS内部并行数据传输时钟userclk和用户接口时钟userclk2的频率,首先userclk等于线速率除以内部数据位宽,线速率为10Gbps,内部数据位宽(Internal Data Width)32位,计算得到userclk为312.5MHz。而用户接口数据位宽为64位,为了保持带宽恒定,用户接口时钟频率应该是内部时钟频率的一半,即userclk2等于156.25MHz。

  数据位宽选择64位,降低用户时钟频率,有利于时序稳定。接收通道不需要用户提供计数器,直接选择64位数据位宽的64B66B编码即可。

  在接收通道和发送通道依旧使能内部Buffer对数据同步,将发送通道和接收通道的时钟来源均设置为TXOUTCLK,而TXOUTCLK来源于TXPLLREFCLK,如下图所示。

在这里插入图片描述

图3 设置“Encoding and Clocking”界面

  即使经过前面8B10B的讲解,有部分读者还是会疑惑,为什么发送通道和接收通道内部就必须使用buffer同步数据,以发送通道为例,此处在此说明。

  首先要清楚buffer两侧的时钟域分别是什么,各自时钟域的来源是什么,是否真的存在相位差,然后就知道为什么必须要同步了。

  如下图所示,发送通道的buffer两侧的时钟分别是TXUSRCLK(PCS内部传输数据时钟)和XCLK(PMA的并行时钟),TXUSRCLK和TXUSRCLK2都是TXOUTCLK通过同一个锁相环生成的,因此不存在相位差,他们之间也不需要同步。

在这里插入图片描述

图4 发送通道的Buffer

  在此之后,需要知道TXOUTCLK与XCLK的来源。下图是发送通道内部的时钟结构,前文也进行过详细分析。

  根据图3的设置可知TXOUCLK来源于TXPLLREFCLK,而高速收发器的PLL应该就是CPLL或者QPLL,因此下图中TXOUCLK的来源应该是3(CPLREFCLK)或者4(QPLLREFCLK)。

  再看XCLK来源,5处选择QPLL或者CPLL的输出时钟(与其参考时钟相位相同)作为PMA的输入时钟,然后经过内部的相位调节模块(Phase Interp)调节时钟与PMA数据的相位关系,再经过分频得到并串转换的时钟信号。因此PMA的并行时钟信号就是TXOUTCLKPCS,即XCLK。

  TXOUTCLKPCS的相位经过Phase Interp调节后,很可能与QPLL或者CPLL的参考时钟相位已经不同了,那么XCLK与TXUSRCLK的相位也就不同,因此需要同步,个人的理解就是这么多了。

在这里插入图片描述

图5 发送通道内部的时钟架构

  至于上图中的分频系数如何设置,含义是什么,前文已经详细讲解过,本文不再赘述。接收通道的原理类似,只不过是将Phase Interp换成了CDR而已。

  回归正文,如下图所示,配置“Comma Alignment and Equalization”界面,由于64B66B没有K码相关内容,因此不能设置K码对齐,需要用户去控制同步头实现手动对齐,后续代码设计时进行讲解。

  由于10Gbps线速率比较高,接收通道选择DFE均衡模式,将发送端的加重和极性控制等选项勾选。

在这里插入图片描述

图6 配置“Comma Alignment and Equalization”界面

  之后设置“PCIe,SATA,PRBS”界面,如下图所示,只需要勾选回环控制即可,其余保持不变。

在这里插入图片描述

图7 设置“PCIe,SATA,PRBS”界面

  下图是设置通道绑定和时钟纠正的界面,其中通道绑定只能在设计中存在多个高速收发器时使用。启用时钟纠正功能,每发送5000字节数据会发送一个时钟序列,用于时钟纠正。

在这里插入图片描述

图8 设置“CB and CC Sequence”界面

  最后来到IP设置的汇总界面,如下图所示,其中USRCLK位312.5MHz,USRCLK2为156.25MHz,与前文计算结果一致。

在这里插入图片描述

图9 GTX设置参数汇总界面

2、模块分析

  打开IP的示例工程,主要关注下图几个重要模块,多数与8B10B编码的模块类似。首先时QPLL、复位、用户时钟生成的相关模块。与8B10B编码不同的是多了一个手动同步的模块。

在这里插入图片描述

图10 GTX示例工程模块分析

  同步模块通过判断接收的同步头是否正确,来拉高Slip信号调节开始转换的位置,来达到接收数据同步的目的,RTL视图如下所示。

在这里插入图片描述

图11 同步模块的RTL视图

  官方示例工程的手动同步模块写的比较繁琐,经过前面讲解可知,在正常传输数据时,64B66B编码会有控制码和数据码两种,同步头分别是2’b01和2’b10。

  因此接收端在上电后,可以根据接收到的同步头的状态判断接收的数据是否同步了,如果接收到的同步头不是2’b01或者2’b10,则把Slip信号拉高一个时钟,等待一段时间后继续检测,直到连续检测32个时钟接收的数据均正常时,把同步成功信号拉高。

  数据同步与ISERDES的原理类似,后文的自定义64B66B协议时,会自己设计同步模块,比较简单,本文就不讲述官方该模块的设计了,有兴趣的可以看看。

  运行示例工程的仿真,QPLL仿真结果如下所示。

在这里插入图片描述

图12 QPLL仿真结果

  发送通道的用户接口时序如下图所示,帧头和帧尾的控制帧数据对应的同步头为2’b10,而纯数据帧的同步头为2’b01。当外部想GTX中连续输入32个数据(计数器txsequence计数到31)时,txdata_in需要暂停输入数据,清空内部变速器中的数据。

在这里插入图片描述

图13 发送通道时序

  当接收通道复位完成后,接收端需要对接收数据进行同步,如下图所示,多次拉高rxgeraboxslip,直到接收到的同步头正常为止。

在这里插入图片描述

图14 接收端同步时序

  如下图所示,接收到的同步头数据txheader_out并不全为2’b01或者2’b10,说明接收的数据并没有同步成功,因此将rxgeraboxslip拉高一个时钟,过一段时间后继续检测txheader_out状态,直到持续32个时钟接收到txheader_out的状态均正常时,认为同步完成。

在这里插入图片描述

图15 同步时序

  仿真采用回环设计,如下图所示,发送数据经过IP收发后,接收端仍然能够接收到数据,证明该IP的使用没有问题。

在这里插入图片描述

图16 收发数据时序

  注意该IP并不具备64B66B编码和解码的能力,64B66B编码和解码是通过示例工程的两个模块完成的,对应的RTL视图如下图所示。

在这里插入图片描述

图17 加扰和解扰模块的RTL视图

  后续用户在设计自己的工程时,可以直接使用这两个模块,对发送数据加扰,接收数据解扰。

  由于本文只使用了一个高速收发器,因此不对示例工程上板,后续在自定义的64B66B工程中进行上板测试。


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

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

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

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

相关文章

什么是微前端

什么是微前端? 微前端 这个名词,第一次被提出还是在2016年底,那是在 ThoughtWorks Technology Radar。这个概念将微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化,富交互…

RPG游戏完整指南

环境:unity2021urp 本教程教大家如何使用Unity创建一个RPG游戏,玩家可以在城镇场景中进行导航并寻找战斗,并在战斗中遇到不同类型的敌人。玩家可以向敌人施加不同的动作,如:常规攻击和撤离。这会是一个十分有趣的体验。…

[next.js] svgr/webpack

nextjs如何配置svg文件,使其像react组件一样导入? 当前next.js 开发环境我使用了--turbo 来开启turbopack加速文件构建,所以之前的一些webpack loader之类的无法正常工作。通过搜索发现一般都是使用svgr/webpack来处理svg,打开svgr官网发现…

Linux初识地址空间

前言 上一期我们对进程优先级、命令行参数以及环境和变量做了介绍!以前我们就提到过一个问题有了运行队列为什么还要有优先级?本期将带你揭晓! 本期内容介绍 虚拟地址空间的引入 虚拟地址空间的介绍 如何理解地址空间 为什么要有地址空间 如…

docker和docker compose 部署

一. 将微服务运行在docker上: 1.新建一个空文件夹docker-demo,在里面再新建文件夹app,在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

数据库系统概念(第八周 第一堂)(规范化关系数据库设计)(强推学习!!!)

目录 前言 E-R模型质量低的深层原因 数据依赖 函数依赖 主属性/非主属性 逻辑蕴含与闭包 Armstrongs Axiom 求解F闭包算法 求解属性集闭包算法 属性集闭包的作用 候选码求解理论和算法 候选码求解理论 无关属性 检验方法 正则覆盖 关系模式的设计 关系…

Spark常见的可以优化的点

Shuffle 复用 # 1.以下操作会复用的shuffle结果,只会读一遍数据源 val rdd1 sc.textFile("hdfs://zjyprc-hadoop/tmp/hive-site.xml").flatMap(_.split(" ")).map(x > (x,1)).reduceByKey(_ _).filter(_._2 > 1) rdd1.count() rdd1.fil…

Python高级用法:路径与文件操作(os与pathlib)

路径与文件 前言导入包判断路径存在判断路径类型(判断文件还是文件夹)获取父路径写入读出文件获得路径中所有子文件/子文件夹获取文件扩展名获取多个文件扩展名获取路径的组件创建目录删除文件或空目录 前言 在Python中,os模块提供了与操作系…

美国裸机云站群服务器使用指南

在当今数字化时代,网站和应用程序的稳定运行对于企业和个人都至关重要。为了满足日益增长的业务需求,裸机云站群服务器成为了一个理想的选择。以下是美国裸机云站群服务器的使用指南,帮助您更好地利用这一强大的云服务。 一、选择信誉良好的云…

AI大模型在运动项目的深度融合和在穿戴设备的实践及未来运动健康技术发展

文章目录 1. 技术架构2. 模型选择2.1 LSTM(长短期记忆网络)2.2 CNN(卷积神经网络)2.3 Transformer 3. 数据处理数据预处理 4. 实时性要求4.1 边缘计算4.2 模型优化 5. 数据隐私与安全6. 深入分析AI大模型在穿戴设备的应用和未来发…

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod,这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台,查看/etc/resolv.conf,发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…

动态 SQL

动态 SQL 是 MyBatis 的强大特性之一&#xff0c;能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的&#xff0c;而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。 <if>标签 例如在有一些网站进行…

【linux网络(四)】传输层协议详解(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. UDP协议…

CPN Tools学习——从平面网构建分层 PN

1.先创建平面petri网 创建如下petri网&#xff1a; CPN ide创建petri网真的舒服很多&#xff0c;但是教程又是CPN Tools的&#xff0c;我的想法是看两个版本能不能互通&#xff0c;在前者创建&#xff0c;在后者运行学习。 新增定义&#xff1a; colset E unit with e; 但…

Go模板页面浏览器显示HTML源码问题

<!--* Title: This is a file for ……* Author: JackieZheng* Date: 2024-06-09 17:00:01* LastEditTime: 2024-06-09 17:01:12* LastEditors: Please set LastEditors* Description:* FilePath: \\GoCode\\templates\\index.html --> <!DOCTYPE html> <html …

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备&#xff0c;保持设备始终在线对网络运维人员来说至关重要&#xff0c;然而一个一个登录检查&#xff0c;或者一个一个ping并不明智&#xff0c;累人且效率极低&#xff0c;并出错率高。花钱买检测服务当我没说。 shell编…

acwing 5575. 改变数值 | c++题解及解释

acwing 5575. 改变数值 题目 代码及解释 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> using namespace std;const int N305; int a[N],b[N]; unordered_map<int,int>f[N]; const int INF1e9;int gc…

Dev C++ 安装及使用方法教程-干活多超详细

Dev C 是一款非常好用&#xff0c;简约的C/C开发工具。可以减少很多创建工程的繁琐步骤&#xff0c;很快的进行开发。对于只用于来写代码的人来说&#xff0c;是比较轻量以及极速的。 Dev C 是一个windows下的c和c程序的集成开发环境。它使用mingw32/gcc编译器&#xff0c;遵循…

Docker部署常见应用之大数据基础框架Hadoop

文章目录 Hadoop简介主要特点核心组件生态系统 Docker Compose 部署集群参考文章 Hadoop简介 Hadoop是一个开源框架&#xff0c;由Apache软件基金会开发&#xff0c;用于在普通硬件构建的集群中存储和处理大量数据。它最初由Doug Cutting和Mike Cafarella创建&#xff0c;并受…

质疑标普,理解标普,加入标普

上周我在文章里提到过&#xff0c;标普信息科技LOF(161128)出现套利机会。每天申购卖出&#xff0c;到现在一个账户56*6336润。 得益于美股七巨头轮流领涨&#xff0c;161128依旧坚挺&#xff0c;每天溢价都是10%&#xff0c;成交量1个多亿&#xff0c;场内新增份额才400万份&…