当前位置: 首页 > news >正文

FPGA高速设计之Aurora64B/66B的应用与不足的修正

FPGA高速设计之Aurora64B/66B的应用与不足的修正

Aurora IP协议的特点

        首先基于网上找到的一些资料,来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出,是由Xilinx提供的一个开源、免费的链路层串行传输通信协议,可扩展且轻量,可以实现点到点的串行数据传输。Aurora协议具有实现高性能数据传输系统的高效率和简单易用的特点。具体如下:

        可扩展,轻量级:部署快捷,可在一个或多个高速串行通道上点对点传输;

        链路层协议:独立于网络层,可直接传输工业标准协议封装的数据,例如TCP/IP、UDP等;

        短距通信:针对芯片间和板间通信应用,通过标准光接口可用于设备间通信;

        开源:免费使用和共享,可基于该协议标准开发独立应用。

        Aurora 协议针对 FPGA 间的高速数据传输,能够为物理层提供透明接口。与 RapidIO、PCIE 等协议只支持固定的传输速率不同,Aurora 协议的传输速率可以进行灵活配置,支持速度为 0.75~13.1 Gbps,并可随着 FPGA 及其内嵌高速串行收发器的发展而进一步提高,可通过通道绑定的方法实现更高的数据传输速度。

        Aurora 协议支持全双工和单工通道,使用的逻辑资源非常少,具有高带宽、无线帧尺寸和灵活组帧的特点。通过调用 Xilinx 公司的 Aurora IP  核,用户只需处理简单的用户接口即可,可以方便地实现器件间的单通道或多通道数据通信。

        Aurora 总线协议包括物理层和数据链路层两层,最初采用了 8B/10B 编码方式,后续为了提高总线带宽利用率,Xilinx 公司于 2008年又采用了 64B/66B 编码。为了区分两种编码方式,采用 8B/10B 编码方式的 Aurora协议称为 Aurora 8B/10B;采用 64B/66B 编码方式的 Aurora 协议称为 Aurora 64B/66B 。

        Aurora协议最大的优势即为开源和共享。Aurota协议为用户提供了一个透明的物理层接口,支持任何上层私有或符合工业标准的协议,如TCP/IP、以太网等,使得采用Aurora协议的高速串行总线接口能够在最短时间内与现有用户设计集成,而不大幅改动用户应用的设计。此外,Aurora协议也具有实现简单、占用物理资源少、通信效率高、速率可灵活配置等优点。

        Aurora协议仍然具有不完善之处,如不具备地址机制,不支持通道切换功能,未规定数据有效载荷内校正等。Aurora总线的应用领域目前仍然局限于FPGA相关的通信,应用范围仍然不够广泛。

Aurora IP协议与应用

Aurora协议分为8B/10B版本(SP002)和64B/66B版本(SP011),主要介绍了五个方面的内容:

物理层:针对信号电平、时钟编码、编码和符号代码等进行介绍。

链路层:描述了在传输过程中如何标记用户协议数据单元(user PDUs)的整个过程,以及在传输期间如何在数据中插入数据暂停,以及如何管理发射机和接收机之间的时钟速率差异。

初始化和错误处理:定义了为跨单通道和多通道通信而准备通道Partners*所需的步骤。它还描述了通道Partners在通道中出现比特错误时应该如何处理。

数据分割:描述了数据如何被映射到一条由多个串行数据线组成的数据通道上。

流量控制:Aurora协议定义了链路层的流量控制机制,并提供了转发更高层用户流量控制消息的加速机制。

        Aurora是一种简单,可扩展的开放式协议,支持下述或更多场景的应用:

        芯片间通信:使用Aurora协议的通信总线为高速串行总线,相对传统IC间的并行总线,可大大减少硬件设计中的布线复杂度和布线层数;

        板间通信:Aurora协议支持8B/10B编码或更高效率的64B/66B编码,使的Aurora可以与许多现有标准兼容。另外,aurora的数据传输率和通道个数是可自定义的,用户使用更加方便;

        单工模式:Aurora协议支持单工模式,在不需要全双工通信的场景可节省更多布线资源。

        ASIC设计:Aurora协议不仅仅应用于FPGA设计,还支持ASIC设计。Aurora的简单和开源特性使得它在FPGA和ASIC中都可以占用更小的资源和成本。

Aurora IP的配置

下图为vivado2018.3 KU+系列芯片中Aurora 64B/66B(不包括DRP重配置选项),IP的选项卡比较简洁明了,下面讲解下各个选项卡的作用。

  1. GT Type:KU+系列芯片拥有GTH,GTY两种GT口,其中GTY的速率较高32.75Gb/s,GTH仅有16.375Gb/s;
  2. Line Rate:高速收发器线速率,速率影响了高速收发器使用CPLL还是QPLL的输出作为参考时钟信号;
  3. Column Used:选择某一列GT口进行数据传输,与实际的FPGA的GT口位置相关,当前仅有left;
  4. Lanes:可以选择1~8lane进行高速传输,与器件相关;
  5. Start GT Quad/Lane:选择Quad与lane,当前器件2个Quad,8条lane;
  6. GT Refclk Selection:选择哪个Quad的时钟作为参考钟;
  7. GT Refclk MHz:高速收发器参考时钟频率;
  8. INIT clk:初始化时钟,对时钟来源没有要求,可以和DRP共用同一时钟;
  9. Generate Aurora without GT:不使用GT资源,只使用逻辑资源生成Aurora协议;
  10. Dataflow Mode:选择该IP工作模式,可选有仅发送、仅接收、收发单工,全双工,选择全双工模式可以进行环回实验;
  11. Interface:用户接口类型,Framing/Streaming前文分析过该IP支持两种用户接口,本文选择使用framing,即axi-stream数据格式 ;
  12. Flow Control:流量控制设置,支持两种流控模式,,简单情况下不使用流量控制传输;
  13. Little Endian Support:小端对齐。不勾选该选项时,图中数据信号的最高位是0,表示先传输高字节数据,采用大端对齐。勾选该选项后,数据位会颠倒,变成小端对齐,FPGA内部一般使用大端对齐,保持默认即可。

Aurora IP的第二个选项卡则为shared logic,可以将QPLL,时钟buffer等包含在IP中还是示例设计中,此处建议包含在example design,这样我们可以从示例工程学习到关键的时钟如何处理。

生成IP后,可在source-IP栏右键选择open example design。Xilinx官方的IP除了有配套手册外,还都提供了示例工程。通过手册得知IP的工作原理,通过示例工程去验证IP功能,然后在example design的基础上构建自己的代码。

Aurora IP的example design

打开示例工程后,会有一个工程与一个仿真,截图如下:

其中aurora_64b66b_0_exdes.v是一个完整收发模块,包含了协议层(aurora_64b66b_0_support.v),跨时钟同步设计(aurora_64b66b_0_cdc_sync.v),数据生成(aurora_64b66b_0_frame_gen.v)与检查(aurora_64b66b_0_frame_check.v),示例工程在TestBench中例化了两次该模块,即使用了两个高速收发器进行仿真,把高速收发器1的发送通道与高速收发器2的接收通道连接,从而形成数据闭环。

  由于两个模块产生相同数据,在仿真时可以只关注一个收发器的接收和发送通道数据,就能够观察接收和发送数据是否正确,也可以第二个aurora中的GT设置为收发直连,形成数据闭环。直接运行仿真,可以查看如下的关键信号。

找到axis相关的tx,rx信号data,valid,ready,keep,last,可以看到信号收发正确,还有两个关键信号是channel_up与lane_up当这俩信号被拉低,表明GT初始化成功,才能看到数据的收发,仿真持续时间为34.8us。

Aurora IP的问题

当前在两片FPGA进行aurora通信时,我们采用了如上图的配置,RX侧user_clk=156.25MHz,在axis-stream模式下我们一般要使用一个异步FIFO来跨时钟域,问题来了user_clk=156.25MHz,但我们使用数据的频率仅为100MHz,这样无论多大的FIFO都会发生数据丢失的行为,因为我们无法利用axis_ready信号告诉前级,数据即将溢出,即aurora协议无法接收rx侧的axis_ready信号,从而产生接收数据丢失的风险。此处有两种办法:第一种是我们在接收信号的板子上引出一根ready信号,告诉前级数据不要再发数据了,因为axis_valid &&axis_ready同步拉高,前级的aurora才会发数,这样就相当于人为控制数据的收发,比较灵活。需要注意的是:在设计ready信号时需要关注从后级传到前级的时延;第二种方式则为Flow Control模式,可以通过NFC控制流量,让GT口暂停发数,最多可设置为256拍后才发数据,此方法适用于可以预知下级接收的FIFO什么时候会溢出,然后通过计数暂停发数。

相关文章:

FPGA高速设计之Aurora64B/66B的应用与不足的修正

FPGA高速设计之Aurora64B/66B的应用与不足的修正 Aurora IP协议的特点 首先基于网上找到的一些资料,来讲述下Aurora高速协议的特点与相关的应用。Aurora 协议在 2002 年由 Xilinx 公司首次提出,是由Xilinx提供的一个开源、免费的链路层串行传输通信协议…...

如何通过PHP脚本自动推送WordPress文章至百度站长平台

想要提高网站在百度搜索中的曝光度?百度站长平台提供了一个非常方便的API接口,允许网站自动将新发布的内容推送至百度以加快收录。本文将带您一步步实现这一功能,帮助您的WordPress站点实现每日自动推送最新文章的URL至百度站长平台。 1. 前提条件 确保您有一个已安装并运行…...

ORA-01092 ORA-14695 ORA-38301

文章目录 前言一、MAX_STRING_SIZE--12C 新特性扩展数据类型 varchar2(32767)二、恢复操作1.尝试恢复MAX_STRING_SIZE参数为默认值2.在upgrade模式下执行utl32k.sql 前言 今天客户发来一个内部测试库数据库启动截图报错,描述是“上午出现服务卡顿,然后重…...

upload-labs通关练习---更新到15关

目录 环境搭建 第一关 方法一 修改文件类型 方法二 前端禁用JS绕过 第二关 方法一 修改Content-Type类型 方法二 修改上传文件类型 第三关 第四关 第五关 方法一 Windows大小写绕过 方法二 利用.user.ini 第六关 第七关 第八关 第九关 第十关 第十一关 第十二…...

WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项

Prism 提供了更多的注册方式,适应不同的需求和场景。下面我会全面列出 IContainerRegistry 提供的所有常见注册方式,并附带相应的示例。1. 注册单例(Singleton) 注册单例类型服务,整个应用生命周期内只会创建一个实例&…...

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式,低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心,可用于管理低功耗模式的进入和退出,控制时钟源、PLL、电源开…...

Windows 局域网IP扫描工具:IPScaner 轻量免安装

IPScaner是一款258KB的工具,具备快捷修改IP、批量扫描、地址计算等功能,自动识别本机IP网段,快速查看IP使用情况,适用于监控维护、企业IT运维等场 软件功能介绍: 1)快捷修改本地IP、IP批量扫描、IP地址计算…...

HTML的浮动与定位

1. 浮动 浮动可以使一个元素脱离自己原本的位置,并在父元素的内容区中向左或向右移动,直到碰到父元素内容区的边界或者其它浮动元素为止。 值描述left元素向左浮动right元素向右浮动 普通文档流:浏览器在默认情况下规定一个块元素在父元素…...

【网络安全 | 漏洞挖掘】我如何通过路径遍历实现账户接管

未经许可,不得转载。 文章目录 不久前,我发现了一个我在高中时非常常用的知名应用程序,它在Intigriti上是一个私有程序,本文称之为REDACTED。 我开始参与REDACTED的漏洞赏金计划,这个应用程序在我开始进行黑客攻击之前我已经非常熟悉了。最初我并没有抱太高的期望。 我首…...

DB-GPT系列(四):DB-GPT六大基础应用场景part1

一、基础问答 进入DB-GPT后,再在线对话默认的基础功能就是对话功能。这里我们可以和使用通义千问、文心一言等在线大模型类似的方法, 来和DB-GPT进行对话。 但是值得注意的是,DB-GPT的输出结果是在内置提示词基础之上进行的回答&#xff0c…...

SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

目录 一、服务拆分原则 二、服务拆分示例 1. 案例需求 2. 案例要求 3. 导入SQL语句 4. 实现思路 4.1. 创建父工程 cloud-demo 管理依赖 依赖导入思路 4.2. 创建子工程 order-servic 4.3. 创建子工程 user-servic 4.4. 创建 cloud_order 数据库和表并插入数据 4.5. …...

Rust 建造者模式

在DDD中,DTO(数据传输对象)->BO(业务对象)、BO(业务对象)->PO(持久化对象,有的叫DO,即和数据表映射的实体)等等情况要做转换,这里提供以下转换方式 1、from或者try_from trait实现对象转换 需要转换对象满足接收对象的所有…...

ANN DNN CNN SNN

这些缩写代表了不同类型的人工神经网络: • ANN(Artificial Neural Network):人工神经网络,是模仿人脑神经元之间连接和交互方式的计算模型。它由节点(或称为“神经元”)组成的网络,…...

go语言进阶之并发模式

并发模式 并发模式是指在程序设计中同时处理多个任务或进程的方式,以提高效率和响应性 for select循环模式 for select循环模式通常用于处理并发操作,尤其是在需要等待多个通道时。 select的执行过程主要是以下几步 阻塞等待,直到其中一…...

Spring Cloud LoadBalancer:负载均衡的服务调用

在微服务系统中,有时候一个服务会部署多个实例,在我们调用这类实例时,如何实现负载均衡的调用呢?这时候就要用到Spring Cloud的负载均衡组件LoadBalancer了 LoadBalancer简介 LoadBalancer是Spring Cloud官方提供的负载均衡组件,通过它能使客户端在多个服务实例之间分发传…...

微信小程序之轮播图

效果图 实现 <swiper class"banner" indicator-dots"true" indicator-color"rgba(255,255,255,1)" indicator-active-color"#ff0000" autoplay"true" interval"100" circular"true"><swi…...

羲和数据集收集器1.3

为了实现所要求的功能,我们需要进一步完善代码,使其能够处理多种格式的输入文件,并生成符合要求的 JSON 格式的输出文件。具体来说,我们完善了以下内容: 增强 extract_qa_pairs_from_content 函数:使其能够识别和处理不同格式的 QA 对。 确保输出文件的格式正确:每个 Q…...

UE--IOS打包失败 AutomationTool exiting with ExitCode=9 (9)

[Remote] Executing build UATHelper: 打包 (IOS): Setting up bundled DotNet SDK UATHelper: 打包 (IOS): /Users/zyh/UE5/Builds/DESKTOP-FKKSVFQ/Y/UE/UE_5.2/Engine/Build/BatchFiles/Mac/../../../Binaries/ThirdParty/DotNet/6.0.302/mac-x64 UATHelper: 打包 (IOS)…...

第8章利用CSS制作导航菜单

8.1 水平顶部导航栏 水平菜单导航栏是应用范围最广的网站导航设计&#xff0c;一般位于页面顶部。它适用性强&#xff0c;几乎适用于所有类型的网站&#xff0c;且设计难度低。若导航过于普通&#xff0c;无法承载复杂信息结构&#xff0c;在内容模块较多时&#xff0c;则需结…...

UNIX网络编程-TCP套接字编程

概述 TCP客户端/服务器程序示例是执行如下步骤的一个回射服务器&#xff1a; 客户端从标准输入读入一行文本&#xff0c;并写给服务器。服务器从网络输入读入这行文本&#xff0c;并回射给客户端。客户端从网络输入读入这行回射文本&#xff0c;并显示在标准输出上。 TCP服务器…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...