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.mzph.cn/pingmian/25813.shtml

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

相关文章

基于STM32开发的智能农业监控系统

目录 引言环境准备智能农业监控系统基础代码实现:实现智能农业监控系统 4.1 土壤湿度传感器数据读取4.2 温湿度传感器数据读取4.3 水泵与风扇控制4.4 用户界面与数据可视化应用场景:农业环境监测与管理问题解决方案与优化收尾与总结 1. 引言 随着智能…

Map深度学习

Map Map是一个键值对的集合,和object类似,Map作为构造函数,可以通过全局对象获取到。需要通过new操作创建实例对象,直接调用会报错。Map构造函数接受一个iterable类型的函数,用来初始化Map。 var m new Map([[1, &qu…

央视频官方出品,AI高考智友助你成就高考梦想

大家好,我是小麦。今天分享一款由央视频官方出品的AI工具套件,不仅支持直接使用,同时还具备了开发能力,是一款非常不错的AI产品工具,该软件的名称叫做扣子。 扣子是新一代 AI 应用开发平台。无论你是否有编程基础&…

4000亿薪酬被驳回!马斯克再次讨薪

特斯拉CEO埃隆马斯克的一笔巨额财产,将在数日后的特斯拉股东大会上,由股东投票决定何去何从。 事情是这样的。 3.5研究测试:hujiaoai.cn 4研究测试:askmanyai.cn Claude-3研究测试:hiclaude3.com 2018年,特…

linux的持续性学习

安装php 第一步:配置yum源 第二步:下载php。 yum install php php-gd php-fpm php-mysql -y 第三步:启动php。 systemctl start php-fpm 第四步:检查php是否启动 lsof -i :9000 计划任务 作用&am…

智能水位监测识别报警摄像机:保障水域安全的重要利器

随着城市化进程的加速和气候变化的影响,对水域安全的关注日益增加。为了及时监测水位变化并采取相应措施,智能水位监测识别报警摄像机应运而生。本文将介绍这一创新技术的应用和优势。 传统的水位监测方法通常依赖于传感器,但其存在着安装位置…

java+Vue +Spring boot技术开发的UWB高精度定位技术系统源码 uwb定位系统+基站定位

javaVue Spring boot技术开发的UWB高精度定位技术系统源码 uwb定位系统基站定位 系统采用UWB高精度定位技术,可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术,目前应用主要聚焦在室内高精确定位,例如在工业自动…

MySQL限制登陆失败次数配置

目录 一、限制登陆策略 1、Windows 2、Linux 一、限制登陆策略 1、Windows 1)安装插件 登录MySQL数据库 mysql -u root -p 执行命令安装插件 #限制登陆失败次数插件 install plugin CONNECTION_CONTROL soname connection_control.dll;install plugin CO…

【已解决】FileNotFoundError: [Errno 3] No such file or directory: ‘xxx‘

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

理财-商业保险

目录: 一、保险查询 1、金事通APP 2、商业保险APP 二、平安寿险 1、智能星 2、智富人生A 3、总结 三、保险中的掩藏项 一、保险查询 1、金事通APP 中国银行保险信息技术管理有限公司发挥金融基础设施作用,以“切实让数据多跑路、百姓少跑腿”为…

④-2单细胞学习-cellchat单数据代码补充版(通讯网络)

目录 通讯网络系统分析 ①社会网络分析 1,计算每个细胞群的网络中心性指标 2,识别细胞的信号流模式 ②非负矩阵分解(NMF)识别细胞的通讯模式 1,信号输出细胞的模式识别 2,信号输入细胞的模式识别 信…

codeforce round951 div2

A guess the maximum 问题&#xff1a; 翻译一下就是求所有相邻元素中max - 1的最小值 代码&#xff1a; #include <iostream> #include <algorithm>using namespace std;const int N 5e4;int a[N]; int n;void solve() {cin >> n;int ans 0x3f3f3f3f;…

基础数据结构 -- 堆

1. 简介 堆可以看做是一种特殊的完全二叉树&#xff0c;它满足任意节点的值都大于或小于其子节点的值。 2. 功能 插入元素&#xff1a;插入新元素时&#xff0c;先将元素放至数组末尾&#xff0c;然后通过上浮算法自底向上调整&#xff0c;使堆保持性质。删除堆顶元素&#xff…

Node安装配置

一、下载 Node官网下载地址&#xff1a;https://nodejs.org/en/ 二、安装 双击上面的msi扩展安装包开始安装&#xff0c;基本一路Next就行了 推荐安装目录自定义&#xff0c;最好不要放在C盘 检查安装是否成功 Win R 快捷键&#xff0c;输入 cmd 打开命令窗口输…

基于Java的超市进销存管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java JSP Servlet JavaBean 工具&#xff1a; IDEA/Eclipse、…

Elasticsearch 管道查询语言 ES|QL 现已正式发布

作者&#xff1a;Costin Leau, George Kobar 今天&#xff0c;我们很高兴地宣布 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;全面上市&#xff0c;这是一种从头开始设计的动态语言&#xff0c;用于转换、丰富和简化数据调查。在新的查询引擎的支持下&#xff0c;ES|Q…

大模型训练的艺术:从预训练到增强学习的四阶段之旅

文章目录 大模型训练的艺术&#xff1a;从预训练到增强学习的四阶段之旅1. 预训练阶段&#xff08;Pretraining&#xff09;2. 监督微调阶段&#xff08;Supervised Finetuning, SFT&#xff09;3. 奖励模型训练阶段&#xff08;Reward Modeling&#xff09;4. 增强学习微调阶段…

2- 简易版-日记写作软件(java)-涉及的技术点简述

环境&#xff1a; Ubuntu LinuxJDK1.8Eclipse 项目文件结构&#xff1a; 0. 涉及的技术点 1)view 包&#xff08;GUI&#xff09;&#xff1a; Eclipse SwingEclipse WindowBuilderJFileChooser(用于弹出文件选择对话框&#xff0c;进行文件或目录的选择)FileNameExtension…

【SQLAlChemy】filter过滤条件如何使用?

filter 过滤条件 生成 mock 数据 # 创建 session 对象 session sessionmaker(bindengine)()# 本地生成mock数据 for i in range(6):# 生成随机名字, 长度为4到7个字符name .join(random.choice(string.ascii_letters) for _ in range(random.randint(4, 7)))# 生成随机年龄…

矩阵杯2024 Re wp 前两题

1. packpy UPX壳&#xff0c;但不能直接脱&#xff0c;应该是修改了头文件&#xff08;l_info) 改一下就能脱了 脱完是个elf文件 进IDA看一眼 明显的Py打包标志&#xff0c;用pyinstxtractor解包出来&#xff08;最好用对应的python3.8&#xff09; 可以得到packpy.pyc文件&a…