E4--光纤接口通信测试应用2023-04-17

1.场景

使用两块开发板A和B,通过光纤接口将在A板上ROM中存储的图片数据转发到B板并显示在B板连接的显示屏上,实现光纤接口通信。 具体场景是,由于A735T片上资源有限,因此ROM IP存储了一张1024*600(LVDS屏幕)分辨率图像的1/16,在发送端添加按键,第一次按键按下,将发送这1/16的数据到接收端,第二次按下,发送的则是每个像素取反后的数据。接收端使用RAM IP作为数据缓存实时更新来自光口的数据,读出端则是根据LVDS驱动模块产生的数据请求信号读出,最后达到的效果是发送端按一次按键,接收端切换一张图片。以此例程学习GT收发器、aurora协议,验证光纤接口通信。下面介绍开发与调试步骤。下图为板卡连接图。        

 

 

2.基本概念

        涉及该场景的术语有,serdes接口、GT、Aurora协议,光模块,光纤收发器等。通常SerDes(Serializer-Deserializer)是串行器和解串器的简称,Xilinx公司的许多FPGA已经内置了一个或多个GT收发器,通常二者是等价的,都指的是使用xilinx器件的内部收发器实现通信。需要说明,不同xilinx器件上的GT收发器不同,所支持的最大最小速率也不同,例如7系列的芯片有GTP、GTX、GTZ。serdes接口显著特点有三个,一是较之传统的源同步接口,serdes属于自同步接口,不需要发送时钟;二是使用了较少的引脚,实现了更大速率的传输,很多高速通信协议都是基于此串行协议,是目前高速通信的主流方案;三是通过加重和均衡技术实现了远距离传输,如背板。Aurora 是xilinx提出的一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议,因此在本文的场景中,物理层使用serdes,链路层使用aurora协议实现两个板卡点对点的通信。光纤是光通信的传输介质,通常板卡要与外部设备通信,需要使用光纤收发器进行光电转换,所谓SFP、QSFP等就是光纤收发器的一种。光模块是插接到光纤收发器上的,用于连接光纤和光纤收发器,也有很多封装类型。上述每一个概念都涉及很多东西,后续会继续分享,现在只需将每一个概念和实际的器件对应,知道正在做的事情处于通信架构中什么位置即可。

3.确认硬件环境

①使用两块米联客MA703FA开发板,FPGA芯片是xc7a35tffg484-2。

 ②确认GTP收发器速度

 

截图出自《Artix‐7 FPGAs Data Sheet: DC and AC Switching Characteristics》

参考时钟范围

 ③确认FPGA芯片GTP资源

 

截图出自《7 Series Product Selection Guide》

④确认开发板GT连接情况

截图出自《米联客硬件手册说明、原理图》 

4.GT IP核配置

 ①图中share logic指共享逻辑是包含在内核本身还是示例设计( example design)中,把共享逻辑包含在内核本身的 IP 称为主核,内核中不包含共享逻辑的 IP 称为从核。从核与主核的区别是:我们可以在 Example Design 中修改共享逻辑。这里选择的是主核。此处共享逻辑指的是,IP涉及的多个时钟的来源都可以有几个地方,通过多路选择器选择,共享逻辑就包含了这些多路器的配置。

 

②线速率选择在芯片支持范围内结合自身应用场景,此处选择5G;参考时钟的选择看具体的硬件设计,这里选择125;发送端设计将Rx OFF打勾,接收端设计将Tx OFF打勾;PLL可选PLL0和PLL1,均可;X0Y0代表收发器的位置,与原理图中的设计应该是一致的;Clock Source选择REFCLK1,这是由硬件设计决定的。关于参考时钟GT内部的原理参看第六节。

③该页中数据位宽设计如下图所示,DPR设置为50MHz(与图不对应)。勾选Enable Tx Buffer。

TXDATA 的位宽可以配置成 16/20/32/40 位宽,通过 TX_DATA_WIDTH 、FPGA Interface Width、TX8B10BEN 三个属性设置可以配置成不同的位宽,具体属性如下图所示.

几个位宽之间的关系,总之Aurora 8b10b single lane 4byte选择这个协议并且,External Data width选择为32bit即为IP核的输出位宽。

 

 

 ④本页设置K28.5即可,其余及后面页按照默认配置即可。

5.修改源代码

生成ip核之后,右键选择open in example design,会打开一个新的工程,这是xilinx写好的代码用于光口回环测试与验证。基本的架构是support模块输入参考时钟,生成各个所需时钟,并完成GT ip核、COMMON等模块的例化,数据收发接口也在该模块。Frame_gen模块根据生成的发送端用户时钟和复位产生IP核接收的数据信号和gt0_txcharisk_i信号,用户发送可修改这几个信号即可完成用户数据的发送。本例工程源码

发送端光接口源代码修改,①在topdesign中要改的主要是,IP核生成的复位和时钟信号要供外部使用。②开发板SFP 屏蔽笼的 tx_disable 引脚都默认接了上拉电阻,当为低时代表光接口使能,要使能该信号,否则无法工作;③发送的数据以及k码有效指示,要从外部模块给过来,因此屏蔽掉自产生模块;④添加顶层模块,自己编码并将数据源打造成从rom中来;⑤还有一个时钟要从板卡的晶振上提供或者从时钟IP核提供,注意板卡晶振的信号是单端信号,修改为IBUF,DRPCLK_IN;⑥依据板卡原理图添加约束。

发送端其他代码,主要包含了添加按键检测,添加了ROM IP存储图片数据,可参考Qt生成COE文件,ROM IP的配置。添加了数据生成的逻辑,添加了LED灯用于指示用户时钟的周期以此判断ip核是否正确生成。

接收端光接口源代码修改,①修改drp时钟来源为ip生成的50MHz或者来自晶振的时钟,修改为IBUF的相关硬件描述;②添加关于tx_disable的描述,并使能该信号;③IP核生成的复位和时钟信号要供外部使用,留下接口;④接收的数据以及k码有效指示,也要给到外部模块;④修改check模块生成的几个信号  supprot调用ip核那一段,如下所示;

// .gt0_rxmcommaalignen_in         (gt0_rxmcommaalignen_i),
// .gt0_rxpcommaalignen_in         (gt0_rxpcommaalignen_i),
   .gt0_rxmcommaalignen_in         (1'b1),
   .gt0_rxpcommaalignen_in         (1'b1),

 

 

 // .gt0_data_valid_in              (gt0_track_data_i),
    .gt0_data_valid_in              (1'b1),

 

 

接收端其他模块简介,u1_clk_ip模块产生lvds接口需要的时钟,以及DRP动态重配置时钟;u2_gt模块输入参考时钟接收数据通道以及光收发使能信号完成GT收发器数据及其指示信号的接收;u3_sfp_decode模块完成数据的对齐以及数据解码生成有效数据及其同步信号;u4_ram_ip模块作为数据缓存模块,接收来自光口的信号,并根据lvds屏幕的数据请求读出数据;u5_lvds模块是写好的屏幕驱动模块,可参考LVDS接口LCD驱动测试,将lcd_de信号发送到lvds线上的时间打一拍,保证RGB数据与lcd_de信号是同步的。这是因为等待ram数据两个周期的延迟。

其他重要信号说明,TXCHARISK用于指示TXDATA上的数据是K字符还是常规数据,看到很多资料上都说要发送comma,但是目前没看到应该至少t时间发送以此comma。RXCHARISK信号用于数据对齐,实现并不复杂可参考sfp_decode模块。Txuseclk Rate=line Rate/Internal Data Width,本例中Txuseclk Rate = 5G/20=250M.

6.GT原理简介

目的是为了对GT收发器有一个宏观的认识,清楚代码中的动作是在做哪里的配置,也清楚数据的流向。主要介绍内部结构下图所示为GTP内部的逻辑示意,由四个收发器通道GTPE2_CHANNEL和一个GTPE2_COMMON组成。每路 GTPE2_CHANNEL 有两个子层:PCS(物理编码子层)和 PMA(物理媒体连接子层)。PCS 子层包含 8B/10B 编解码、缓冲区、通道绑定和时钟修正等电路;PMA 层主要进行串并、并串转换、预加重、去加重、串行数据的发送和数据时钟的提取。

 

上图所示,红色框显示了GT参考时钟可以的来源由两个(实际参考时钟还可以来自相邻的GT,这在UG482都有详细),这也是IP和配置中选择REFCLK0还是REFCLK1的原因,这个具体要看原理图的连接情况。在example中,参考时钟经exdes、support在source模块中差分转单端,进入COMMON模块,COMMON模块就是图中绿色部分的原语,例化根据IP核的配置选择PLL0还是1,都可以选。此处需要注意,PLL的前级叫做PLL0_OUTREFCLK,后级叫做PLL0OUTCLK,后级PLL0OUTCLK后面的操作交给了GT IP核,ip核生成了TXOUTCLK和RXOUTCLK,然后example中source文件调用专用mmcm模块生成用户时钟txuseclk2_i(rxuseclk2_i)和GT逻辑时钟txuseclk_i(rxuseclk_i)。 

 7.效果

1/16图

 屏幕显示图

 

 

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

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

相关文章

深拷贝与浅拷贝

目录: 深拷贝与浅拷贝的区别实现深拷贝的方式利用JSON.parse(JSON.stringify())实现深拷贝的局限性cloneDeep与json的对比手写实现cloneDeep 深拷贝与浅拷贝的区别 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。 深拷贝和浅拷贝的示意图大致如下&a…

SpringBoot——Scheduled定时任务

目录 1.静态定时任务 2.动态定时任务 在一些业务场景中,我们需要定义一些任务在我们指定的时间或是每隔一个时间段就自动执行,来作为任务的前提,保证业务的执行。比如:我们需要一个定时任务,每天早上6点执行&#xf…

多通道振弦传感器无线采集采集仪如何开始使用

多通道振弦传感器无线采集采集仪如何开始使用 开始使用 设备电源 VS208~432 可使用内置电池(默认)也可使用外部电池工作。 需要特别注意:严禁内置和外部电池(电源)同时使用,严重时会造成短路起火&#xff0…

靶机精讲之CTF4

主机发现 靶机193 端口扫描 服务扫描 80,25(明确版本)攻击面更大 web渗透 blog是交互式的程序 发现index可进行手动爆破(地址包含) http://192.168.10.193/index.html?page../../../../../../../../etc/passwd 无发…

【数据挖掘与商务智能决策】第八章 K近邻算法

第八章 K近邻算法 1.K近邻算法简单代码演示 import pandas as pd df pd.read_excel(葡萄酒.xlsx) df原始样本酒精含量(%)苹果酸含量(%)分类0样本15201样本26102样本34103样本48314样本51021 # 特征变量和目标变量的切分 X_train df[[酒精含量(%),苹果酸含量(%)]] y_train …

PHP实现以函数的方式计算阶乘,使用函数输入数值逆序输出的两个代码程序

目录 前言 一、实现以函数的方式计算阶乘 1.1运行流程(思想) 1.2代码段 1.3运行截图 二、使用函数输入3个数求和,并以表单形式输出 2.1运行流程(思想) 2.2代码段 2.3运行截图 前言 1.因多重原因,…

【C++】模板进阶--非类型模板参数模板特化及分离编译

文章目录一、非类型模板参数二、模板的特化1.模板特化的概念2.函数模板的特化3.类模板的特化3.1 全特化3.2 偏特化4.类模板特化应用示例三、模板的分离编译四、模板总结一、非类型模板参数 模板参数分为类型形参与非类型形参,其中,类型形参即出现在模板…

Spring启动及Bean实例化过程来看经典扩展接口

目录 一、Spring启动及Bean实例化过程 二、分析其对应经典扩展接口 三、对开发的指导意义 备注:以下总结只是一些基本的总结思路,具体每个扩展接口的应用后续进行分析总结。 一、Spring启动及Bean实例化过程 Spring启动及Bean实例化的过程&#xff0…

CSS实现三角形的四种方法

方法一&#xff1a;使用 border (常见) 【解释】不设置宽高&#xff0c;用边框大小控制三角型大小 【分解步骤】 设置一个div不设宽高 【示例】 <style>#triangle{width: 0;height: 0;border: 100px solid;border-color: orangered skyblue gold yellowgreen;} </s…

Python第三方库安装

看见更大的Python世界 Python社区PyPI The Python Package Index PyPI: Python Package Index PSF维护的展示全球Python计算生态的主站 学会检索并利用PyPI&#xff0c;找到合适的第三方库开发程序 实例&#xff1a;开发与区块链相关的程序 第1步&#xff1a;在pypi.org…

第01章_Java语言概述

第01章_Java语言概述 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 2. 抽丝剥茧话Java 2.1 当前大学生就业形势 麦可思研究院…

fMRI研究 | 社交情境下的混合情绪

导读 背景&#xff1a;神经科学通常都是单独研究各种情绪&#xff0c;而混合的情绪状态&#xff08;例如愉悦和厌恶、悲伤和快乐的共存&#xff09;在日常生活中很常见。心理生理学和行为学证据表明&#xff0c;混合情绪可能具有不同于其组成情绪的反应特征。然而&#xff0c;…

PHP快速入门02-PHP语言基础

文章目录前言一、 数据类型1.1 String&#xff08;字符串&#xff09;1.2 Integer&#xff08;整型&#xff09;1.3 Float&#xff08;浮点型&#xff09;1.4 Boolean&#xff08;布尔型&#xff09;1.5 Array&#xff08;数组&#xff09;1.6 Object&#xff08;对象&#xff…

重感知还是重地图?其实无需选择

近来&#xff0c;关于自动驾驶应该重感知还是重地图是个热点话题&#xff0c;很多重量级车厂、自动驾驶供应商都开始提出重感知轻地图的方案&#xff0c;并承诺很快能发布出对应的产品。业界也出现了高精地图已“死”等类似的言论。 一时之间&#xff0c;似乎轻地图已经成为了…

SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解、如何添加锁解决缓存击穿问题?分布式情况下如何添加分布式锁

文章目录1、步骤2、具体过程1、引入pom依赖2、修改配置文件3、单元测试4、测试结果3、redis运行情况4、项目中实际应用5、加锁解决缓存击穿问题代码一&#xff08;存在问题&#xff09;代码二&#xff08;问题解决&#xff09;6、新问题7、分布式锁1、步骤 前提条件&#xff1…

Attention is all your need——Transformer论文

摘要 此序列转录模型仅仅依赖于注意力机制&#xff0c;而不使用循环或者是卷积&#xff0c;将循环全部换成了multi-headed self- attention 介绍 RNN的特点、并行程度低。 Attention在RNN上的应用。 引入注意力机制&#xff0c;提高并行度。 背景 使用卷积对长的序列难以…

3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力 不管您想搭建桌面、WEB或者移动端APP应用&#xff0c;技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构&#xff0c;同时&#xff0c;一批可信任的工业领域3D技术专家也将为您提供技术支持服务。 如果您的客户期望有一种在多个…

第三十一天 Linux介绍和基础命令

目录 1.前言 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.Linux简介 2.1 主流操作系统 2.2 Linux发展历史 3. Linux安装 3.1 安装方式介绍 3.2 安装VMware 3.3 安装Linux 3.4 网卡设置 3.5 安装SSH连接工具 3.6 Linux目录结构 4.Linux常用命令…

DHTMLX Gantt入门使用教程【引入】:如何开始使用 dhtmlxGantt

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

Excel玩转自然语言查询

ChatGPT火出圈&#xff0c;人类被人工智能替代又成为热门话题。有人欢喜&#xff0c;有人忧&#xff0c;也有人不以为意&#xff0c;觉得离自己工作远着呢&#xff0c;比如现在是用Excel做报表&#xff0c;有本事你动动嘴就直接把Excel里面的数据查询出来啊。 你可别说&#xf…