基于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.mzph.cn/bicheng/29217.shtml

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

相关文章

【开发工具】git服务器端安装部署+客户端配置

自己安装一个轻量级的git服务端,仅仅作为代码维护,尤其适合个人代码管理。毕竟代码的版本管理是很有必要的。 这里把git服务端部署在centos系统里,部署完成后可以通过命令行推拉代码,进行版本和用户管理。 一、服务端安装配置 …

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 内存访问热度分析(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

windows环境下,怎么查看本机的IP、MAC地址和端口占用情况

1.输入ipconfig,按回车。即查看了IP地址,子码掩码,网关信息。 2.输入ipconfig/all,按回车。即查看了包含IP地址,子码掩码,网关信息以及MAC地址 3.我们有时在启动应用程序的时候提示端口被占用,如何知道谁占有了我们需要…

Vue57-组件的自定义事件_解绑

给谁绑的自定义事件,就找谁去触发;给谁绑的自定义事件,就找谁去解绑; 一、解绑自定义事件 1-1、解绑一个自定义事件 到student.vue组件中去解绑。 1-2、解绑多个自定义事件 使用数组来解绑多个。 1-3、解绑所有的自定义事件 二、…

Android Studio无法连接夜神模拟器的解决方案

一、AS检测不到夜神模拟器 1、问题描述 在按照教程【如何安装和使用Android夜神模拟器】进入夜神的bin目录,输入连接命令回车后,终端显示的already connected to 127.0.0.1:62001,但是AS的Running Devices并没有显示夜神模拟器。 2、解决方…

Arm和高通的法律之争将扰乱人工智能驱动的PC浪潮

Arm和高通的法律之争将扰乱人工智能驱动的PC浪潮 科技行业高管和专家表示,两大科技巨头之间长达两年的法律大战可能会扰乱人工智能驱动的新一代个人电脑浪潮。 上周,来自微软(Microsoft)、华硕(Asus)、宏碁(Acer)、高通(Qualcomm)等公司的高管在台北举行…

计算机毕业设计Python+Vue.js知识图谱音乐推荐系统 音乐爬虫可视化 音乐数据分析 大数据毕设 大数据毕业设计 机器学习 深度学习 人工智能

开发技术 协同过滤算法、机器学习、LSTM、vue.js、echarts、django、Python、MySQL 创新点协同过滤推荐算法、爬虫、数据可视化、LSTM情感分析、短信、身份证识别 补充说明 适合大数据毕业设计、数据分析、爬虫类计算机毕业设计 介绍 音乐数据的爬取:爬取歌曲、…

深度学习推理显卡设置

深度学习推理显卡设置 进入NVIDIA控制面板,选择 “管理3D设置”设置 "低延时模式"为 "“超高”"设置 “电源管理模式” 为 “最高性能优先” 使用锁频来获得稳定的推理 法一:命令行操作 以管理员身份打开CMD查看GPU核心可用频率&…

云计算 | (四)基本云安全

文章目录 📚基本云安全🐇云安全背景🐇基本术语和概念⭐️风险(risk)⭐️安全需求🐇威胁作用者⭐️威胁作用者(threat agent)⭐️匿名攻击者(anonymous attacker)⭐️恶意服务作用者(malicious service agent)⭐️授信的攻击者(trusted attacker)⭐️恶意的内部人员(mal…

有趣且重要的JS知识合集(22)树相关的算法

0、举例&#xff1a;树形结构原始数据 1、序列化树形结构 /*** 平铺序列化树形结构* param tree 树形结构* param result 转化后一维数组* returns Array<TreeNode>*/ export function flattenTree(tree, result []) {if (tree.length 0) {return result}for (const …

开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边

今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具 一、开发背景&#xff1a; 业务需要将一个pdf文件展示在前端显示&#xff0c;但是基于各种原因&#xff0c;放弃了h5使用插件展示 原因有多个&#xff0c;文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果…

CSDN 自动上传图片并优化Markdown的图片显示

文章目录 完整代码一、上传资源二、替换 MD 中的引用文件为在线链接参考 完整代码 完整代码由两个文件组成&#xff0c;upload.py 和 main.py&#xff0c;放在同一目录下运行 main.py 就好&#xff01; # upload.py import requests class UploadPic: def __init__(self, c…

力扣每日一题 6/17 枚举+双指针

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 522.最长特殊序列II【中等】 题目&#xff1a; 给定字符串列表 strs &…

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者&#xff0c;分享是Linux的优良美德。写的不好请大佬不要喷&#xff0c;多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-tools…

Stable Diffusion文生图模型训练入门实战(完整代码)

Stable Diffusion 1.5&#xff08;SD1.5&#xff09;是由Stability AI在2022年8月22日开源的文生图模型&#xff0c;是SD最经典也是社区最活跃的模型之一。 以SD1.5作为预训练模型&#xff0c;在火影忍者数据集上微调一个火影风格的文生图模型&#xff08;非Lora方式&#xff…

Python | Leetcode Python题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution:def findPeakElement(self, nums: List[int]) -> int:n len(nums)# 辅助函数&#xff0c;输入下标 i&#xff0c;返回 nums[i] 的值# 方便处理 nums[-1] 以及 nums[n] 的边界情况def get(i: int) -> int:if i -1 or…

STM32单片机DMA存储器详解

文章目录 1. DMA概述 2. 存储器映像 3. DMA框架图 4. DMA请求 5. 数据宽度与对齐 6. DMA数据转运 7. ADC扫描模式和DMA 8. 代码示例 1. DMA概述 DMA&#xff08;Direct Memory Access&#xff09;可以直接访问STM32内部的存储器&#xff0c;DMA是一种技术&#xff0c;…

【 ARMv8/ARMv9 硬件加速系列 3.5.1 -- SVE 谓词寄存器有多少位?】

文章目录 SVE 谓词寄存器(predicate registers)简介SVE 谓词寄存器的位数SVE 谓词寄存器对向量寄存器的控制SVE 谓词寄存器位数计算SVE 谓词寄存器小结SVE 谓词寄存器(predicate registers)简介 ARMv9的Scalable Vector Extension (SVE) 引入了谓词寄存器(Predicate Register…

打造工业操作系统开源开放体系

我国制造业具有细分行业、领域众多&#xff0c;产品丰富&#xff0c;制造模式多样等特点&#xff0c;围绕以工业操作系统为核心的工业软件赋能体系建设&#xff0c;离不开平台运营商、工业软件开发商、系统服务商、科研机构、工业企业等多方联合参与。聚众同行、聚力创新&#…

【数据库系统概论复习】关系数据库与关系代数笔记

文章目录 基本概念数据库基本概念关系数据结构完整性约束 关系代数关系代数练习课堂练习 语法树 基本概念 数据库基本概念 DB 数据库&#xff0c; 为了存用户的各种数据&#xff0c;我们要建很多关系&#xff08;二维表&#xff09;&#xff0c;所以把相关的关系&#xff08;二…