百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

(LVDS差分信号简单处理)5. 使用OSERDES发送高速串行数据

bigegpt 2024-08-10 12:12 5 浏览

这一篇继续讲解OSERDES相关内容;OSERDES实现并串转换,只需要管发送并不需要管接收到的数据如何,所以它的操作相对于ISERDES来说简单;

本文将介绍OSERDES的IP核生成,OSERDES原语介绍,OSERDES级联使用以及ISERDES,Idelay接收串行数据的几种方法。


与上一篇文章的结构对应,这篇也将从可视化的SelectIO的设置讲起,从简单到复杂;

在IP Catalog里面找到"SelectIO",接下来跟着这般操作:

数据总线设置

参数的意义如下:

  • Interface Template: 接口模板,本次数据传输并不符合预设的协议,所以选择Custom
  • Data BUS Direction:这一次需要发送数据,选择Output
  • Data Rate: 数据总线是SDR还是DDR,DDR内容可以看(LVDS差分信号简单处理)2. DDR信号的处理
  • Serialization Factor: 串化因子,也就是IP核的输入并行数据位宽;SDR Rate:可设为2,3,4,5,6,7,8;DDR Rate:可设为4,6,8,10,14;
  • External Data Width: 外部输出数据的位宽,默认设1
  • I/O signaling:设置差分还是单端以及IO电压标准

时钟设置

这一部分的内容可以参考使用ISERDES接收高速串行数据,内容一样;

数据和延时设置

这个地方不做设置的原因是因为,我们在测试ISERDES和OSERDES,需要排除使用Idelay的影响,因此这个地方不做任何延时;


最后一键OK,OSERDES的相关IP核就生成好了。从IP核最底层的verilog文件可以看到,它的实现跟OSERDES2原语有关,从UG471我们可以知道OSERDES2的相关内容;

首先关注OSEDES2的属性内容,它的重要属性决定的因素如下:

  • DATA_RATE_OQ:决定OQ端口输出的数据速率,可选SDR或DDR;
  • DATA_RATE_TQ:决定TQ端口输出的数据速率,可选BUF, SDR或DDR;
  • DATA_WIDTH: 根据"DATA_RATE_OQ"确定具体数值;SDR Rate:可设为2,3,4,5,6,7,8;DDR Rate:可设为4,6,8,10,14;
  • SERDES_MODE:确定OSERDES是主模块还是从模块,这跟OSERDES级联使用有关,具体内容请看下面的内容;
  • TRISTATE_WIDTH:这跟"DATA_RATE_TQ"有关,大多情况都设为1,它的具体设置关系如下:

TRISTATE_WIDTH设置参数表 UG471 Table 3-8


OSERDES原语图 UG471 Figure 3-14

OSERDES原语的端口定义如上图所示,其中重要的端口设置如下:

  • OQ:串行数据输出,直接到IOB,也就是直接连接到IOBUF,ODELAY等特殊结构
  • SHIFTOUT1/2:级联时使用,详见下文
  • CLK:高速时钟,串行数据时钟输入
  • CLKDIV:慢速时钟,并行数据时钟输入
  • D1 to D8:并行数据输入,当并行数据多于8bit不超过14bit,可以使用OSERDES级联,级联的使用方法详见下文
  • OCE: 串行数据时钟使能信号输出
  • RST: 高复位信号输入
  • SHIFTIN1/2: 级联时使用,详见下文

其他没有提到的输入信号可以设为0,输出信号可以不用连接;


CLKDIV与CLK的联系:

假设接收的串行数据时钟为256MHz,串化因子为8,则CLKDIV为32MHz;

SDR:CLKDIV = CLK/DATA_WIDTH

DDR: CLKDIV = 2 * CLK/DATA_WIDTH

注意CLK和CLKDIV不一定是相位对齐的;


OSERDES2数据时延:

虽然与ISERDES2相比,没有"Mode"属性设置,但CLK和CLKDIV不一定是相位对齐的,它的输出数据相对于输入数据也有相应的时延,具体的延时与DATA_WIDTH,DATA_RATE_OQ,DATA_RATE_TQ有关;关系如下:

OSERDES时延参数对照表 UG471 Table 3-11


以最简单的2:1 SDR串化为例:

2:1 SDR UG471 Figure 3-16

  1. Event1时,数据从FPGA其他部分逻辑传到OSERDES2的D1-2端口
  2. Event2时,数据在CLKDIV上升沿被OSERDES2采样
  3. Event3时,OQ端口产生相应的输出串行数据

所以,是不是也可以推出下图Event所发生的事情呢?条件为8:1 DDR。

8:1 DDR UG471 Figure 3-17


OSERDES级联使用:

当并行数据多于8bit不超过14bit时,可以采用两个OSERDES2级联的使用方法,示意图如下,

扩展并行输入数据位宽 UG471 Figure 3-15

上图已经示意的比较清楚,操作步骤可分为三步。

  1. 两个OSERDES2的"SERDES_MODE"设置,一个需要设为"MASTER",另一个设为"SLAVE";
  2. 将"SLAVE"的"SHIFTOUT1/2"连接至"MASTER"的"SHIFTIN1/2";
  3. "MASTER"的D1-D8输入并行数据的低8位,"SLAVE"的D3-D8可以连接输入并行数据的高6位;


我在调试一款AD的过程中接触到了SelectIO中的相关知识,由表及里,看过一些I/OSERDES接收数据的调节方法:

  1. 首先让发送方发送特殊字符,接收方接收数据转为并行数据,调节Idelay的参数,直到出现稳定的结果(不一定是发送的特殊字符),Idelay参数记为C1;
  2. 继续调节Idelay的参数,直到结果不再稳定,Idelay参数记为C2;
  3. Idelay参数设为(C1+C2)/2 ,此时接收的并行数据稳定为一个定值;
  4. 如果稳定的输出结果不是约定的特殊字符,调节Bitslip移动字符的边界,直至输出结果为约定的特殊字符;
  5. 利用其他的通信方式或方法,告知发送方可以正常发送数据


更有甚者直接使用ISERDES,Idelay调节CLK,

  1. 将CLK作为串行数据,使用ISERDES转为并行数据后,调节Idelay;
  2. 记录最后一次并行数据全为0的时候的Idelay参数C1;
  3. 继续调节,记录第一次并行数据全为1的时候的Idelay参数C2;
  4. Idelay参数设为(C1+C2)/2 ,此时CLK的时钟对应数据的位置裕量充足;


仿真结果可以参看使用ISERDES接收高速串行数据,结果一样


总结:

  1. OSERDES2可以使用SelectIO IP核设置简化原语设置流程;但OSERDES2原语设置会更加精细。
  2. OSERDES的数据时延以及级联使用方面见上面的内容。
  3. 补充了ISERDES,Idelay调节接收的串行数据的方法,详细内容以后有机会再展开。

如果您想获取本文的Vivado工程及VCS相关仿真文件,欢迎留言

如果有更好的方法方案可以留言一起谈论,欢迎大家点赞收藏留言讨论交流。

相关推荐

5分钟搭建公网https网页文件服务器,免费权威TLS证书

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要讲解如何快速搭建一个https网页文件服务器,并免费申请权威机构颁发的tls证...

nginx负载均衡配置(nginx负载均衡配置两个程序副本)

Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...

19《Nginx 入门教程》Nginx综合实践

今天我们将基于Nginx完成两个比较有用的场景,但是用到的Nginx的配置非常简单。内部Yum源搭建内部Pip源搭建1.实验环境ceph1centos7.6内网ip:172.16....

Nginx性能调优与优化指南(nginx优化配置大全)

Nginx性能调优需要结合服务器硬件资源、业务场景和负载特征进行针对性优化。以下是一些关键优化方向和具体配置示例:一、Nginx配置优化1.进程与连接数优化nginxworker_process...

C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)

本文为Nginx实操高级篇。通过配置Nginx配置文件,实现正向代理、反向代理、负载均衡、Nginx缓存、动静分离和高可用Nginx6种功能,并对Nginx的原理作进一步的解析。当需...

【Nginx】史上最全的Nginx配置详解

Nginx服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,http块又包括http全局块和server块。Nginx是非常重要的负载均衡中间件,被广泛应用于大型...

【Nginx】Nginx 4种常见配置实例(nginx基本配置与参数说明)

本文主要介绍nginx4种常见的配置实例。Nginx实现反向代理;Nginx实现负载均衡;Nginx实现动静分离;Nginx实现高可用集群;Nginx4种常见配置实例如下:一、Nginx反向代理配...

使用nginx+allure管理自动化测试报告

allure在自动化测试中经常用来生成漂亮的报告,但是网上及官网上给出的例子都仅仅是针对单个测试用例文件的形式介绍的,实际使用中,自动化测试往往需要包含不止一个产品或项目,本文介绍如何使用nginx+...

nginx配置文件详解(nginx配置文件详解高清版)

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...

SpringCloud Eureka-服务注册与发现

1.Eureka介绍1.1学习Eureka前的说明目前主流的服务注册&发现的组件是Nacos,但是Eureka作为老牌经典的服务注册&发现技术还是有必要学习一下,原因:(1)一些早期的分布式微服...

微服务 Spring Cloud 实战 Eureka+Gateway+Feign+Hystrix

前言我所在项目组刚接到一个微服务改造需求,技术选型为SpringCloud,具体需求是把部分项目使用SpringCloud技术进行重构。本篇文章中介绍了Eureka、Gateway、Fe...

深度剖析 Spring Cloud Eureka 底层实现原理

你作为一名互联网大厂后端技术开发人员,在构建分布式系统时,是不是常常为服务的注册与发现而头疼?你是否好奇,像SpringCloudEureka这样被广泛使用的组件,它的底层实现原理到底是怎样的...

热爱生活,喜欢折腾。(很热爱生活)

原文是stackoverflow的一则高票回答,原文链接可能之前也有人翻译过,但是刚好自己也有疑惑,所以搬运一下,个人水平有限所以可能翻译存在误差,欢迎指正(如侵删)。尽管classmethod和st...

GDB调试的高级技巧(详细描述gdb调试程序的全过程)

GDB是我们平时调试c/c++程序的利器,查起复杂的bug问题,比打印大法要好得多,但是也不得不说,gdb在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,分享下:一美化打印先上个例子...

Arduino 实例(二十三)Arduino 给Python 编译器发送信息

1首先Python需要安装Pyserial库,在命令提示符中输入pipintallpyserial若是遇到提示‘pip‘不是内部或外部命令,也不是可运行的程序或批处理文件,则需要设置环境变...