Xilinx FPGA 原语解析(二):IBUFDS差分输入缓冲器(示例源码及仿真)

目录

前言:

一、原语使用说明

二、原语实例化代码模版

三、使用示例

1.设计文件代码

2.仿真文件代码

3.仿真结果


前言:

本文主要参考资料xilinx手册,《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL DesignsUG768 (v14.7) October 2, 2013


一、原语使用说明


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

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

端口示意图如下:

逻辑表和端口描述:

  • I: 差分信号的正输入;IB: 差分信号的负输入;O: 单端输出信号
  • 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.仿真结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值