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

news2024/11/26 13:54:49

  前文讲解了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.coloradmin.cn/o/1808835.html

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

相关文章

【Python】成功解决SyntaxError: invalid syntax

【Python】成功解决SyntaxError: invalid syntax 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕&am…

cuda学习笔记(3)

一 CPU和GPU的区别 衡量处理器优劣的重要的两个指标: 延时性:同量的数据,所需要的处理时间 吞吐性:处理速度不快,但是每次处理量很大 GPU设计理念是最大化吞吐量,使用很小的控制单元对应很小的内存 cpu的设…

类和对象(下+)_const成员、初始化列表、友元、匿名对象

类和对象(下) 文章目录 类和对象(下)前言一、const成员二、友元1.友元函数2.友元类 三、初始化列表四、explicit关键字五、匿名对象总结 前言 static成员、内部类、const成员、初始化列表、友元、匿名对象 一、const成员 将cons…

cleanmymac清理时要一直输入密码 CleanMyMac X一直提示输入密码的解决方案

CleanMyMac X是一款专业的Mac清理软件,可智能清理mac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件,修复系统漏洞,一键扫描和优化Mac系统。 在使用Cle…

LeetCode | 2022.将一维数组转变为二维数组

这道题思路比较简单,比较容易想到的是先判断m和n构成的二维数组在形式上是否可以由原来的数组转变而成,若不可以返回空数组,若可以直接用一个二重循环遍历一遍即可,时间复杂度 O ( n 2 ) O(n^2) O(n2) class Solution(object):de…

数据结构初阶 · 链式二叉树的部分问题

目录 前言: 1 链式二叉树的创建 2 前序 中序 后序遍历 3 树的节点个数 4 树的高度 5 树的叶子节点个数 6 树的第K层节点个数 前言: 链式二叉树我们在C语言阶段已经实现了,这里介绍的是涉及到的部分问题,比如求树的高度&am…

三、安全工程练习题(CISSP)

1.三、安全工程练习题(CISSP)

找素数第二、三种方法

文章目录 第一种 :使用标签第二种:本质是方法的分装 第一种 :使用标签 没有使用信号量。break和continue作用范围只是最近的循环,无法控制外部循环。 此时使用标签 对外部循环进行操作。 package com.zhang; /* 找素数 第二种方…

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

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

【C语言】03.分支结构

本文用以介绍分支结构,主要的实现方式为if语句和switch语句。 一、if语句 1.1 if语句 if (表达式)语句表达式为真则执行语句,为假就不执行。在C语言中,0表示假,非0表示真.下图表示if的执行过程: 1.2 else语句 当…

数字孪生概念、数字孪生技术架构、数字孪生应用场景,深度长文学习

一、数字孪生起源与发展 1.1 数字孪生产生背景 数字孪生的概念最初由Grieves教授于2003年在美国密歇根大学的产品全生命周期管理课程上提出,并被定义为三维模型,包括实体产品、虚拟产品以及二者间的连接,如下图所示: 2011年&…

32位和64位的Windows7均不支持UEFI启动方式?试试看!

前言 今天小白突然想起:自己已经接近8年没有安装过32位的Windows系统了,这8年装的上百台电脑都是用的64位Windows。 今天 闲来无事 嗯……应该算是有小伙伴提出了个问题: 这位小伙伴表示:自己无论安装32位还是64位的Windows7都…

OSPF LSA头部详解

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

14-特殊函数——静态函数、递归函数、函数指针、回调函数、内联函数、变参函数

14-特殊函数——静态函数、递归函数、函数指针、回调函数、内联函数、变参函数 文章目录 14-特殊函数——静态函数、递归函数、函数指针、回调函数、内联函数、变参函数一、静态函数1.1 语法 二、递归函数2.1 示例:输出n个自然数2.2 内存变化 三、函数指针四、指针函…

C++必修:探索C++的内存管理

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. C/C的内存分布 我们首先来看一段代码及其相关问题 int globalVar 1; static…

软件测试--Mysql快速入门

文章目录 软件测试-mysql快速入门sql主要划分mysql常用的数据类型sql基本操作常用字段的约束:连接查询mysql内置函数存储过程视图事务索引 软件测试-mysql快速入门 sql主要划分 sql语言主要分为: DQL:数据查询语言,用于对数据进…

作业-day-240607

思维导图 C编程 要求: 搭建一个货币的场景,创建一个名为 RMB 的类,该类具有整型私有成员变量 yuan(元)、jiao(角)和 fen(分),并且具有以下功能:…

---java 抽象类 和 接口---

抽象类 再面向对对象的语言中,所以的对象都是通过类来描述的,但如果这个类无法准确的描述对象的 话,那么就可以把这个类设置为抽象类。 实例 这里用到abstract修饰,表示这个类或方法是抽象方法 因为会重写motifs里的show方法…

某药监局后缀(第一部分)

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载&#xff…

微服务之熔断器

1、高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因 或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会…