威三电子  

               威三电子

LVDS系列1:Xilinx的IBUFDS原语

2026-05-22 11:12:16

浏览:

LVDS(全称Low-Voltage Differential Signaling,低压差分信号)是一种高速、低功耗的差分信号传输技术,广泛应用于数字通信、视频

LVDS(全称Low-Voltage Differential Signaling,低压差分信号)是一种高速、低功耗的差分信号传输技术,广泛应用于数字通信、视频传输、高速数据接口等领域。

         如下图所示,LVDS使用一对相位相反的差分信号传输数据,通过两者电压差来判断逻辑值,在发送端单端转差分,在接收端差分转单端。使用差分信号在外部传输时抗干扰能力更强,外部噪声同时作用与两根差分数据线,那么两者电压差基本不受影响。

         差分信号用于信号传输,但是在FPGA内部数据处理时,需要将差分信号变为单端使用,所以就需要将外来的差分信号转为单端,可以使用IBUFDS原语实现,将内部的单端信号转为差分信号输出,可以使用OBUFDS原语实现。

 

w   IBUFDS原语:

上图中,左侧的输入管脚IIBFPGA焊盘输入的外部信号,其中I为差分信号的正端P端,IB为差分信号的负端P端;

该原语可以将差分信号转换为单端信号,右侧的O为原语输出的单端信号,O的值如下:

I=1IB0O1

I=0IB1O0

I=IB时,此时原语不会工作,会保持之前的值不变;

 

原语的例化形式如下:

7系器件:

   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)

   );

 

Ultrascale+器件:

   IBUFDS IBUFDS_inst (

      .O(O),   // 1-bit output: Buffer output

      .I(I),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)

      .IB(IB)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)

   );

 

可以看到两个原语的端口一致,不过7系的原语多了三个参数;

参数说明:

参数DIFF_TERM:差分终端电阻,控制是否启用FPGA内部的差分终端电阻,用于匹配传输线阻抗(通常为100Ω),减少信号反射。

'TRUE':启用内部终端电阻,适用于未外接终端电阻的差分信号链路(如LVDS长距离传输)。

'FALSE':禁用内部终端电阻,需外接物理电阻(常见于短距离或已预匹配阻抗的电路)。

参数IBUF_LOW_PWR:低功耗模式,控制输入缓冲器的功耗与性能平衡。

'TRUE':低功耗模式,适用于对功耗敏感的场景(如电池供电设备),但可能降低信号带宽和抗噪能力。

'FALSE':高性能模式,提升信号处理速度,适用于高速接口(如Camera Link)。

例如低速传感器接口选'TRUE',千兆以太网或高速ADC接口选'FALSE'

 

参数IOSTANDARD:输入电平标准,指定输入信号的电气标准,确保FPGA引脚电平与外部设备兼容。

常见值:

'LVDS_25'LVDS差分信号,1.25V共模电压(默认值,Bank供电电压为2.5V)。

'LVDS'LVDS差分信号,1.25V共模电压(默认值, Bank供电电压为1.8V)。

'LVCMOS18':单端1.8V LVCMOS电平。

'DEFAULT':自动适配Bank默认电平,但需确保FPGA Bank供电与外部信号匹配。

其中Xilinx 7系列FPGAHP Bank仅支持1.2V~1.8V电平,HR Bank支持3.3V电平,需结合实际使用的Bank类型选择。

 

其中差分的输入端口需直接连接到顶层的输入端口;

IIB极性相反,原语才能正常工作;

 

关于Ultrascale+器件,UltraScale+系列对I/O逻辑进行了重构,部分参数(如DIFF_TERM默认集成到I/O Bank的全局配置中,而非通过原语单独设置。

例如差分终端电阻(DIFF_TERM)的启用/禁用由VivadoI/O约束文件(XDC统一管理。

电平标准(IOSTANDARD)通过FPGA Bank的电压配置自动适配,减少手动参数设置需求。

Ultrascale+器件功耗与性能的自动化控制逻辑IBUF_LOW_PWR参数在UltraScale+器件中移除,改为由工具根据设计时序和功耗约束自动选择***模式。

 

当前UltraScale+器件可通过属性约束替代参数

UltraScale+中,原语参数的功能被转移到I/O端口属性中。例如:

 (* IOSTANDARD = 'LVDS_25', DIFF_TERM = 'TRUE' *)

IBUFDS ibufds_inst (.O(O), .I(I), .IB(IB));

这种方式将电平标准和终端电阻配置直接绑定到端口,而非原语内部参数去控制。

 

w   IBUFDS原语仿真;

测试模块:

module top_7series_ibufds(

         input          wire                     clk,

         input          wire                     rst,

         input          wire                     din_p,

         input          wire                     din_n,

         output        wire                     dout

    );

 

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(dout),  // Buffer output

  .I(din_p),  // Diff_p buffer input (connect directly to top-level port)

  .IB(din_n) // Diff_n buffer input (connect directly to top-level port)

);

 

endmodule

 

testbench

设置两个随机的信号输入,然后仿真查看原语对于输入的处理结果,其中每100ns产生随机的输入,且两个输入极性不一定相反;

`timescale 1ns / 1ps

 

module tb;

reg                                         clk;

reg                                         rst;

reg                                         data_p;

reg                                         data_n;

wire                                        dout;

 

initial begin

         clk = 0;

         rst = 1;

         #100

         rst = 0;

end

 

initial begin

         data_p = 0;

         data_n = 0;

         while(1)begin

                   #100

                   data_p = $random;

                   data_n = $random;

         end

end

 

top_7series_ibufds inst_top_7series_ibufds (

         .clk(clk),

         .rst(rst),

         .din_p(data_p),

         .din_n(data_n),

         .dout(dout)

);

 

endmodule

 

仿真结果:

可以看到,

在第1个黄线处,data_p输入0data_n输入1,此时输出为0,输出有效;

在第2个黄线处,data_p输入1data_n输入1,那么输出就保持了之前第1个黄线处的有效输出0,此时原语不工作;

在第3个黄线处,data_p输入1data_n输入0,此时输出为1,输出有效;

在第4个黄线处,data_p输入1data_n输入1,输出又保持了之前第3个黄线处的有效输出1,此时原语不工作;

仿真的结果符合原语的特性;

本文章由威三学院出品

对课程感兴趣可以联系:15921999232

0
LVDS系列1:Xilinx的IBUFDS原语
LVDS(全称Low-Voltage Differential Signaling,低压差分信号)是一种高速、低功耗的差分信号传输技术,广泛应用于数字通信、视频
长按图片保存/分享

北京威三电子科技有限公司

突破技术壁垒,芯创智联领航未来

 


北京威三电子科技有限公司 版权所有
京ICP备2026012969号
 

热线:

159-2199-9232

 

图片展示

淘宝店铺:

威三科教

地址:

北京市延庆区辰龙国际6号楼406室

微信公众号:

北京威三电子科技有限公司 

热线:159-2199-9232

淘宝店铺:威三科教

地址:北京市延庆区辰龙国际6号楼406


微信公众号

图片展示
北京威三电子科技有限公司 版权所有| 京ICP备2026012969号
微信公众号
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
客服中心
热线电话
15921999232
上班时间
周一到周五
二维码
扫码关注
添加微信好友,详细了解产品
使用企业微信
“扫一扫”加入群聊
复制成功
添加微信好友,详细了解产品
我知道了