xilinx的Aurora8B10B的IP仿真及上板测试(高速收发器十七)

  前文讲解了Aurora8B10B协议原理及xilinx相关IP,本文讲解如何设置该IP,并且通过示例工程完成该IP的仿真和上板。

1、生成Aurora8B10B IP

如下图所示,首先在vivado的IP catalog中输入Aurora 8B10B,双击该IP。

在这里插入图片描述

图1 查找Aurora 8B10B IP

  Aurora 8B10B相对GTX的配置相对简单,主要配置如下界面,下面分别对各个选项含义进行讲解。

    1、Lane width:设置用户发送和接收数据位宽,可以设置为4字节或2字节,本文设置为4字节。

    2、Line Rate:设置高速收发器线速率,最大不超过6.6Gbps,意味着高速收发器使用CPLL的输出作为参考时钟信号。

    3、GT Refclk:高速收发器参考时钟频率,该时钟必须来源于GT bank的差分时钟引脚,选择自己开发板的差分时钟频率即可。

    4、INT clk:初始化时钟,对时钟来源没有要求,可以和DRP共用同一时钟。

    5、DRP Clk:动态重配置的参考时钟信号,对时钟来源没有要求。

在这里插入图片描述

图2 配置Core Options界面

    6、Dataflow Mode:选择该IP工作模式,可选有仅发送、仅接收、全双工,本文选择全双工模式。

    7、Interface:用户接口类型,前文分析过该IP支持两种用户接口,本文选择使用标准的axi-stream格式,更加适用于一般情况。

    8、Flow Control:流控设置,前文讲解过该IP支持两种流控模式,用户可以在此处选择使用其中一种或两种流控,本文不使用流控传输。

    9、back channel:是一个不可设置的选项,与初始化相关。

    10、Scrambler/Descrambler:启用加扰和解扰模块,该IP可以对发送数据加扰,对接收数据解扰,加扰和解扰表达式为X16+X5+X4+X3+1,一般勾选即可,可以增加数据的抗干扰能力。

    11、Little Endian Support:小端对齐。不勾选该选项时,图中数据信号的最高位是0,表示先传输高字节数据,采用大端对齐。勾选该选项后,数据位会颠倒,变成小端对齐,FPGA内部一般使用大端对齐,保持默认即可。

    12、Additional Transceiver Control and Status Ports:勾选后会多一些debug的端口信号,默认不勾选。

  然后配置GT Selections界面,该界面主要配置高速收发器的通道数,以及通道和参考时钟来源的位置,这些保持默认即可,用户可以在后续的XDC文件中更改引脚来达到相同目的。

在这里插入图片描述

图3 配置GT Selections界面

  最后这个界面用于选择将共享逻辑放在IP内部还是外部,一般都会选择外部,方便之后例化多个收发器,如果以后使用其余高速IP,均会出现这个界面。

在这里插入图片描述

图4 配置共享逻辑的位置

  IP的配置就完成了,如果配置过GTX、看过前面两篇原理相关文章,IP相关配置的含义应该会比较清晰。

2、仿真Aurora8B10B IP

  在IP成功生成IP之后,鼠标右击IP,然后选择生成示例工程,如下图所示,之后全部点击OK即可。

  Xilinx官方的IP除了有配套手册外,还都提供了示例工程。后续很多IP的学习思路均是如此,首先通过手册得知IP的工作方式,通过示例工程去验证这些功能,然后在写自己的代码。

在这里插入图片描述

图5 生成示例工程

  示例工程的顶层RTL框图如下所示,中间的模块是对IP封装后的顶层模块,左边两个模块用于产生发送数据,右边两个模块用于对接收的数据转换和校验。

  我们应该需要注意的是中间模块是怎么对IP进行封装的,发送数据和接收数据部分不用太关心,按照axi_stram生成相关数据即可,示例工程这两部分写的比较复杂。

在这里插入图片描述

图6 示例RTL视图

  打开上图中间模块,得到以下内容,与前面GTX的示例工程比较相似。注意即使高速收发器没有使用QPLL输出时钟,但是在设计的时候,依旧需要例化GT_COMMON,这个在GTX手册中好像也可以找到有相关描述。

在这里插入图片描述

图7 IP模块使用

  注意上图的用户时钟USER_CLK信号依旧是tx_out_clk经过MMCM后生成的,与GTX一致。

  关于IP的端口信号,重要的状态信号和控制信号在前文讲解Aurora8B10B IP原理的时候已经详细讲述,如同DRP、QPLL相关信号与GT收发器是一致的,就不再赘述了。

  如果不使用动态重配置功能,则DRP相关信号可以参考示例工程的连接,输入信号接地,输出信号悬空,如下图所示。

在这里插入图片描述

图8 DRP相关接口的处理

  QPLL相关信号如下图所示,首先高速收发器的差分时钟信号通过IBUFDS_GTE2转换为单端时钟输入GT_COMMON和IP。本工程的初始化时钟是差分输入,后续在整理时可以直接使用单端时钟信号。

在这里插入图片描述

图9 QPLL相关信号连接

  下图是时钟和复位信号相关连接,复位同步模块需要将外部输入的两个异步复位信号分别同步到对应时钟域下。TXOUTCLK通过BUFG作为用户时钟信号,此处没有使用MMCM的原因应该是TXOUTCLK的频率与USER_CLK相同。

在这里插入图片描述

图10 时钟和复位相关信号连接

  下图是状态信号和控制信号的连接,如果不使用回环模式和掉电模式,需要接地处理。需要把一些状态信号引出,方便后续上板调试时排查问题。

在这里插入图片描述

图11 状态信号和控制信号的连接

  IP的相关信号就讲解完毕了,至于axi_stream输入和输出相关信号,应该也很熟悉了,前文讲解原理时也讲解了时序,不再赘述。

  示例工程在TestBench中例化了两次该模块,即使用了两个高速收发器进行仿真,把高速收发器1的发送通道与高速收发器2的接收通道连接,从而形成数据闭环。

  由于两个模块产生相同数据,在仿真时可以只关注一个收发器的接收和发送通道数据,就能够观察接收和发送数据是否正确。直接运行仿真,添加下图所示模块的信号进行仿真,只需要观察axi_stream信号和部分状态信号即可。

在这里插入图片描述

图12 添加仿真信号

  仿真结果如下所示,两个复位信号的设计与手册中有点区别,gt_reset应该要在reset拉低之前拉低,还是以手册为准比较好,毕竟示例工程也是有坑的,在后面的设计中会看到有些示例工程也存在考虑问题不充分,导致无法正确接收数据的情况。

在这里插入图片描述

图13 整体仿真结果

  等待通道初始化完成之后开始收发数据,放大收发数据部分,如下图所示。粉色信号是发送通道需要发送的数据,而白色信号是接收通道接收到的数据。

  需要注意数据掩码信号s_axi_tx_keep只有在s_axi_tx_last为高电平时才是有效的,其余时间均当成4’hf处理。因此发送的八个数据的所有位都是有效的,与接受到的数据保持一致,证明该IP能够正常收发数据。

在这里插入图片描述

图14 收发数据仿真

  关于模块仿真和IP信号连接的相关内容就讲解完毕了,也体现了RTL视图的重要性,通过RTL视图可以清晰知道模块信号连接,不需要看官方繁杂的代码。

3、Aurora8B10B IP上板测试

  接下来是上板环节,由于板子上普通bank并没有差分时钟,而初始化时钟与drp时钟频率相同,则可以将示例工程的两个时钟合并,都使用100MHz单端时钟。

在这里插入图片描述

图15使用DRP时钟作为初始化时钟

  因为该工程只有单个收发器,如果要上板测试,需要把高速收发器设置为PMA回环模式。由于开发板的复位按键均为低电平,因此需要将两个复位信号取反。

在这里插入图片描述

图16 处理复位和回环信号

  然后综合工程,添加调ILA调试信号,其中tx_data与s_axi_tx_data对应,如下图所示。

在这里插入图片描述

图17 添加调试信号

  对工程布局布线,之后下载到开发板进行调试,ILA抓取发送数据通道的时序如下所示。tx_keep只有在tx_last为高电平的时候才有效,其余时间可以忽视,发送的前两个数据分别为32’h7cdc7cdc和32’hbe6ebe6e。

在这里插入图片描述

图18 发送一帧数据的起始时序

  下图是这帧数据的结束时序,当tx_last为高电平时,tx_keep的值为4’d8,表示最后一个数据只有最高位有效。因此发送的最后两个数据为32’h3ba43ba4和8’h1d。

在这里插入图片描述

图19 发送一帧数据的结束时序

  下图是接收通道接收到图18、19发送的数据,接收到的起始两个数据与图18起始发送的2个数据相同。

在这里插入图片描述

图20 接收一帧数据的起始时序

  下图是接收这一帧数据的结束时序,注意rx_keep图中只有低3位信号,因为最高位始终为高电平,在生成ILA时被忽略了。因此接收到最后两个数据为32’h3ba43ba4和8’h1d,与图19发送数据保持一致,证明IP收发数据时序没有问题。

在这里插入图片描述

图21 接收一帧数据的结束时序

  由于上板的时候修改了复位的极性和回环模式,所以在使用仿真时需要修改回去,不然无法运行仿真。

  该工程可以通过官方直接获取,也可以在公众号(数字站)回台回复“Aurora8B10B 仿真及上板验证”(不包括引号)直接获取。


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!

一、Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口: 提示用户信息只有确认按钮,无法通过页面元素定位,不关闭窗口无法在页面上做其他操作。 Confirm 弹出窗口: 有确认和取消按钮,该弹出窗口无法用页面元素定…

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定:[class.special]"isSpecial"2. 多个类的绑定:[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…

ElementUI中date-picker组件,怎么把大写月份改为阿拉伯数字月份(例如:一月、二月,改为1月、2月)

要将 Element UI 的 <el-date-picker> 组件中的月份名称从中文大写&#xff08;如 "一月", "二月"&#xff09;更改为阿拉伯数字&#xff08;如 "1月", "2月"&#xff09;&#xff0c;需要进行一些定制化处理。可以通过国际化&a…

测试与开发

目录 按照测试目标分类 界面测试 功能测试 性能测试 可靠性测试 安全性测试 易用性测试 按照执行方式分类&#xff1a; 测试方法 白盒测试 语句覆盖 条件覆盖 判定条件覆盖 条件组合覆盖 路径覆盖 黑盒测试 灰盒测试 按照测试阶段分类 单元测试 集成测试 …

Java24:会话管理 过滤器 监听器

一 会话管理 1.cookie 是一种客户端会话技术&#xff0c;cookie由服务端产生&#xff0c;它是服务器存放在浏览器的一小份数据&#xff0c;浏览器 以后每次访问服务器的时候都会将这小份的数据带到服务器去。 //创建cookie对象 Cookie cookie1new Cookie("…

使用DPO微调大模型Qwen2详解

简介 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback&#xff0c;RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步&#xff0c;它可以确保语言模型的输出符合人类在闲聊或安全性等方面的期望。但传统的RLHF比较复杂&#xff0c;且还需要奖励…

OSPF LSA头部详解

LSA概述 LSA是OSPF的本质 , 对于网工来说能否完成OSPF的排错就是基于OSPF的LSDB掌握程度 . 其中1/2类LAS是负责区域内部的 类似于设备的直连路由 . 加上对端的设备信息 3 类LSA是区域间的 指的是Area0和其他Area的区域间关系 , 设计多区域的初衷就是避免大型OSPF环境LSA太多…

AMD在行动:揭示应用程序跟踪和性能分析的力量

AMD in Action: Unveiling the Power of Application Tracing and Profiling — ROCm Blogs 导言 Rocprof是一款强大的工具&#xff0c;设计用于分析和优化基于AMD ROCm平台上运行的HIP程序的性能&#xff0c;帮助开发者找出并解决性能瓶颈。Rocprof提供了多种性能数据&#x…

生成树协议(思科)

#交换设备 生成树协议&#xff08;STP) 目的 1.理解生成树的原理 理解STP的选举过程 2.会配置STP 为什么只有交换机0的f0/1接口变成了阻塞状态&#xff1f; 在环形的交换网络中&#xff0c;如果所有的接口都通畅&#xff0c;会形成闭回路&#xff0c;造成网路风暴 一、STP…

【优选算法】字符串

一、相关编程题 1.1 最长公共前缀 题目链接 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 编写代码 // 解法一&#xff1a;两两比较 class Solution { public:string longestCommonPrefix(vector<string>& strs) {int k strs[0…

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…

CTF-PWN-kernel-UAF

文章目录 参考slub 分配器kmem_cache_cpukmem_cache_node[ ]冻结和解冻分配释放 fork绑核Kmalloc flag和slub隔离CISCN - 2017 - babydriver检查babtdriver_initstruct cdevalloc_chrdev_regioncdev_initownercdev_add_class_createdevice_create babyopenbabyreleasebabyreadb…

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好&#xff0c;我是你们的好朋友——软件评测专家&#xff0c;同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac&#xff01; 作为一个长期使用macOS的用户&#xff0c;我深知系统运行时间长了&#xff0c;缓存文件、日志、临时文件等都会…

数据库管理-第200期 身边的数据库从业者(20240610)

数据库管理200期 2024-06-10 数据库管理-第200期 身边的数据库从业者&#xff08;20240610&#xff09;首席-薛晓刚院长-施嘉伟邦德-王丁丁强哥-徐小强会长-吴洋灿神-熊灿灿所长-严少安探长-张震总结活动预告 数据库管理-第200期 身边的数据库从业者&#xff08;20240610&#…

**《Linux/Unix系统编程手册》读书笔记24章**

D 24章 进程的创建 425 24.1 fork()、exit()、wait()以及execve()的简介 425 . 系统调用fork()允许父进程创建子进程 . 库函数exit(status)终止进程&#xff0c;将进程占用的所有资源归还内核&#xff0c;交其进行再次分配。库函数exit()位于系统调用_exit()之上。在调用fo…

HTML开发的最主要的三种框架及Python实现

一、介绍 HTML本身是一种标记语言&#xff0c;用于构建网页的结构。然而&#xff0c;当谈到HTML开发框架时&#xff0c;通常指的是那些提供了额外的功能和工具&#xff0c;以帮助开发者更高效地构建网页和应用程序的框架。有三种流行的HTML开发框架&#xff1a; Bootstrap 简介…

基于JSP技术的网络视频播放器

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员界面 用户界…

网络分析(ArcPy)

一.前言 GIS中的网络分析最重要的便是纠正拓扑关系&#xff0c;建立矫正好的网络数据集&#xff0c;再进行网络分析&#xff0c;一般大家都是鼠标在arcgis上点点点&#xff0c;今天说一下Arcpy来解决的方案&#xff0c;对python的要求并不高,具体api参数查询arcgis帮助文档即可…

渗透测试模拟实战(二)-BlueCMS平台

渗透测试 渗透测试是维护网络安全的重要组成部分&#xff0c;可以帮助组织识别并修复潜在的安全漏洞&#xff0c;减少被恶意攻击的风险。然而&#xff0c;进行渗透测试时必须遵守法律和道德规范&#xff0c;确保所有活动都在授权范围内进行。 环境部署&#xff1a; study2016、…

逆序队专题

逆序对的定义是&#xff0c;在一个数组中&#xff0c;对于下标 ( i ) 和 ( j )&#xff08;其中 ( i < j )&#xff09;&#xff0c;如果 ( a[i] > a[j] )&#xff0c;则称 ((a[i], a[j])) 为数组的一个逆序对。 换句话说&#xff0c;逆序对就是在数组中前面的元素大于后…