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.仿真结果

相关推荐
邹莉斯1 小时前
FPGA基本结构和简单原理
fpga开发·硬件工程
悲喜自渡7211 小时前
易灵思FPGA开发(一)——软件安装
fpga开发
ZxsLoves2 小时前
【【通信协议ARP的verilog实现】】
fpga开发
爱奔跑的虎子4 小时前
FPGA与Matlab图像处理之伽马校正
图像处理·matlab·fpga开发·fpga·vivado·xilinx
机器未来20 小时前
基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
arm开发·嵌入式硬件·fpga开发
贾saisai1 天前
Xilinx系FPGA学习笔记(八)FPGA与红外遥控
笔记·学习·fpga开发
吉孟雷2 天前
ZYNQ FPGA自学笔记
fpga开发·verilog·led·仿真·vivado·zynq
行者..................2 天前
1. ZYNQ 2. MPSOC 3. FPGA 4. IO分配 5. 硬件设计
fpga开发
tsumikistep2 天前
【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)
fpga开发
行者..................2 天前
FPGA学习 VIVADO Verilog 编程
学习·fpga开发