那曲檬骨新材料有限公司

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

    關注

    1630

    文章

    21796

    瀏覽量

    606012
  • Xilinx
    +關注

    關注

    71

    文章

    2171

    瀏覽量

    122139
  • 代碼
    +關注

    關注

    30

    文章

    4827

    瀏覽量

    69052

原文標題:FPGA之IO信號類型深入理解

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Xilinx 7系列FPGA的時鐘結構解析

    通過上一篇文章“時鐘管理技術”,我們了解Xilinx 7系列FPGA主要有全局時鐘、區域時鐘、時鐘管理塊(CMT)。 通過以上時鐘資源的結合,Xil
    發表于 08-31 10:44 ?2717次閱讀
    <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 ?1375次閱讀
    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 ?6496次閱讀

    兩種視頻流的展示介紹

    該視頻演示展示了兩種視頻流,這些視頻流通過Xilinx?7系列FPGA和SoC器件實現的機器視覺
    的頭像 發表于 11-23 06:43 ?3329次閱讀

    兩種JESD204B A/D轉換器轉FPGA設置與實現技巧

    來自ADI公司和Xilinx公司的專家共同展示兩種JESD204B A/D轉換器轉FPGA設置,同時介紹其實現技巧。
    的頭像 發表于 06-21 06:01 ?2466次閱讀

    Xilinx 7系列FPGA介紹

    Xilinx 7系列FPGA概覽 文章目錄 Xilinx 7
    的頭像 發表于 11-13 18:03 ?1.5w次閱讀

    Xilinx 7系列FPGA簡介--選型參考

    FPGA采用的是統一的28nm設計架構,客戶不同子系列的使用方式是統一的,消除了不同子系列
    發表于 01-30 06:00 ?21次下載
    <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 ?1978次閱讀

    MATLAB/simulink中兩種實現建模方式的優勢

    導讀:本期文章主要介紹MATLAB/simulink中建模時的兩種不同實現方式,一是直接用現成的文件庫中的模塊進行搭建,一
    的頭像 發表于 09-15 10:10 ?5210次閱讀

    淺談S7-200兩種尋址方式

    S7-200系列中,尋址方式分為兩種:直接尋址和間接尋址。直接尋址方式是指在指令中直接使用存儲
    的頭像 發表于 10-09 16:43 ?3511次閱讀

    Xilinx 7系列與Ultrascale系列FPGA的區別

    Xilinx是一家專業的可編程邏輯器件(PLD)廠商,其產品包括FPGA、CPLD、SOC等。XilinxFPGA產品線有多個系列,其中
    發表于 09-15 14:44 ?6199次閱讀
    <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>的區別
    百家乐官网蓝盾有赢钱的吗| 小孟百家乐的玩法技巧和规则| 澳门百家乐官网送彩金| 鸡东县| 万豪国际开户| 帝豪娱乐城| 百家乐官网重要心态| 瓮安县| 卢龙县| 百家乐官网视频中国象棋| 百家乐官网视频游戏世界| 百家乐官网ag厅投注限额| 大发888最新网址| 威尼斯人娱乐城网| 申博百家乐公式软件| 百家乐龙虎台布价格| 百家乐必胜打| 大发888新老虎机| 澳门金沙赌场| 百家乐官网专业赌徒| 百家乐官网方法技巧| 百家乐官网的桌子| 百家乐官网英皇娱乐| 百家乐官网门户网站| 金龍百家乐官网的玩法技巧和规则| 百家乐那里可以玩| 六合彩官方| 百樂坊百家乐的玩法技巧和规则 | 迪威百家乐官网娱乐| 百家乐官网没边| 定24山尺寸深浅土色| 百家乐大西洋| 网上百家乐网| 大发888体育投注| 百家乐官网出千原理| 百家乐官网输一压二| 百家乐官网制胜法| 线上百家乐代理| 乐百家乐彩现金开户| 威尼斯人娱乐城赌博网| 女神娱乐城|