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

相关推荐
hahaha60166 小时前
Xilinx 325T FPGA 中的 GT(GTP 或 GTX)收发器和普通 LVDS 接口的差模和共模电压
fpga开发
hahaha601612 小时前
FPGA没有使用的IO悬空对漏电流有没有影响
fpga开发
贝塔实验室1 天前
FPGA 动态重构配置流程
驱动开发·fpga开发·硬件架构·硬件工程·射频工程·fpga·基带工程
GateWorld1 天前
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
fpga开发·mipi csi2
思尔芯S2C1 天前
思尔芯携手Andes晶心科技,加速先进RISC-V 芯片开发
人工智能·科技·fpga开发·risc-v·debugging·prototyping·soc validation
tiantianuser1 天前
RDMA简介5之RoCE v2队列
fpga开发·verilog·fpga·rdma·高速传输·rocev2
碎碎思2 天前
打破延迟极限的 FPGA 机械键盘
fpga开发·计算机外设
hahaha60162 天前
Flash烧录速度和加载配置速度(纯FPGA & ZYNQ)
fpga开发
hahaha60162 天前
ARINC818编解码设计FPGA实现
fpga开发
XMAIPC_Robot2 天前
基于RK3568的多网多串电力能源1U机箱解决方案,支持B码,4G等
linux·fpga开发·能源·边缘计算