Xilinx FPGA 原语解析(三):OBUFDS差分输出缓冲器(示例源码及仿真)

目录

前言:

一、原语使用说明

二、原语实例化代码模版

三、使用示例

1.设计文件代码

2.仿真文件代码

3.仿真结果


前言:

主要参考 Xilinx 官方文档《Xilinx 7 Series FPGA and Zynq-7000 All Programmable SoC Libraries Guide for HDL Designs》UG768 (v14.7) October 2, 2013。


一、原语使用说明


OBUFDS 是支持低压差分信号的单输出缓冲器,用于将单端信号转换为差分信号,适用于需要差分信号驱动的应用场景,如高速数据传输和时钟信号传递。

它的输出表示为两个不同的端口(O和OB),一个被视为"主端口",另一个被视为"从端口",两端口电平极性相反。
端口示意图如下:

逻辑表和端口描述:

  • I : 单端输入信号;O : 差分输出信号正端;OB: 差分输出信号负端
  • OBUFDS 将输入信号 I 转换为差分对,输出 OOB。当输入 I 为高电平时,输出 OOB 会形成一对极性相反的差分信号O=1、OB=0;当输入 I 为低电平时,O=0、OB=1。

二、原语实例化代码模版


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

参数说明:

-IOSTANDARD 指定输入/输出电平标准

  • "DEFAULT": 使用 FPGA 工具默认的 I/O 标准。

  • 其他值: 如:**"LVCMOS33""LVDS_25""HSTL_I"**等根据具体的应用需求选择适当的 I/O 标准。

**-SLEW 指定输出驱动程序的转换速率。它**影响信号的上升和下降速度,即信号从低电平到高电平和从高电平到低电平的过渡速率。

  • "SLOW": 输出信号的转换速率 较慢,有助于减少电磁干扰(EMI),适用于较低频率或需要降低 EMI 的应用。
  • "FAST": 输出信号的转换速率较快,提供更高的速度,适用于高速信号传输,但可能会增加 EMI。

三、使用示例


1.设计文件代码

复制代码
// OBUFDS: Differential Output Buffer
module example_obufds (
    input wire  I,     // 单端输入信号
    output wire O,     // 差分输出信号正端
    output wire OB     // 差分输出信号负端
);

    // OBUFDS 实例化
    OBUFDS #(
        .IOSTANDARD("DEFAULT"), // 指定输出 I/O 标准
        .SLEW("SLOW")          // 指定输出斜率为慢
    ) OBUFDS_inst (
        .O (O),  // 差分输出信号正端
        .OB(OB), // 差分输出信号负端
        .I (I)   // 单端输入信号
    );

endmodule

2.仿真文件代码

复制代码
`timescale 1ns / 1ps
module tb_example_obufds();

    // 测试平台中的信号定义
    reg data_in;        // 单端输入信号
    wire data_out_p;    // 差分输出信号正端
    wire data_out_n;    // 差分输出信号负端

    // 实例化 example_obufds 模块
    example_obufds uut (
        .data_in(data_in),
        .data_out_p(data_out_p),
        .data_out_n(data_out_n)
    );

    // 初始块,用于生成测试信号
    initial begin
        // 初始化信号
        data_in = 0;

        // 生成测试信号
        #10;
        data_in = 1;

        #10;
        data_in = 0;

        #10;
        data_in = 1;

        #10;
        data_in = 0;

        #10;
        data_in = 1;
		
        #10;
        data_in = 0;

        #10;
        data_in = 1;

        #10;
        $stop; // 停止仿真
    end

endmodule

3.仿真结果

相关推荐
第二层皮-合肥14 小时前
高速采集卡FPGA设计方案及代码
fpga开发
Runner.DUT15 小时前
详解赛灵思SRIO IP并提供一种FIFO封装SRIO的收发控制器仿真验证
fpga开发
嵌入式-老费16 小时前
再谈fpga开发(fpga调试方法)
fpga开发
XINVRY-FPGA20 小时前
XCZU4EV-1FBVB900E Xilinx FPGA AMD Zynq UltraScale+ MPSoC EV(Embedded Vision)
arm开发·嵌入式硬件·计算机视觉·fpga开发·硬件架构·硬件工程·fpga
从今天开始学习Verilog20 小时前
FFT算法实现之fft IP核
算法·fpga开发
Turing_kun1 天前
基于FPGA的SPI控制FLASH读写
fpga开发
hahaha60161 天前
差模干扰 & 共模干扰
fpga开发
璞致电子2 天前
【PZ-KU060-KFB】——Kintex UltraScale 纯 FPGA 开发平台,释放高速并行计算潜能,高性价比的 FPGA 解决方案
fpga开发·fpga
我爱C编程2 天前
基于FPGA的16QAM软解调+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
fpga开发·16qam·软解调·帧同步·卷积编码·viterbi译码
南棱笑笑生2 天前
20250726让荣品的PRO-RK3566开发板使用TF卡启动
fpga开发