Xilinx LVDS Output——OSERDESE2

2023-12-23 07:48
文章标签 output xilinx lvds oserdese2

本文主要是介绍Xilinx LVDS Output——OSERDESE2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Xilinx LVDS Output——OSERDESE2

首先,需要阅读官方提供的使用手册:ug471_7Series_SelectIO.pdf ,Page161 ~ Page173

先这么理解

LVDS输出,目的是将并行数据,变成时钟频率比较高的串行输出;

可以拆分为两部分:

  1. 将串行数据的clock进行倍频;
  2. 将数据排列成倍频之后要输出的顺序;
  3. 接输出端口,xdc约束成LVDS输出的电平规格;

读手册

打开手册,翻到161页,可以看到OSERDESE2模块的框图,以及模块的主要信号;

在这里插入图片描述

上面为常规8bit的使用框图;该模块最多支持14bit的扩展;

不按照手册上的一句句翻译了,可以说几个吸引眼球的:

  • 支持两种并转串的方式SDR(signal-data rate)DDR(double-data rate)
  • 需要两个时钟,CLKCLKDIVCLK为高速串行时钟,CLKDIV为低速分频并行时钟;且二者必须对齐
  • 使用之前,必须进行复位;

OSERDESE2 Primitive

下图为OSERDESE2的原语示意图:

在这里插入图片描述

下面是个重点,对上述Port的解释:

后面的手册中,对这些引脚都有详细的介绍,这些引脚的介绍,都比较好理解;咱们还是找几个重要的说;

Reset Input - RST

先看详细介绍:

When asserted, the reset input causes the outputs of all data flip-flops in the CLK and
CLKDIV domains to be driven low asynchronously. When deasserted synchronously with
CLKDIV, internal logic re-times this deassertion to the first rising edge of CLK. Every
OSERDESE2 in a multiple bit output structure should therefore be driven by the same reset
signal, asserted asynchronously, and deasserted synchronously to CLKDIV to ensure that
all OSERDESE2 elements come out of reset in synchronization. The reset signal should
only be deasserted when it is known that CLK and CLKDIV are stable and present.

结论:位信号需要跟CLKDIV同步,且低有效;本案中,使用 ~ sys_rst_n

OSERDESE2 Attributes

介绍OSERDESE2模块的属性参数,这个花样比上面说的Port多,见下图属性的总结List

在这里插入图片描述

DATA_RATE_OQ

先看介绍:

The DATA_RATE_OQ attribute defines whether data is processed as single data rate (SDR)
or double data rate (DDR). The allowed values for this attribute are SDR and DDR. The
default value is DDR.

定义输出数据是SDR还是DDR

DATA_WIDTH

描述:

The DATA_WIDTH attribute defines the parallel data input width of the parallel-to-serial
converter. The possible values for this attribute depend on the DATA_RATE_OQ attribute.
When DATA_RATE_OQ is set to SDR, the possible values for the DATA_WIDTH attribute
are 2, 3, 4, 5, 6, 7, and 8. When DATA_RATE_OQ is set to DDR, the possible values for the
DATA_WIDTH attribute are 4, 6, 8, 10, and 14.
When the DATA_WIDTH is set to widths larger than eight, a pair of OSERDESE2 must be
configured into a master-slave configuration. See OSERDESE2 Width Expansion.

这里使用DDR,参数设置为8

TRISTATE_WIDTH

这里有一个表格,可以根据前面的使用情况选择:

在这里插入图片描述
这个参数最大不能超过4,如果超过4,就默认为1

Clocking Methods

描述:

The phase relationship of CLK and CLKDIV is important in the parallel-to-serial
conversion process. CLK and CLKDIV are (ideally) phase-aligned within a tolerance.
There are several clocking arrangements within the FPGA to help the design meet the
phase relationship requirements of CLK and CLKDIV. The only valid clocking
arrangements for the OSERDESE2 are:
• CLK driven by BUFIO, CLKDIV driven by BUFR
• CLK and CLKDIV driven by CLKOUT[0:6] of the same MMCM or PLL
When using a MMCM to drive the CLK and CLKDIV of the OSERDESE2 the buffer types
suppling the OSERDESE2 can not be mixed. For example, if CLK is driven by a BUFG,
CLKDIV must be driven by a BUFG as well.

第一种,是CLKBUFIOCLKDIVBUFR;对于这二者的解释参考;

第二种,是使用MMCMPLL的输出时钟;要保证CLKCLKDIV有同样的buffer类型,不能混(如果CLK是BUFG驱动的,那么CLKDIV也必须是BUFG驱动的);

这里使用的是第二种方式;

OSERDESE2 Latencies

DATA_RATEDATA_WIDTH决定了潜伏期为多少,单位为CLK(即为高频时钟),详情见下表:

在这里插入图片描述

需要注意红线圈出来的地方,CLKCLKDIV正常情况下相位不对齐,如果两个时钟的沿对齐了,那么潜伏期就会有一个时钟周期的变化;

时序图

可以根据波形图,来看一下输出潜伏期的周期。

2:1 SDR Serialization

在这里插入图片描述

8:1 DDR Serialization

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这个波形很清晰的就展示出了,如何将8bit并行输出转为串行输出;

再思考

跟一开始设想的一样,如果连续输入数据1bit:

tx_data0 = {a, b, c, d, e, f, g, h};		// 每个字母代替1bit数据,0或1;
tx_data1 = {i, j, k, l, m, n, o, p};		// 这样比较方便观察;
tx_data2 = {q, r, s, t, u, v, w, x};

就会有输出8bit数据:

ouput0 = {a, i, q};
ouput1 = {b, g, r};
ouput2 = {c, k,s};
ouput3 = {d, l, t};
ouput4 = {e, m, u};
ouput5 = {f, n, v};
ouput6 = {g, o, w};
ouput7 = {h, p, x};

嗯嗯,是想要的样子;仔细阅手册,能获得不少有用的信息。接下来,就是动手用Verilog实现了。

具体方式,下一篇吧。

阅读推荐

Xilinx LVDS Output——原语调用

这篇关于Xilinx LVDS Output——OSERDESE2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/527261

相关文章

Xilinx系FPGA学习笔记(五)ROM的IP核学习

系列文章目录 文章目录 系列文章目录前言ROM IP分布式ROM生成ROM配置创建COE文件 块ROM生成如何快速生成Example Design 两种ROM对比 前言 最近在学习小梅哥的xilinx型FPGA开发板,一边学习一边记录,简化整理一下笔记 ROM IP 在 Memories &Storage Elements 下可以看到有两个与 ROM 相关的

RK3288 点亮LVDS屏

本文记录调试 LVDS接口屏的一些关键步骤,主要是dts文件中关于 频率、分辨率 、时序参数的设置  环境: RK3288 9tripod CV5  linux 4.4.189 LCD:JYT121XQ01 (追曦 DS1212)12.1电容触控屏   查看屏幕规格书    只要在rockchip dts 中 设置 T(HB)=Thb+Thf+Thsyn=320clock  T

Xilinx系FPGA学习笔记(四)VIO、ISSP(Altera)及串口学习

系列文章目录 文章目录 系列文章目录VIO(Vivado)ISSP(Altera)串口学习FPGA串口发送FPGA串口接收 VIO(Vivado) VIO 的全称叫 Virtual Input/Output,建立一个虚拟的输入/输出信号,可以对需要调试的模块的输出信号的数值进行在线的查看,以及模拟一些信号输给需要调试模块,方便调试查找问题和验证模块的实际上板工作的正确

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-30 RS485串口程序收发环路设计

软件版本:VIVADO2021.1 操作系统:WIN10 64bit 硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台:米联客-MLK-H3-CZ08-7100开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 目录 1概述

XILINX平台下LINUX DMA驱动调研

专栏目录 高质量文章导航-持续更新中-CSDN博客 基础概念 VA:virtual address称为虚拟地址, PA:physical address称为物理地址。 CPU通过地址来访问内存中的单元,如果CPU没有MMU,或者有MMU但没有启动,那么CPU内核在取指令或者访问内存时发出的地址(此时必须是物理地址,假如是虚拟地址,那么当前的动作无效)将直接传到CPU芯片的外部地址引脚上,

Xilinx FPGA 原语解析(二):IBUFDS差分输入缓冲器(示例源码及仿真)

目录 前言: 一、原语使用说明 二、原语实例化代码模版 三、使用示例 1.设计文件代码 2.仿真文件代码 3.仿真结果 前言: 本文主要参考资料xilinx手册,《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL Designs》UG768 (v14.7) Octob

Android Studio解决Build Output乱码问题

解决方案:双击Shift键,在Actions中选择Edit Custom VM Options,然后输入-Dfile.encoding=UTF-8,重启Android Studio即可。

Xilinx FFT IP使用

简介         本章节主要介绍FFT原理,以及Xilinx的FFT IP使用说明做详细介绍。 FFT介绍         FFT主要是将时域信号转换成频域信号,转换后的信号更方便分析。首先,FFT是离散傅立叶变换 (DFT) 的快速算法,那么说到FFT,我们自然要先讲清楚傅立叶变换。先来看看傅立叶变换是从哪里来的?         傅立叶原理表明:任何连续测量的时序或信号,都可以表示

Altera FPGA与高速ADS4249和DAC3482的LVDS接口设计

引言:本文以TI的ADS4249(ADC)和DAC3482(DAC)之间的接口为例,介绍Altera FPGA与ADC/DAC之间的DDR LVDS接口设计以及时序约束详细设计。本文介绍的实例可方便扩展到具有类似接口格式的其他高速数据转换器设计。 1.概述 ADS4249是一款双通道、14位、250MSPS ADC,具有双总线、字节级数字接口。ADS4249接口示例适用于许多TI高速ADC,包

新路程------imx6 lvds ioctl

最近有个需求,做一些接口给上层应用调用 于是看了一下驱动,linux有一套标准的framebuffer机制让我们做接口,就是fb_ioctl 首先看对应的framebuffer驱动,在之前的ldb.c中,确实配置了对应的fb_info结构体,但是要修改这个结构体的参数并不需要在ldb.c中做,在mxc_ipuv3_fb.c里 static struct fb_ops mxcfb_ops