FPGA 高速接口(LVDS)

差分信号环路测试

1 概述

LVDS(Low Voltage Differential Signalin)是一种低振幅差分信号技术。它使用幅度非常低的信号(约350mV)通过一对差分PCB走线或平衡电缆传输数据。大部分高速数据传输中,都会用到LVDS传输。
目前FPGA开发板资料中涉及LVDS通信的方案并不多,但是LVDS实际上有大量的应用,特别是在高速ADC,
高分辨率摄像头,液晶屏显示技术等应用领域。所以掌握LVDS通信也是我们FPGA开发者的必备基本技能。本文首先简要介绍一些XILINXFPGA的LVDS解决方案,然后再通过一个简单的环路测试对LVDS通信做一个简单的验证测试。

2 XILINX FPGA 差分信号解决方案

2.1 IBUFDS

在这里插入图片描述
对应原语:

IBUFDS #(.DIFF_TERM("FALSE"), // Differential Termination.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE".IOSTANDARD("DEFAULT")// Specify the input I/O standard) IBUFDS_inst (.O(O), // Buffer output.I(I), // Diff_p buffer input (connect directly to top-level port).IB(IB) // Diff_n buffer input (connect directly to top-level port));

2.2 OBUFDS

在这里插入图片描述
对应原语:

OBUFDS#(.IOSTANDARD("DEFAULT"), // Specify the output I/O standard.SLEW("SLOW")// Specify the output slew rate) OBUFDS_inst (.O(O), // Diff_p output (connect directly to top-level port).OB(OB), // Diff_n output (connect directly to top-level port).I(I) // Buffer input);

2.3 IOBUFDS

在这里插入图片描述
对应原语:

IOBUFDS #(.DIFF_TERM("FALSE"),// Differential Termination ("TRUE"/"FALSE").IBUF_LOW_PWR("TRUE"), // Low Power- "TRUE", High Performance = "FALSE".IOSTANDARD("BLVDS_25"), // Specify the I/O standard.SLEW("SLOW") // Specify the output slew rate) IOBUFDS_inst (.O(O),// Buffer output.IO(IO),// Diff_p inout (connect directly to top-level port).IOB(IOB), // Diff_n inout (connect directly to top-level port).I(I),// Buffer input.T(T) // 3-state enable input, high=input, low=output);

2.3 LVDS 中的终端电阻

在这里插入图片描述
如果要使用内部的终端电阻,对于HP的LVDS信号BANK电压必须是1.8V,而对于HR的LVDS25BANK
信号必须是2.5V,否则可以使用外部终端电阻。

2.4 LVDS 电气特性

2.4.1 LVDS25

在这里插入图片描述
VCCO是2.5V
VOH是高电平最大1.675V
VOL 低电平最小0.7V
VODIFF 差模电压最大600mv,最小247mv,典型值350mv
VOCM 输出共模电压,最小1V最大1.425V,典型值1.25V
VIDIFF 输入差模电压,最大600mv,最小100mv,典型350mv
VICM输入共模电压,最大1.5V,最小0.3V,典型1.2V

2.4.2 LVDS18

在这里插入图片描述
VCCO是1.8V
VOH是高电平最大1.675V
VOL 低电平最小0.825V
VODIFF 差模电压最大600mv,最小247mv,典型值350mv
VOCM 输出共模电压,最小1V最大1.425V,典型值1.25V
VIDIFF 输入差模电压,最大600mv,最小100mv,典型350mv
VICM输入共模电压,最大1.5V,最小0.3V,典型1.2V
LVDS器件电气特性是否兼容主要看,VODIF,VOCM,VIDIFF,VICM,可以看到,LVDS25 和LVDS的差分电气特性是兼容的。

5LVDS 电平兼容

对于HPBANK 即便是BANK电压VCCO不是1.8V,也可以使用LVDS输入,但是LVDS输出或者双向LVDS
通信,BANK电压必须是1.8V
对于HR或者HDBANK即便是BANK电压VCCO不是2.5V也可以使用LVDS_25输入,但是LVDS_25输出
或者双向LVDS_25通信,BANK电压必须是2.5V
如果电平标准无法满足要求,可以采用外部电路实现差分信号的电平转换,下图就是典型的方案,该电路使用交流耦合,并且对输入信号直流偏置,通过RBIAS的电阻产生VCCO/2的VICM电平。电容的典型值时100nF,电阻的范围为10K~100K。

在这里插入图片描述
以下两张图来自于XILINX官网,用户在硬件设计的时候可以用于评估LVDS的兼容特性
在这里插入图片描述
在这里插入图片描述
当和其他LVDS外设通信时,可以通过以上两张表以及本文4LVDS电气特性小节,判断电气特性是否兼容。

源码

module lvds_loop(
//sytem clk input
//input clk_i,
input clk_i_p,
input clk_i_n,output card_en_o,
//uart
input uart_rx_i,
output uart_tx_o,
//lvds loop input
input dclki_p,
input dclki_n,
input din_p,
input din_n,
//lvds loop output
output dclko_p,
output dclko_n,
output dout_p,
output dout_n
);assign card_en_o = 1'b1;    
wire clk50m,clk5m,dclki,din; 
reg uart_rx_r=1'b0;clk_wiz_0 uclk(.clk_out1(clk50m),.clk_out2(clk5m), .clk_in1_p(clk_i_p),.clk_in1_n(clk_i_n));
//clk_wiz_0 uclk(.clk_out1(clk50m),.clk_out2(clk5m), .clk_in1(clk_i));
//lvds out
OBUFDS #(
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") 
)     
dclko_OBUFDS
(
.O  (dclko_p ),
.OB (dclko_n ),
.I  (clk50m   ) 
);OBUFDS #(
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") 
)  
dout_OBUFDS
(
.O  (dout_p ),
.OB (dout_n ),
.I  (uart_rx_i) 
);//lvds in
IBUFDS 
#(
.DIFF_TERM("TRUE"),       // Differential Termination
.IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
.IOSTANDARD("DEFAULT")     // Specify the input I/O standard
)
dclki_IBUFDS
(
.O(dclki),   // 1-bit output: Buffer output
.I(dclki_p),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)
.IB(dclki_n)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)
);    IBUFDS 
#(
.DIFF_TERM("TRUE"),       // Differential Termination
.IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
.IOSTANDARD("DEFAULT")     // Specify the input I/O standard
)
ddatai_IBUFDS
(
.O(din),   // 1-bit output: Buffer output
.I(din_p),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)
.IB(din_n)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)
); always @(posedge dclki)beginuart_rx_r <= din;
endassign uart_tx_o = uart_rx_r;ila_0 ila_dg (.clk(clk50m),.probe0({clk5m,uart_rx_i,din,uart_tx_o}) 
);    
endmodule

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

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

相关文章

使用vscode传入参数的方式进行debug

使用vscode传入参数的方式进行debug {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{&quo…

AI论文速读 |【综述】深度学习在多元时间序列插补的应用

论文标题&#xff1a; Deep Learning for Multivariate Time Series Imputation: A Survey 链接&#xff1a;https://arxiv.org/abs/2402.04059 作者&#xff1a;Jun Wang ; Wenjie Du ; Wei Cao ; Keli Zhang ; Wenjia Wang ; Yuxuan Liang ; Qingsong Wen 机构&#xff1a…

vue 学习definproperty方法

definproperty方法是Vue很重要的一个底层方法&#xff0c;掌握他的原理很重要&#xff0c;下面通过代码说明问题&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>回顾Object.defineproperty方法</title&…

堆详解以及简单的堆排序(源代码)

一、什么是堆&#xff1f; 堆是将数组看作一颗完全二叉树 大堆&#xff1a;任意一个父亲大于等于孩子 小堆&#xff1a;任意一个父亲小于等于孩子 有序数组一定是堆 但是堆不一定有序 注意&#xff1a;此“堆”是一个数据结构&#xff0c;用来表示完全二叉树 还有另外一个“…

AIGC ChatGPT4完成业务需求SQL学习

源表如下&#xff1a; 例如现在需要显示每个岗位中工资排名前10位的员工信息&#xff0c;并显示排名应该要怎么做呢&#xff1f; Prompt: 有一个某公司职员表&#xff0c;表名为Bank_emp&#xff0c;empno为员工编号&#xff0c;ename为员工姓名&#xff0c;JOB为员工岗位&…

设计健壮且可扩展的软件系统

介绍 系统设计是定义系统的架构、组件、模块、接口和数据以满足特定需求的过程。它涉及就如何构建、维护和操作软件系统做出关键决策。在本文中&#xff0c;我们将深入探讨系统设计的各个方面&#xff0c;涵盖 25 个关键主题&#xff0c;以帮助您了解设计健壮且可扩展的软件系…

平滑升级旧版nginx,使其支持健康检测模组

nginx是部署在华为欧拉的docker容器中&#xff0c;版本是2203sp1.x86_64 查看旧版nginx的版本与编译配置信息&#xff1a; nginx -Vnginx version: nginx/1.14.1 built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) built with OpenSSL 1.1.1g FIPS 21 Apr 2020 (running …

Hadoop-Yarn-NodeManager如何计算Linux系统上的资源信息

一、上下文 <Hadoop-Yarn-NodeManager都做了什么>中讲节点资源监控服务&#xff08;NodeResourceMonitorImpl&#xff09;时只是提了下SysInfoLinux&#xff0c;下面我们展开讲下 SysInfoLinux是用于计算Linux系统上的资源信息的插件 二、SysInfoLinux源码 package o…

前后图片对比控件使用

在build.gradle中添加依赖&#xff1a; implementation com.github.pavel163:BifacialView:1.4.1 在布局文件中&#xff1a; <com.ebr163.bifacialview.view.BifacialViewandroid:id"id/bv_before_after"android:layout_width"match_parent"android:la…

设计模式学习笔记 - 学前简述

1.为什么学习设计模式&#xff1f; 学习设计模式的原因&#xff1a; 应对面试中的设计模式相关问题&#xff1b;写出高质量代码&#xff0c;告别让人吐槽的烂代码&#xff1b;提高复杂代码的设计和开发能力让读源码、学习框架爱事半功倍&#xff1b;为职场发展铺垫。 设计模…

LNMP搭建discuz论坛

discuz论坛是一种网络论坛软件&#xff0c;也称bbs&#xff0c;它是一种用于在互联网上建立论坛社区的程序系统。只哟中功能强大的论坛软件&#xff0c;可以帮助用户建立一个专业、完善的论坛社区&#xff0c;并且可以实现多种功能&#xff0c;如搭建用户注册、登录、查看主题、…

vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据

文章目录 一、按需引入自定义组件&#xff1a;unplugin-vue-components1. 安装[unplugin-vue-components]2. 在vite中使用 二、自动导入依赖包&#xff1a;unplugin-auto-import1.安装2.vite.config.js配置3.使用效果 三、自动生成路由&#xff1a;vite-plugin-pages1、安装2、…

任务处理 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 在某个项目中有多个任务(用tasks数组表示)需要您进行处理&#xff0c;其中tasks[i][si,ei], 你可以在si < day < ei 中的任意一天处理该任务&#xff0c;请…

代码随想录day25--回溯的应用4

LeetCode491.非递减子序列 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;…

【目标跟踪】提供一种简单跟踪测距方法(c++)

文章目录 一、前言二、c代码2.1、Tracking2.2、KalmanTracking2.3、Hungarian2.4、TrackingInfo 三、调用示例四、结果 一、前言 在许多目标检测应用场景中&#xff0c;完完全全依赖目标检测对下游是很难做出有效判断&#xff0c;如漏检。检测后都会加入跟踪进行一些判断或者说…

中科星图——Landsat8_C2_ST数据集是经大气校正的地表温度数据

数据名称&#xff1a; Landsat8_C2_ST 数据来源&#xff1a; USGS 时空范围&#xff1a; 2020年1月-2023年3月 空间范围&#xff1a; 全国 数据简介&#xff1a; Landsat8_C2_ST数据集是经大气校正的地表温度数据&#xff0c;属于Collection2的二级数据产品&#xff0…

nginx 日志改为json格式

nginx 日志改为json格式 场景描述 正常使用nginx时&#xff0c;使用默认的日志输出格式&#xff0c;对于后续日志接入其他第三方日志收集、清洗环节&#xff0c;因分隔符问题可能不是很友好。 xxxx - - [19/Feb/2024:11:16:48 0800] "GET /time_feed HTTP/1.1" 20…

虚拟和现实的界限不存在了吗

Sora是美国人工智能公司OpenAI最新发布的“文生视频”大模型。与之前的模型相比&#xff0c;Sora能够一次性生成长达一分钟的高清视频&#xff0c;这是目前业内主流的数秒钟版本所无法比拟的。Sora的发布在市场上引起了极大的关注&#xff0c;并被认为是人工智能领域的一次重大…

Spring boot 实现监听 Redis key 失效事件

一. 开启Redis key过期提醒 方式一&#xff1a;修改配置文件 redis.conf # 默认 notify-keyspace-events "" notify-keyspace-events Ex方式二&#xff1a;命令行开启 CONFIG SET notify-keyspace-events Ex CONFIG GET notify-keyspace-events二. notify-keyspace-e…

【Java EE初阶十三】网络初识

1. 网络发展史 网络发展的几个主要时期&#xff1a; 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成 业务&#xff0c;就有了网络互…