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

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

3天内不再提示

在Xilinx 7系列FPGA上两种实现方式的差别

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-10-19 09:31 次阅读

FPGA设计开发中,很多场合会遇到同一根信号既可以是输入信号,又可以是输出信号,即IO类型(Verilog定义成inout)。

对于inout型的信号,我们既可以使用FPGA原语来实现,也可以使用Verilog代码来实现。下面将介绍在Xilinx 7系列FPGA上两种实现方式的差别和注意点。

1.FPGA原语实现

首先,我们编写的代码如下:

`define PRIMITIVE 
 
 module io_buf(
     input    T    ,
     input    I    ,
     output    O    ,
     inout    IO
 );
 
 `ifdef PRIMITIVE
     IOBUF #(
         .DRIVE            (12            ),    // Specify the output drive strength
         .IBUF_LOW_PWR    ("TRUE"        ),    // Low Power - "TRUE", High Performance = "FALSE" 
         .IOSTANDARD        ("DEFAULT"    ),    // Specify the I/O standard
         .SLEW            ("SLOW"        )    // Specify the output slew rate
     ) IOBUF_INST (
         .O                (O            ),    // Buffer output
         .IO                (IO            ),    // Buffer inout port (connect directly to top-level port)
         .I                (I            ),    // Buffer input
         .T                (T            )    // 3-state enable input, high=input, low=output
     );
 `else
     assign IO = T? I:1'bz;
     assign O  = IO;
 `endif
     
 endmodule

该代码通过原语IOBUF实现IO功能,使用Vivado编译后的原理图如下图所示。可以看到IOBUF内部由OBUFT和IBUF原语构成。

8927cd10-4f3d-11ed-a3b6-dac502259ad0.png

2.使用Verilog实现

把`define PRIMITIVE注释掉,则为通过Verilog的实现方式,如下图:

//`define PRIMITIVE 

module io_iobuf(
    input    T    ,
    input    I    ,
    output    O    ,
    inout    IO
);

`ifdef PRIMITIVE
    IOBUF #(
        .DRIVE            (12            ),    // Specify the output drive strength
        .IBUF_LOW_PWR    ("TRUE"        ),    // Low Power - "TRUE", High Performance = "FALSE" 
        .IOSTANDARD        ("DEFAULT"    ),    // Specify the I/O standard
        .SLEW            ("SLOW"        )    // Specify the output slew rate
    ) IOBUF_INST (
        .O                (O            ),    // Buffer output
        .IO                (IO            ),    // Buffer inout port (connect directly to top-level port)
        .I                (I            ),    // Buffer input
        .T                (T            )    // 3-state enable input, high=input, low=output
    );
`else
    assign IO = T? I:1'bz;
    assign O  = IO;
`endif
    
endmodule

该代码使用Vivado编译后的原理图如下图所示。该实现方式也会调用IOBUF原语,但多消耗了一个LUT资源。

894d860e-4f3d-11ed-a3b6-dac502259ad0.png

通过Verilog实现时,我们在把IO信号当成输入时给赋值高阻态(1‘bz)。假如我们把此时的IO信号赋值1‘b0或者1‘b1,会出现什么情况呢?我们把1‘bz写成1‘b1,如下所示:

 //`define PRIMITIVE 
 
 module io_iobuf(
     input    T    ,
     input    I    ,
     output    O    ,
     inout    IO
 );
 
 `ifdef PRIMITIVE
     IOBUF #(
         .DRIVE            (12            ),    // Specify the output drive strength
         .IBUF_LOW_PWR    ("TRUE"        ),    // Low Power - "TRUE", High Performance = "FALSE" 
         .IOSTANDARD        ("DEFAULT"    ),    // Specify the I/O standard
         .SLEW            ("SLOW"        )    // Specify the output slew rate
     ) IOBUF_INST (
         .O                (O            ),    // Buffer output
         .IO                (IO            ),    // Buffer inout port (connect directly to top-level port)
         .I                (I            ),    // Buffer input
         .T                (T            )    // 3-state enable input, high=input, low=output
     );
 `else
     assign IO = T? I:1'b1;
     assign O  = IO;
 `endif
     
 endmodule

编译后的原理图如下,可以看到并不会调用IOBUF原语,IO的不能实现输入功能,这就是解释了为什么在使用Verilog实现一根信号的IO功能时需要赋值1‘bz。

8958dd56-4f3d-11ed-a3b6-dac502259ad0.png

审核编辑:彭静

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

    关注

    1625

    文章

    21648

    浏览量

    601465
  • Xilinx
    +关注

    关注

    71

    文章

    2161

    浏览量

    120924
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68290

原文标题:FPGA之IO信号类型深入理解

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Xilinx 7系列FPGA的时钟结构解析

    通过上一篇文章“时钟管理技术”,我们了解Xilinx 7系列FPGA主要有全局时钟、区域时钟、时钟管理块(CMT)。 通过以上时钟资源的结合,Xil
    发表于 08-31 10:44 2327次阅读
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>7</b><b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>的时钟结构解析

    AMD Xilinx 7系列FPGA的Multiboot多bit配置

    Multiboot是一AMD Xilinx 7系列FPGA
    的头像 发表于 02-25 10:54 1173次阅读
    AMD <b class='flag-5'>Xilinx</b> <b class='flag-5'>7</b><b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>的Multiboot多bit配置

    求大神分享基于FPGA的DDFS与DDWS的两种实现方式

    DDS的基本原理是什么,有什么性能指标?基于FPGA的DDFS与DDWS两种实现方式
    发表于 04-30 06:13

    Xilinx 7系列FPGA管脚是如何定义的?

    FPGAs Package Files的ASCII Pinout Files子节中,按照FPGA器件家族和器件封装分类,给出了7系列所有器件Pinout定义链接地址。官网给出CSV和
    发表于 05-28 09:23

    Xilinx 7系列FPGA芯片管脚定义与封装

    FPGAs Package Files的ASCII Pinout Files子节中,按照FPGA器件家族和器件封装分类,给出了7系列所有器件Pinout定义链接地址。官网给出CSV和
    发表于 07-08 08:00

    xilinx公司的7系列FPGA应用指南

    本文是关于 xilinx公司的7系列FPGA应用指南。xilinx公司的7
    发表于 08-07 17:22 201次下载
    <b class='flag-5'>xilinx</b>公司的<b class='flag-5'>7</b><b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>应用指南

    实现ARM9与FPGA的并口通信的两种方式

    并口通信是最常用基础功能,实现ARM9与FPGA的并口通信有两种方式,一颇为巧妙,利用SMC(Static Memory Controll
    发表于 06-17 09:41 6356次阅读

    两种视频流的展示介绍

    该视频演示展示了两种视频流,这些视频流通过Xilinx®7系列FPGA和SoC器件实现的机器视觉
    的头像 发表于 11-23 06:43 3276次阅读

    两种JESD204B A/D转换器转FPGA设置与实现技巧

    来自ADI公司和Xilinx公司的专家共同展示两种JESD204B A/D转换器转FPGA设置,同时介绍其实现技巧。
    的头像 发表于 06-21 06:01 2378次阅读

    Xilinx 7系列FPGA介绍

    Xilinx 7系列FPGA概览 文章目录 Xilinx 7
    的头像 发表于 11-13 18:03 1.5w次阅读

    Xilinx 7系列FPGA简介--选型参考

    FPGA采用的是统一的28nm设计架构,客户不同子系列的使用方式是统一的,消除了不同子系列
    发表于 01-30 06:00 17次下载
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>7</b><b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>简介--选型参考

    MATLAB/simulink中建模时的两种不同实现方式

    导读:本期文章主要介绍MATLAB/simulink中建模时的两种不同实现方式,一是直接用现成的文件库中的模块进行搭建,一
    的头像 发表于 09-15 10:07 1819次阅读

    MATLAB/simulink中两种实现建模方式的优势

    导读:本期文章主要介绍MATLAB/simulink中建模时的两种不同实现方式,一是直接用现成的文件库中的模块进行搭建,一
    的头像 发表于 09-15 10:10 4896次阅读

    浅谈S7-200两种寻址方式

    S7-200系列中,寻址方式分为两种:直接寻址和间接寻址。直接寻址方式是指在指令中直接使用存储
    的头像 发表于 10-09 16:43 3254次阅读

    Xilinx 7系列与Ultrascale系列FPGA的区别

    Xilinx是一家专业的可编程逻辑器件(PLD)厂商,其产品包括FPGA、CPLD、SOC等。XilinxFPGA产品线有多个系列,其中
    发表于 09-15 14:44 4944次阅读
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>7</b><b class='flag-5'>系列</b>与Ultrascale<b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>的区别