[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-37 LVDS信号环路测试

news2025/1/11 4:05:37

软件版本: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概述

2 XILINX FPGA差分信号解决方案

2.1 IBUFDS差分输入

2.2 OBUFDS差分输出

2.3 IOBUFDS双向差分IO

3 LVDS中的终端电阻

4 LVDS电气特性

4.1LVDS25

4.2LVDS

5 LVDS电平兼容

6硬件电路分析

7测试代码

8仿真结果

9硬件接线

10测试结果


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.1LVDS25

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.2LVDS

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_p,
input I_sysclk_n,//系统时钟信号输入
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端
output O_card_power_en
);

assign O_card_power_en = 1'b1; //子卡上电

wire I_clk;
IBUFGDS CLK_U(
.I(I_sysclk_p),
.IB(I_sysclk_n),
.O(I_clk)
);
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_clk));

//单端转差分输出部分
//内部单端时钟转为差分信号输出
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硬件接线

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

本实验注意采我们的cep跳线帽跳线1.8V,子卡采用1.8V的FEP-BASE-CARD。请确保下载器和开发板已经正确连接,另外需要把核心板上的2P模式开关设置到JTAG模式,即ON ON,并且开发板已经上电。(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

外部环路需要实用跳线帽,CEP-GPIO接口中的IO可以用于完成本实验

10测试结果

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

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

Uart_rx_i为低电平触发

在线仿真抓取的波形

串口助手接收收发测试

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

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

相关文章

2024年全国大学生数学建模A题借鉴论文

问题 1&#xff1a; 舞龙队的动态位置与速度计算 1. **螺旋线的几何建模**&#xff1a;根据题目描述&#xff0c;舞龙队沿着等距螺旋线前进。螺旋线的螺距为 55 cm&#xff0c; 需根据极坐标公式确定每节板凳的位置。 - 极坐标螺旋线方程&#xff1a;\( r a b\theta \)&…

算法专题一: 双指针

目录 前言1. 移动零&#xff08;easy&#xff09;2. 复写零&#xff08;easy&#xff09;3. 快乐数&#xff08;medium&#xff09;4. 盛水最多的容器&#xff08;medium&#xff09;5. 有效三角形的个数&#xff08;medium&#xff09;6. 和为 s 的两个数字&#xff08;easy&a…

Linux CentOS 7.9 安装mysql8

1、新建mysql文件夹 数据比较大&#xff0c;所以我在服务器另外挂了一个盘装mysql&#xff0c;和默认安装一个道理&#xff0c;换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…

元宇宙先驱,城市区块链

blockcity 务实元宇宙的先行者,去中心化自治组织开放平台,轻松加入或创建你的DAO组织创新采用Web3和区块链思维,blockcity 真正人人可用,无需下载安装 《福建省元宇宙产业发展行动计划&#xff08;2024 — 2026 年&#xff09;在“促进数字创意产业发展”条目提到&#xff0c;…

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面&#xff0c;即使密码正确也无法登录 这次是装实体机&#xff0c;一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …

oracle锁的机制

文章目录 oracle锁的机制1. 概括2.锁的模式3.锁查看 死锁1. 说明2.死锁产生条件3.解决死锁冲突4. 事务和死锁预防总结 oracle锁的机制 1. 概括 1&#xff09;说明 锁是一种机制&#xff0c;多个事务同时访问一个数据库对象时&#xff0c;该机制可以实现对并发的控制 2&…

目标检测常见数据集格式

目标检测常见的数据集格式COCO、YOLO、VOC、DATA。 1、COCO 数据标注格式JSON&#xff0c;JSON文件中包含多个关键字段&#xff0c;如info、images、annotations等&#xff0c;分别存储了数据集的基本信息、图像信息和标注信息 COCO数据集的下载 官网地址&#xff1a;http://…

Computer Exercise

每日一练 单选题 在计算机机箱前面板接口插针上&#xff08;     C   &#xff09;表示复位开关。 A.SPK    B.PWRLED    C.RESET    D.HDDLED每台PC机最多可接&#xff08;     B   &#xff09;块IDE硬盘。 A.2    B.4    C.6    D.8&#xff08;    …

U盘怎么加密保护?U盘加密方法介绍

在数字化时代&#xff0c;U盘作为一种便携式存储设备&#xff0c;广泛应用于我们的日常生活和工作中。然而&#xff0c;U盘中存储的数据安全性问题日益凸显。为了保护个人隐私和重要数据&#xff0c;学会U盘加密方法显得尤为重要。本文将为您详细介绍几种U盘加密方法&#xff0…

用了虚拟机后,本机摄像头打不开了(联想电脑thinkpad)

虚拟机有摄像头&#xff0c;我断开了连接&#xff0c;现在本机的摄像头打开就是一个锁 我先把虚拟机的摄像头关了 然后把本机的vm usb关闭了 WinR&#xff09;&#xff0c;输入services.msc&#xff0c;找到VMware USB Arbitration Service&#xff0c;确保其状态为“关闭 然后…

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中&#xff0c;歌词的展示和滚动播放已经成为了一个非常常见的功能。今天&#xff0c;我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分&#xff0c;我们需要创建一个音频…

实现简单聊天

管道通信 目的&#xff1a; 实现 xxz 与 zy 之间的通讯聊天 功能&#xff1a; 同一网络下进行的模拟通讯实现 缺点&#xff1a;没有涉及到网络的通信&#xff0c;只是简单的进程之间模拟的通信 采用到的技术点&#xff1a; 1 有名管道 优点&#xff1a; 在文件系统中作为一…

c++修炼之路之特殊类设计与类型转换

目录 一&#xff1a;特殊类设计 1.设计一个不能被拷贝的类 2.设计一个只能在堆上创建对象的类 3.设计一个只能在栈上创建对象的类 4.设计一个不能被继承的类 5.设计一个只能创建一个对象的类(单例模式) 二&#xff1a;c的类型转换 1.自定义类型&#xff0c;内置类型…

计算机的错误计算(八十五)

摘要 计算机的错误计算&#xff08;八十一&#xff09;至&#xff08;八十四&#xff09;介绍了双曲正弦、余弦、正割以及余割函数的计算精度问题。本节说明导致这些计算错误的主要原因。 首先&#xff0c;双曲正弦、余弦、正割以及余割函数主要包括 与 的计算&#xff0c;以…

逐行讲解Transformer的代码实现和原理讲解:nn.Linear线性层原理

视频详细讲解&#xff1a;LLM模型&#xff1a;代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 概述 经过Transformer的12个块处理完之后&#xff0c;4批文本数据得到了一个矩阵[4, 8, 16]&#xff0c;也就是每批数据都训练出了一个结果&#xff0c;在训练阶段&#xff…

Netty系列-3 ChannelFuture和ChannelPromise介绍

背景 Netty源码中大量使用了Future和Promise&#xff0c;学习ChannelFuture和ChannelFuture有助于理解Netty的设计思路。 本文的重点内容在于梳理清楚这些类的关系以及结合源码实现介绍这些类的作用&#xff0c;其中核心逻辑在于DefaultPromise和DefaultChannelPromise&#x…

GBase8sV8.8安装指南

目录 一、下载 Gbase 安装包二、安装预置条件1.确保安装包和平台适配2.安装依赖包&#xff1a;jdk(1.6版本以上)、unzip、libaio、libgcc、libstdc、ncurses、pam&#xff0c;如果缺失请提前安装 三、上传包并解压四、安装五、登录并创建数据库六、启动停止数据库七、常见问题八…

虚拟机ubuntu与主机共享文件夹

现在主机&#xff08;windows&#xff09;上新建一个共享文件夹 打开虚拟机 按下面操作打开共享文件夹 进入虚拟机的系统 cd /mnt/hgfs 如果报错 可以按下面的解决 挂载一下 sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 如果显示不存在这个文…

session机制

场景&#xff1a;当众多用户访问网站&#xff0c;发出HTTP请求&#xff0c;那么网站是如何判断哪个HTTP请求对应的是哪个用户 &#xff1f; 作用&#xff1a;用于服务端区分用户。 当用户使用客户端登录时&#xff0c;服务端会进行验证&#xff0c;验证通过后会为这次登录创建…

剖析Cookie的工作原理及其安全风险

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的&#xff0c;这意味着每次请求都是独立的&#xff0c;服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话&#xff0c;引入了Cookie机制。 1. Cookie定义 Cookie&#xff0c;也…