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
    +关注

    关注

    71

    文章

    2164

    浏览量

    121015
  • 仿真
    +关注

    关注

    50

    文章

    4044

    浏览量

    133424
收藏 人收藏

    评论

    相关推荐

    如何申请xilinx IP核的license

    在使用FPGA的时候,有些IP核是需要申请后才能使用的,本文介绍如何申请xilinx IP核的license。
    的头像 发表于 10-25 16:48 203次阅读
    如何申请<b class='flag-5'>xilinx</b> IP核的license

    Xilinx ZYNQ 7000系列SoC的功能特性

    本文介绍下Xilinx ZYNQ 7000系列SoC的功能特性、资源特性、封装兼容性以及如何订购器件。
    的头像 发表于 10-24 15:04 350次阅读
    <b class='flag-5'>Xilinx</b> ZYNQ 7000系列SoC的功能特性

    如何在ModelSim中添加Xilinx仿真

    今天给大侠带来在FPGA设计应用中如何在ModelSim中添加Xilinx仿真库,话不多说,上货。 注意:ModelSim一定要安装在不带空格的目录下,即不要安装在“Program
    发表于 07-03 18:16

    FPGA | Xilinx ISE14.7 LVDS应用

    号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BUF)。 注意在分配引脚时,只需要分配SIGNAL_P的引脚,SIGNAL_N会自动连接到相应差分对引脚上;若没有使用差分信号原语
    发表于 06-13 16:28

    xilinx中的carry4原语在高云FPGA中用什么原语替代?

    xilinx中的carry4原语在高云FPGA中用什么原语替代
    发表于 05-09 16:13

    Xilinx ISE14.7 LVDS的应用

    最近项目需要用到差分信号传输,于是看了一下FPGA上差分信号的使用。Xilinx FPGA中,主要通过原语实现差分信号的收发:OBUFDS(差分输出BUF),IBUFDS(差分输入BU
    的头像 发表于 05-07 17:17 788次阅读
    <b class='flag-5'>Xilinx</b> ISE14.7 LVDS的应用

    电路仿真软件有哪些类型 电路仿真接线app软件哪个好

    软件有Xilinx ISE、Altera Quartus等。这类软件提供了大量的数字逻辑器件模型库,用户可以通过拖拽和连接不同的器件模型,轻松构建和验证数字电路的功能和性能。在这类软件中,用户可以对时序关系、逻辑功能等进行仿真与调试,以确
    的头像 发表于 05-04 10:49 3039次阅读

    Xilinx SelectIO资源内部的IDELAYE2应用介绍

    本文我们介绍下Xilinx SelectIO资源内部IDELAYE2资源应用。IDELAYE2原句配合IDELAYCTRL原句主要用于在信号通过引脚进入芯片内部之前,进行延时调节,一般高速端口信号由于走线延时等原因,需要通过IDELAYE2原语对数据做微调,实现时钟与数据
    的头像 发表于 04-26 11:33 1842次阅读
    <b class='flag-5'>Xilinx</b> SelectIO资源内部的IDELAYE2应用介绍

    基于FPGA的TMDS编码

    操作我们可以使用原语OSERDES2实现10-to-1的过程。最后用OBUFDS将串行数据转换为差分信号输出即可。
    发表于 04-09 15:45

    Xilinx fpga芯片系列有哪些

    Xilinx FPGA芯片拥有多个系列和型号,以满足不同应用领域的需求。以下是一些主要的Xilinx FPGA芯片系列及其特点。
    的头像 发表于 03-14 16:24 3079次阅读

    请问两个KC705板子之间,用USER_SMA_GPIO Y23互连不成功,求教。

    做成差分信号了,两根SMA线缆各0.4米长, 发送端用了这个原语 --OBUFDS_inst0 : OBUFDS --generic map ( --IOSTANDARD =>
    发表于 02-02 16:23

    FPGA设计高级技巧 Xilinx

    FPGA设计高级技巧 Xilinx
    发表于 01-08 22:15

    如何用RTL原语实现MUX门级映射呢?

    对于前端设计人员,经常会需要一个MUX来对工作模式,数据路径进行明确(explicit)的声明,这个对于中后端工程师下约束也很重要。这里介绍一种巧用的RTL原语,实现MUX的方法。
    的头像 发表于 12-14 16:26 1348次阅读
    如何用RTL<b class='flag-5'>原语</b>实现MUX门级映射呢?

    怎样单独使用modelsim仿真xilinx呢?

    直接在modelsim软件内执行.do文件进行仿真,不通过vivado调用modelsim,vivado仅用于生成IP核。
    的头像 发表于 12-04 18:26 1354次阅读
    怎样单独使用modelsim<b class='flag-5'>仿真</b><b class='flag-5'>xilinx</b>呢?

    简述Xilinx 7系列FPGA芯片相关知识

    Xilinx 7系列 芯片 应用非常广泛,具有成本低、性能强悍、成熟稳定的特点,目前Xilinx( AMD )已延长该系列芯片的生命周期至少到2035年。 本文主要介绍Xilinx 7系列 FPGA
    的头像 发表于 11-28 10:20 1081次阅读
    简述<b class='flag-5'>Xilinx</b> 7系列FPGA芯片相关知识