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

相关推荐
liuluyang5301 天前
SV中#和##的区别与用法
fpga开发·sva
404是NotFound呀1 天前
[FPGA] Ubuntu 22.04 安装 Vivado 2023.1 和 PetaLinux 踩坑记录
linux·ubuntu·fpga开发
liuluyang5301 天前
SV中if与iff区别与用法
fpga开发·sv
高速上的乌龟2 天前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.2 Marvell MV-Q3244 Phy的Podl电路详解
单片机·嵌入式硬件·fpga开发·软件工程
zlinear数据采集卡2 天前
深入底层:从SAR ADC原理到模拟前端设计,解析高精度数据采集卡的硬件架构
c语言·前端·嵌入式硬件·fpga开发·自动化·硬件架构
夜幕下的灯火2 天前
基于 FPGA 的 SD 卡音频播放与电子琴系统
fpga开发·毕业设计·课程设计·fpga·altera
weiweiliulu2 天前
FPGA和MATLAB仿真测试常会用的语句
fpga开发
FPGA_小田老师3 天前
PCIe XDMA数据传输:三种工作模式详解(ARM发起 → FPGA自主)
fpga开发·pcie·xdma·c2h·fpga触发传输
GateWorld3 天前
LCD显示技术完全指南:原理·制造·驱动·FPGA实现之驱动四
fpga开发·lcd显示·fpga点亮屏幕·minilvds·fpga点屏
喵喵苗3 天前
【Vivado2024.2】纯PL端128×128 Sobel边缘检测IP封装 | 单AXI4-Stream接口设计与仿真验证
人工智能·fpga开发