问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Xilinx FPGA IBUFDS差分输入缓冲器详解:从原理到实战

创作时间:
作者:
@小白创作中心

Xilinx FPGA IBUFDS差分输入缓冲器详解:从原理到实战

引用
CSDN
1.
https://m.blog.csdn.net/qq_45910789/article/details/141898475

本文是一篇关于Xilinx FPGA中IBUFDS差分输入缓冲器的使用指南。文章详细介绍了IBUFDS的使用说明、实例化代码模板,并通过具体的使用示例和仿真结果,帮助读者更好地理解和掌握这一重要组件的使用方法。

前言

本文主要参考资料《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL Designs》(UG768,v14.7,2013年10月2日)。

一、原语使用说明

IBUFDS是一个支持低压差分信号的输入缓冲器,用于接收差分信号对(如LVDS),并将其转换为单端信号输出。它可以用于时钟信号、数据总线信号等。

差分输入:
IBUFDS
接受两个差分信号(差分信号正输入I和差分信号负输入IB)作为输入,并将其转换为单端输出(单端输出信号O)。

端口示意图如下:

逻辑表和端口描述:

  • I:差分信号的正输入;

  • IB:差分信号的负输入;

  • O:单端输出信号

  • I和IB端口信号极性相反,说明差分信号对正常工作,输入的差分信号有效。输出端口O输出0/1。

二、原语实例化代码模版

打开Vivado左侧导航栏中的"Language Templates",搜索“IBUFDS”,找到可直接调用的原语模块实例化代码

参数说明:

DIFF_TERM用于配置IBUFDS(输入差分缓冲器)或其他差分输入缓冲器的差分终端。

  • "TRUE":启用差分终端。这会自动在差分输入端添加终端电阻,以减少信号噪声、反射并提高信号完整性。适用于需要高信号质量的应用场景。
  • "FALSE":不启用差分终端。默认情况下不会添加终端电阻,通常用于对信号质量要求不高的应用或外部电路已经处理了终端匹配的情况。

-TERMIBUF_LOW_PWR用于控制缓冲器的功耗模式。

  • "TRUE":启用低功耗模式。可以减少IBUFDS缓冲器的功耗,但低功耗模式通常会略微降低性能,但在大多数情况下,这种性能降低是微不足道的。
  • "FALSE":启用最高性能模式。选择这个选项会使IBUFDS缓冲器以最高的性能运行,但功耗会增加。这个模式适合对性能要求很高的应用场景。

-IOSTANDARD用于指定IBUFDS的输入/输出标准。IOSTANDARD决定了信号的电平标准、驱动能力和信号的电气特性。

  • "DEFAULT":使用FPGA工具默认的I/O标准。如果没有特别的要求,可以使用默认值较为通用的标准。
  • 特定标准:根据实际应用需要,选择具体的I/O标准。具体的标准决定了电压电平和信号的兼容性。例如,"LVCMOS33"、"LVDS_25"、"HSTL_I"等。常见的I/O标准有LVCMOS (Low Voltage CMOS),"LVCMOS33"(3.3V CMOS标准)、"LVCMOS25"(2.5V CMOS标准)、"LVCMOS18"(1.8V CMOS标准);LVDS (Low Voltage Differential Signaling):"LVDS_25"(2.5V LVDS标准)、"LVDS_33"(3.3V LVDS标准)

三、使用示例

1.设计文件代码

module example_ibufds (
    input wire  rx_sysref_p,  // 差分信号正输入
    input wire  rx_sysref_n,  // 差分信号负输入
    output wire rx_sysref     // 单端输出信号
);
    // IBUFDS 实例化
    IBUFDS #(
        .DIFF_TERM   ("TRUE"  ), // 启用差分终端以提高信号质量
        .IBUF_LOW_PWR("TRUE"   ), // 启用低功耗模式
        .IOSTANDARD  ("LVDS_25")  // 指定 LVDS 2.5V I/O 标准
    ) IBUFDS_inst0 (
        .O (rx_sysref  ), // 缓冲器输出
        .I (rx_sysref_p), // 差分正输入
        .IB(rx_sysref_n)  // 差分负输入
    );
endmodule

2.仿真文件代码

`timescale 1ns / 1ps
module tb_example_ibufds();
    // 测试平台中的信号定义
    reg rx_sysref_p;  // 差分信号正输入
    reg rx_sysref_n;  // 差分信号负输入
    wire rx_sysref;   // 单端输出信号
    // 实例化 example_ibufds 模块
    example_ibufds uut (
        .rx_sysref_p(rx_sysref_p),
        .rx_sysref_n(rx_sysref_n),
        .rx_sysref(rx_sysref)
    );
    // 初始块,用于生成测试信号
    initial begin
        // 初始化信号
        rx_sysref_p = 0;
        rx_sysref_n = 1;
        // 生成差分信号
        #10;
        rx_sysref_p = 1;
        rx_sysref_n = 0;
        #10;
        rx_sysref_p = 0;
        rx_sysref_n = 1;
        #10;
        rx_sysref_p = 1;
        rx_sysref_n = 0;
        #10;
        rx_sysref_p = 0;
        rx_sysref_n = 0;
        #10;
        rx_sysref_p = 1;
        rx_sysref_n = 1;
        #10;
        rx_sysref_p = 0;
        rx_sysref_n = 1;
        #10;
        rx_sysref_p = 1;
        rx_sysref_n = 0;
        #10;
        $stop; // 停止仿真
    end
endmodule

3.仿真结果

由于原文中没有提供仿真结果的具体图片或描述,因此这里无法展示仿真结果。建议读者根据上述代码自行进行仿真,以验证IBUFDS的正确使用。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号