FPGA 高速接口(LVDS)

2024-02-19 07:04
文章标签 fpga lvds 高速接口

本文主要是介绍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

这篇关于FPGA 高速接口(LVDS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节,涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件,最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂的时钟管理。通过LabVIEW的FPGA模块和NI硬件,可以快速完成开发和部署,尤其适用于复杂控制与高性能数据处理系统。 1. FPG

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

FPGA开发:模块 × 实例化

模块的结构 对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块。 一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。 每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于module和endmodule之间,如下: module block(a,b,c);inpu

LabVIEW环境中等待FPGA模块初始化完成

这个程序使用的是LabVIEW环境中的FPGA模块和I/O模块初始化功能,主要实现等待FAM(Field-Programmable Gate Array Module,FPGA模块)的初始化完成,并处理初始化过程中的错误。让我们逐步分析各部分的功能: 1. Wait for FAM Initialization框架 此程序框架用于等待I/O模块成功初始化。如果在5秒钟内模块没有完成配

FPGA随记——小说 可综合和不可综合

当然我在网络上找到了些可综合和不可综合的解释 感觉也很有参考价值: https://wenda.so.com/q/1378362174074040 综合就是把你写的rtl代码转换成对应的实际电路。 比如你写代码assign a=b&c; EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a 假如你写了很多这样的语句 assign a=b&c; assig

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

基于FPGA的开源项目:FOC/SHA/USB/JPEG等

文章目录 [1. USB 1.1控制器](https://github.com/WangXuan95/FPGA-USB-Device)[2. FOC控制算法](https://github.com/WangXuan95/FPGA-FOC)[3. BSV高级硬件描述语言入门指南](https://github.com/WangXuan95/BSV_Tutorial_cn)[4. 基于XDMA的

LCD彩条显示——FPGA学习笔记10

部分素材来自原子哥 一、LCD简介         基本原理:在两块平行玻璃板中填充液晶材料,通过电场控制液晶分子旋转从而达到透光和遮光的目的。

LabVIEW开发FPGA方法与FIFO数据丢失处理

开发基于NI 7975R FPGA的系统涉及一系列流程,包括驱动安装、LabVIEW项目设置、开发调试、编译和与Windows系统的通信。重点在于FIFO的正确配置,避免数据丢失是关键环节之一,尤其是在使用高速数据流传输时。以下将详细介绍这些过程,并重点讨论FIFO数据丢失的原因与解决方案。 FPGA开发流程 驱动安装与工具准备:开发FPGA需要安装LabVIEW FPGA模块以及N