首页 > 其他分享 >37 基于FPGA的LVDS信号环路测试

37 基于FPGA的LVDS信号环路测试

时间:2023-12-29 18:55:24浏览次数:33  
标签:LVDS IO FPGA 输出 37 差分 信号 输入

软件版本:VIVADO2021.1

操作系统:WIN10 64bit

硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA

登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!

1 概述

LVDS(Low Voltage Differential Signalin)是一种低振幅差分信号技术。它使用幅度非常低的信号(约350mV)通过一对差分PCB走线或平衡电缆传输数据。大部分高速数据传输中,都会用到LVDS传输。

目前FPGA开发板资料中涉及LVDS通信的方案并不多,但是LVDS实际上有大量的应用,特别是在高速ADC,高分辨率摄像头,液晶屏显示技术等应用领域。所以掌握LVDS通信也是我们FPGA开发者的必备基本技能。本文首先简要介绍一些XILINX FPGA的LVDS解决方案,然后再通过一个简单的环路测试对LVDS通信做一个简单的验证测试。

2 XILINX FPGA差分信号解决方案

2.1 IBUFDS差分输入

对应原语

   IBUFDS #(

      .DIFF_TERM("FALSE"),       // "FALSE"=不使用内部终端电阻,"TRUE"=使用内部终端电阻

      .IBUF_LOW_PWR("TRUE"),     // "TRUE"=高性能,"FALSE" =低功耗

      .IOSTANDARD("DEFAULT")     // 设置输入电平属性

   ) IBUFDS_inst (

      .O(O),  // IO buffer输出

      .I(I),  // 差分输入P端

      .IB(IB) // 差分输入N端

   );

2.2 OBUFDS差分输出

对应原语

   OBUFDS #(

      .IOSTANDARD("DEFAULT"), // IO电平属性

      .SLEW("SLOW")           // IO的压摆率,"SLOW"或者"FAST"

// FAST压摆率可以满足高性能需求,例如高速存储器接口,但是,如果不能恰当设计(端接匹配,传输线阻抗控制和串扰耦合),更高的压摆率输出会导致信号反射或者产生噪声问题。

   ) OBUFDS_inst (

      .O(O),     // 差分输出P端

      .OB(OB),   // 差分输出N端

      .I(I)      // 内部输入信号

   );

2.3 IOBUFDS双向差分IO

对应原语

   IOBUFDS #(

      .DIFF_TERM("FALSE"),     // "FALSE"=不使用内部终端电阻,"TRUE"=使用内部终端电阻

      .IBUF_LOW_PWR("TRUE"),   // "TRUE"=低功耗, "FALSE"=高性能

      .IOSTANDARD("BLVDS_25"), // 设置IP电平属性

      .SLEW("SLOW")            // IO的压摆率,"SLOW"或者"FAST",FAST压摆率可以满足高性能需求,例如高速存储器接口,但是,如果不能恰当设计(端接匹配,传输线阻抗控制和串扰耦合),更高的压摆率输出会导致信号反射或者产生噪声问题。

   ) IOBUFDS_inst (

      .O(O),     // 缓冲输出

      .IO(IO),   // 差分IO P

      .IOB(IOB), // 差分 IO N

      .I(I),     // 缓冲输入

      .T(T)      // 3态使能, high=输入, low=输出

   );

3 LVDS中的终端电阻

如果要使用内部的终端电阻,对于HP的LVDS信号BANK电压必须是1.8V,而对于HR的LVDS25 BANK信号必须是2.5V,否则可以使用外部终端电阻。

4 LVDS电气特性

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

4.2 LVDS

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的差分电气特性是兼容的。

5 LVDS电平兼容

对于HP BANK 即便是BANK电压VCCO不是1.8V,也可以使用LVDS输入,但是LVDS输出或者双向LVDS通信,BANK电压必须是1.8V

对于HR或者HD BANK即便是BANK电压VCCO不是2.5V也可以使用LVDS_25输入,但是LVDS_25输出或者双向LVDS_25通信,BANK电压必须是2.5V

如果电平标准无法满足要求,可以采用外部电路实现差分信号的电平转换,下图就是典型的方案,该电路使用交流耦合,并且对输入信号直流偏置,通过RBIAS的电阻产生VCCO/2的VICM电平。电容的典型值时100nF,电阻的范围为10K~100K

以下两张图来自于XILINX官网,用户在硬件设计的时候可以用于评估LVDS的兼容特性

当和其他LVDS外设通信时,可以通过以上两张表以及本文28.4LVDS电气特性小节,判断电气特性是否兼容。

6 硬件电路分析

硬件接口和子卡模块请阅读"附录 1"

配套工程的 FPGA PIN 脚定义路径为 soc_prj/uisrc/04_pin/ fpga_pin.xdc。

7 测试代码

测试采用PC上通过串口发送数据到开发板,然后经过外部的LVDS环路后把串口数据传回电脑。例子虽然简单,但是可以展示LVDS接口的基本用法。

`timescale 1ns / 1ns

 

module lvds_loop

(

input I_sysclk,//系统时钟信号输入

input I_uart_rx,//UART数据信号接收

output O_uart_tx,//UART数据信号发送

//lvds 差分输入

input I_dclk_p,//差分输入时钟信号p端

input I_dclk_n,//差分输入时钟信号n端

input I_din_p,//差分数据输入信号p端

input I_din_n,//差分数据输入信号n端

//lvds 差分输出

output O_dclk_p,//差分时钟输出信号p端

output O_dclk_n,//差分时钟输出信号n端

output O_dout_p,//差分数据输出信号p端

output O_dout_n//差分数据输出信号n端

);

 

wire clk50m,clk5m,dclki,din;

reg uart_rx_r=1'b0;

 

//使用pll产生50mhz时钟和5mhz时钟

clk_wiz_0 uclk(.clk_out1(clk50m),.clk_out2(clk5m), .clk_in1(I_sysclk));

 

//单端转差分输出部分

//内部单端时钟转为差分信号输出

OBUFDS #(

.IOSTANDARD("DEFAULT"), // IO电平属性

.SLEW("SLOW")           // IO的压摆率,"SLOW"或者"FAST"

                         // FAST压摆率可以满足高性能需求,例如高速存储器接口,但是,如果不能恰当设计(端接匹配,传输线阻抗控制和串扰耦合),更高的压摆率输出会导致信号反射或者产生噪声问题。

)

OBUFDS_DCLK_O_inst (

.O(O_dclk_p),     // 差分输出P端

.OB(O_dclk_n),   // 差分输出N端

.I(clk50m)      // 内部输入信号

);

 

//接收的uart_rx信号转为差分输出

OBUFDS #(

.IOSTANDARD("DEFAULT"), // IO电平属性

.SLEW("SLOW")           // IO的压摆率,"SLOW"或者"FAST"

                         // FAST压摆率可以满足高性能需求,例如高速存储器接口,但是,如果不能恰当设计(端接匹配,传输线阻抗控制和串扰耦合),更高的压摆率输出会导致信号反射或者产生噪声问题。

)

OBUFDS_DOUT_inst (

.O(O_dout_p),     // 差分输出P端

.OB(O_dout_n),    // 差分输出N端

.I(I_uart_rx)   // 内部输入信号

);

 

 

 

//单端转差分输入部分

//差分时钟转为单端内部时钟信号

IBUFDS #(

.DIFF_TERM("FALSE"),       // "FALSE"=不使用内部终端电阻,"TRUE"=使用内部终端电阻

.IBUF_LOW_PWR("TRUE"),     // "TRUE"=低功耗,"FALSE" =高性能

.IOSTANDARD("DEFAULT")    // 设置输入电平属性

)

IBUFDS_DCLK_I_inst (

.O(dclki),   // IO buffer输出到内部信号

.I(I_dclk_p), // 差分输入P端

.IB(I_dclk_n) // 差分输入N端

);

 

 

//接收的差分数据转为内部单端数据信号

IBUFDS #(

.DIFF_TERM("FALSE"),       // "FALSE"=不使用内部终端电阻,"TRUE"=使用内部终端电阻

.IBUF_LOW_PWR("TRUE"),     // "TRUE"=低功耗,"FALSE" =高性能

.IOSTANDARD("DEFAULT")    // 设置输入电平属性

)

IBUFDS_DIN_inst (

.O(din),   // IO buffer输出到内部信号

.I(I_din_p), // 差分输入P端

.IB(I_din_n) // 差分输入N端

);

 

 

//在FPGA内部,把接收的din寄存到uart_rx_r

always @(posedge dclki)begin

    uart_rx_r <= din;

end

 

assign O_uart_tx = uart_rx_r;//通过assign 把接收的环路数据,直接给O_uart_tx

 

 

//通过ila在线逻辑分析仪,下载bit后,在线调试观察内部的数据信号

ila_0 ila_dg (

    .clk(clk50m),

    .probe0({clk5m,I_uart_rx,din,O_uart_tx})

);    

 

endmodule

 

8 仿真结果

仿真中修改前面文章中使用的tb_uart_top.v文件,模拟串口的发送,并且观察经过LVDS之后的环路输出结果是否正确,通过这种简单的办法验证代码功能,对于硬件板卡不支持LVDS的开发板可以如此验证。

9 硬件接线

(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)

我们使用米联客1.8V的 BASE子卡。请确保下载器和开发板已经正确连接,并且开发板已经上电。(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

10 测试结果

由于串口速度很慢,我们使用lia的capture模式才能抓到更多数据,以下是IP CORE的设置

以下是下载Bit后设置Capture模式的采样信号,这里用了5MHZ的时钟信号 上升沿作为采样信号

I_uart_rx为低电平触发

 

在线仿真抓取的波形

串口助手接收收发测试

标签:LVDS,IO,FPGA,输出,37,差分,信号,输入
From: https://www.cnblogs.com/milianke/p/17935542.html

相关文章

  • 31 基于FPGA简易示波器显示驱动设计
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述FPGA在数据采集,数据处理,图像视频领域都有广泛的应用。很多FPGA工程师苦恼,如何让FPGA采集的数据可以直......
  • 29 基于FPGA实现触摸屏实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述常规情况下我们会使用CPU通过I2C接口实现触控液晶触摸方案的实现,也可以上LINUX,一般LINUX下也有对于各......
  • 07 FPGA按钮去抖实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MILIANKE)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述按键的消抖,是指按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低......
  • 08 FPGA多路分频器实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MILIANKE)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述在FPGA中,时钟分频是经常用到的。本节课讲解2分频、3分频、4分频和8分频的Verilog实现并且学习generate......
  • 05 FPGA流水灯实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述本章课程以大家熟悉的流水灯为例子,详细讲解了VIVADO软件的使用,包括创建FPGA工程,编写Verilog代码,添加管......
  • 《FPGA原理和结构》——读书笔记
    最近做了一个关于FPGA的项目后,读了《FPGA原理和结构》这本书。主要梗概内容和想法如下。第一章:理解FPGA所需要的基础知识理解FPGA我们需要数电的组合逻辑、时序逻辑等内容的知识。FPGA(20世纪70年度发展起来的,因为其具有通过组合使用器件内大量的逻辑块来实现所需的电路,比以往侠......
  • FPGA处理编码信号进行毛刺滤波
    目录一、前言二、滤波算法三、代码设计一、前言在利用处理编码信号时,一般在较为理想的环境下可以很方便进行计算,判断等。但是由于有时候受到电磁干扰等环境因素,会导致编码信号产生毛刺等,这时候如果不对编码信号进行预处理而是直接进行边缘判断等操作则极容易导致错误,所以需要提......
  • DAC转化——FPGA驱动LTC1446
    目录一、前言二、结合LTC1446芯片手册分析三、Verilog代码与仿真四、总结一、前言最近在学习利用FPGA结合DAC芯片实现数模转换,在实验中选择的LTC1446这款芯片。接下来自己将结合芯片手册进行分析,并编写Verilog代码并进行仿真验证。二、结合LTC1446芯片手册分析首先从上述第......
  • FPGA驱动AD9240实现AD转换
    目录一、前言二、时序原理三、代码设计四、结果验证一、前言在做项目中,经常会用到AD转换模块。前段时间做毕业设计的时候需要用到FPGA驱动AD9240模块实现模拟数据的采集和转换,尽管相对来说AD9240算比较简单的驱动模块,但是也想记录下分析和设计过程。二、时序原理首先通过芯片......
  • 基于FPGA的图像差分运算及目标提取实现,包含testbench和MATLAB辅助验证程序
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      基于FPGA(Field-ProgrammableGateArray)的图像差分运算及目标提取实现主要涉及图像处理、差分运算和目标提取等原理和数学公式。 一、图像处理原理       图像处理是......