0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Xilinx原语IBUFDS、OBUFDS的使用及仿真

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-16 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、介绍
IBUFDS、和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。IBUFDS 用于差分输入,OBUFDS用于差分输出。

2、IBUFDS
2.1、理论
IBUFDS是差分输入缓冲器,支持低压差分信号(如LVCMOS、LVDS等)。在IBUFDS中,一个电平接口用两个独特的电平接口(I和IB)表示。一个可以认为是主信号,另一个可以认为是从信号。

IBUFDS原语示意图如下所示:

poYBAGIMo8CAALk3AAEdiqFyBeM912.png

端口说明如下表:

pYYBAGIMo8KABdfrAABz27Hr64s722.jpg

信号真值表如下:

pYYBAGIMo8OAWS7NAAB_UX4wMsI250.jpg

2.2、仿真
打开VIvado--Tools--Language Templates,搜索“IBUFDS”,可以找到Xilinx提供的模板如下:

IBUFDS #(
.DIFF_TERM("FALSE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(O), // Buffer output
.I(I), // Diff_p buffer input (connect directly to top-level port)
.IB(IB) // Diff_n buffer input (connect directly to top-level port)
);

DIFF_TERM、IBUF_LOW_PWR分别指定差分终端和性能模式,IOSTANDARD指定你需要输出的电平标准。

接下来例化一个IBUFDS原语进行测试,Verilog代码如下:

//------------------------------------------------------------------------
//--IBUFDS测试模块
//------------------------------------------------------------------------
//----------------------------------------------------
module IBUFDS_test(
input clk , //时钟,50M
input rst_n , //复位,低电平有效
input data_p , //输入数据,差分+
input data_n , //输入数据,差分-

output out
);
//----------------------------------------------------
IBUFDS #(
.DIFF_TERM ("FALSE") , // Differential Termination
.IBUF_LOW_PWR ("TRUE") , // Low power="TRUE", Highest
.IOSTANDARD ("DEFAULT") // 选择I/O电平标准,这里选择默认
)
IBUFDS_inst (
.O (out) , // 输出
.I (data_p) , // 差分输入+(需要直接连接到顶层端口)
.IB (data_n) // 差分输入-(需要直接连接到顶层端口)
);

endmodule

每隔20ns分别随机生成2个1位2进制数据作为差分输入,观察输出,Testbench如下:

//------------------------------------------------
//--IBUFDS原语仿真
//------------------------------------------------
`timescale 1ns/1ns //时间单位/精度
//----------------------------------------------------
module tb_IBUFDS_test();

reg clk ;
reg rst_n ;
reg data_p ;
reg data_n ;

wire out ;
//----------------------------------------------------
IBUFDS_test IBUFDS_test_inst(
.clk (clk) ,
.rst_n (rst_n) ,
.data_p (data_p) ,
.data_n (data_n) ,

.out (out)
);
//----------------------------------------------------
initial begin
clk = 1'b1; //初始时钟为1
rst_n data_p data_n #60 //60个时钟周期后
rst_n end
//----------------------------------------------------------
always #10 clk = ~clk; //系统时钟周期20ns

always #20 data_p always #20 data_n

endmodule

仿真结果如下:

poYBAGIMo8WAVpdHAABSPSP73JI139.png

每隔20ns,2个差分输入端口分别随机生成2个1位2进制数据;输出输入符合上述的真值表。

3、OBUFDS
3.1、理论
OBUFDS 是一个差分输出缓冲器,用于将来自 FPGA 内部逻辑的信号转换成差分信号输出,支持 TMDS、LVDS等电平标准。它的输出用O和OB两个独立接口表示。一个可以认为是主信号,另一个可以认为是从信号。

OBUFDS原语示意图如下所示:

pYYBAGIMo8eAbDmlAAB2RftdfvY623.png

端口说明如下表:

pYYBAGIMo8iAURjGAABz9h5PcJg152.jpg

信号真值表如下:

poYBAGIMo8qACBjeAABWnDTlHRQ858.jpg

可以看出,输出+端与输入一致,输出-端与输入相反。

3.2、仿真
打开VIvado--Tools--Language Templates,搜索“OBUFDS”,可以找到Xilinx提供的模板如下:

OBUFDS #(
.IOSTANDARD("DEFAULT"), // Specify the output I/O standard
.SLEW("SLOW") // Specify the output slew rate
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(I) // Buffer input
);

其中IOSTANDARD指定你需要输出的差分电平标准,SLEW根据你的要求输出FAST或者SLOW。

接下来例化一个OBUFDS原语进行测试,Verilog代码如下:

//------------------------------------------------------------------------
//--OBUFDS测试模块
//------------------------------------------------------------------------
//----------------------------------------------------
module OBUFDS_test(
input clk , //时钟,50M
input rst_n , //复位,低电平有效
input data , //输入数据

output out_p , //输出数据,差分+
output out_n //输出数据,差分-
);
//----------------------------------------------------
OBUFDS #(
.IOSTANDARD ("DEFAULT") , // 选择I/O电平标准,这里选择默认
.SLEW ("SLOW") // 选择输出速率,这里选择SLOW
)
OBUFDS_inst (
.O (out_p) , // 差分输出+(需要直接连接到顶层端口)
.OB (out_n) , // 差分输出-(需要直接连接到顶层端口)
.I (data) // 输入
);

endmodule

每隔20ns随机生成一个1位2进制数据,观察差分输出,Testbench如下:

//------------------------------------------------
//--OBUFDS原语仿真
//------------------------------------------------
`timescale 1ns/1ns //时间单位/精度
//----------------------------------------------------
module tb_OBUFDS_test();
reg clk ;
reg rst_n ;
reg data ;

wire out_p ;
wire out_n ;
//----------------------------------------------------
OBUFDS_test OBUFDS_test_inst(
.clk (clk),
.rst_n (rst_n),
.data (data),

.out_p (out_p),
.out_n (out_n)
);
//----------------------------------------------------
initial begin
clk = 1'b1; //初始时钟为1
rst_n data #60 //60个时钟周期后
rst_n end
//----------------------------------------------------------
always #10 clk = ~clk; //系统时钟周期20ns
always #20 data

endmodule

仿真结果如下:

pYYBAGIMo8yAeXMTAABKljcqjio357.png

每隔20ns,data随机生成0或者1,out_p与输入一致,out_n与输入相反;差分输出信号符合上述的真值表。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Xilinx
    +关注

    关注

    73

    文章

    2192

    浏览量

    130035
  • 仿真
    +关注

    关注

    53

    文章

    4411

    浏览量

    137710
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Xilinx FPGA串行通信协议介绍

    Xilinx FPGA因其高性能和低延迟,常用于串行通信接口设计。本文深入分析了Aurora、PCI Express和Serial RapidIO这三种在Xilinx系统设计中关键的串行通信协议。介绍了它们的特性、优势和应用场景,以及如何在不同需求下选择合适的协议。
    的头像 发表于 11-14 15:02 2050次阅读
    <b class='flag-5'>Xilinx</b> FPGA串行通信协议介绍

    【产品介绍】Modelsim:HDL语言仿真软件

    概述ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真仿真器。它采用直接优化的编译技术、Tcl/Tk技术
    的头像 发表于 11-13 11:41 224次阅读
    【产品介绍】Modelsim:HDL语言<b class='flag-5'>仿真</b>软件

    请问如何将蜂鸟E203移植到Xilinx NEXYS A7 FPGA 开发板上?

    如何将蜂鸟E203移植到Xilinx NEXYS A7 FPGA 开发板上?有参考教程吗?小白求教 主要是引脚分配,我这边有移植到Xilinx Artix-7 系列XC7A100T-fgg484的案
    发表于 11-11 07:44

    板子的差分时钟如何正确地转化为单端

    正确的时序 看起来这两种方法都是将差分转为单端,可是实际上是不一样的,我们进入差分分频IP核的代码,可以看到如下内容 IP核用的是IBUFDS原语将差分时钟信号转为了单端,所以真正的区别在于原语的区别
    发表于 10-27 07:29

    vivado仿真时GSR信号的影响

    利用vivado进行设计xilinx FPGA时,写完设计代码和仿真代码后,点击run simulation(启动modelsim进行仿真)。
    的头像 发表于 08-30 14:22 1048次阅读
    vivado<b class='flag-5'>仿真</b>时GSR信号的影响

    详解ADC电路的静态仿真和动态仿真

    ADC电路主要存在静态仿真和动态仿真两类仿真,针对两种不同的仿真,我们存在不同的输入信号和不同的数据采样,因此静态仿真和动态
    的头像 发表于 06-05 10:19 1561次阅读
    详解ADC电路的静态<b class='flag-5'>仿真</b>和动态<b class='flag-5'>仿真</b>

    基于AD9613与Xilinx MPSoC平台的高速AD/DA案例分享

    本文主要介绍基于Xilinx UltraScale+MPSoC XCZU7EV的高速AD采集与高速DA输出案例
    的头像 发表于 06-03 14:22 660次阅读
    基于AD9613与<b class='flag-5'>Xilinx</b> MPSoC平台的高速AD/DA案例分享

    XILINX XCZU67DR FPGA完整原理图

    电子发烧友网站提供《XILINX XCZU67DR FPGA完整原理图.pdf》资料免费下载
    发表于 05-30 15:29 3次下载

    Xilinx Shift RAM IP概述和主要功能

    Xilinx Shift RAM IP 是 AMD Xilinx 提供的一个 LogiCORE IP 核,用于在 FPGA 中实现高效的移位寄存器(Shift Register)。该 IP 核利用
    的头像 发表于 05-14 09:36 854次阅读

    《聊一聊ZXDoc》之CAN总线仿真、面板仿真

    ZXDoc支持CAN总线仿真、面板仿真功能,通过虚拟化通信环境,提前验证、优化和保障系统可靠性,降低开发成本与风险,面板仿真还使其画面实物化,便于操作和理解,仿真功能已成为ECU研发和
    的头像 发表于 05-09 11:30 1094次阅读
    《聊一聊ZXDoc》之CAN总线<b class='flag-5'>仿真</b>、面板<b class='flag-5'>仿真</b>

    ad9467没有数据的输出是怎么回事?

    ;// 用于时钟触发的寄存器信号 wire adc_dco_ibuf_s;// 时钟信号 regadc_dco_reg; // IBUFDS: 将差分输入信号转换为单端信号 IBUFDS i_dco
    发表于 04-28 07:52

    ISERDESE2原语端口及参数介绍

    前面在讲解HDMI接口之前,讲解过IDDR、ODDR、OSERDESE2、IBUF等原语,之后一直有读者在问什么时候更新ISERDESE2这个原语。前文讲解过这些原语都在HDMI或者RGMII中使用过,但是ISERDESE2这个
    的头像 发表于 03-17 10:52 2216次阅读
    ISERDESE2<b class='flag-5'>原语</b>端口及参数介绍

    DLPLCRC410EVM参考appsfpga代码时,没有找到obufds这个模块,怎么回事?

    在参考appsfpga 代码时,没有找到obufds这个模块,请问这个是TI提供吗,还是和xlinx有关,这一块有点不太清楚,希望有人能帮忙解答一下,谢谢
    发表于 02-26 06:46

    【米尔-Xilinx XC7A100T FPGA开发板试用】Key-test

    硬件: 一Xilinx XC7A100T FPGA开发板 二12V电源适配器 三下载器 四 win10笔记本 软件: 一Vivado (指导手册有详细的安装下载流程) 二官方按键示例工程 按键示例
    发表于 01-09 16:08