0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)談FPGA verilog中的function用法與例子

FPGA學(xué)習(xí)交流 ? 2018-08-10 13:42 ? 次閱讀

大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來聊一聊FPGA verilog中的function用法與例子。

函數(shù)的功能和任務(wù)的功能類似,但二者還存在很大的不同。在 Verilog HDL 語法中也存在函數(shù)的定義和調(diào)用。

1.函數(shù)的定義
函數(shù)通過關(guān)鍵詞 function 和 endfunction 定義,不允許輸出端口聲明(包括輸出和雙向端口) ,但可以有多個(gè)輸入端口。函數(shù)定義的語法如下:

function [range] function_id;
input_declaration
other_declarations
procedural_statement
endfunction

其中,function 語句標(biāo)志著函數(shù)定義結(jié)構(gòu)的開始;[range]參數(shù)指定函數(shù)返回值的類型或位寬,是一個(gè)可選項(xiàng),若沒有指定,默認(rèn)缺省值為 1 比特的寄存器數(shù)據(jù);function_id 為所定義函數(shù)的名稱,對(duì)函數(shù)的調(diào)用也是通過函數(shù)名完成的,并在函數(shù)結(jié)構(gòu)體內(nèi)部代表一個(gè)內(nèi)部變量,函數(shù)調(diào)用的返回值就是通過函數(shù)名變量傳遞給調(diào)用語句;input_declaration 用于對(duì)函數(shù)各個(gè)輸入端口的位寬和類型進(jìn)行說明,在函數(shù)定義中至少要有一個(gè)輸入端口;endfunction為函數(shù)結(jié)構(gòu)體結(jié)束標(biāo)志。下面給出一個(gè)函數(shù)定義實(shí)例。

定義函數(shù)實(shí)例:
function AND; //定義輸入變量
input A, B; //定義函數(shù)體
begin
AND = A && B;
end
endfunction

函數(shù)定義在函數(shù)內(nèi)部會(huì)隱式定義一個(gè)寄存器變量, 該寄存器變量和函數(shù)同名并且位寬也一致。函數(shù)通過在函數(shù)定義中對(duì)該寄存器的顯式賦值來返回函數(shù)計(jì)算結(jié)果。此外,還有下列
幾點(diǎn)需要注意:
(1)函數(shù)定義只能在模塊中完成,不能出現(xiàn)在過程塊中;
(2)函數(shù)至少要有一個(gè)輸入端口;不能包含輸出端口和雙向端口;
(3) 在函數(shù)結(jié)構(gòu)中, 不能使用任何形式的時(shí)間控制語句 (#、 wait 等) , 也不能使用 disable中止語句;
(4)函數(shù)定義結(jié)構(gòu)體中不能出現(xiàn)過程塊語句(always 語句) ;
(5)函數(shù)內(nèi)部可以調(diào)用函數(shù),但不能調(diào)用任務(wù)。

2.函數(shù)調(diào)用
和任務(wù)一樣,函數(shù)也是在被調(diào)用時(shí)才被執(zhí)行的,調(diào)用函數(shù)的語句形式如下: func_id(expr1, expr2, ........., exprN) ,其中,func_id 是要調(diào)用的函數(shù)名,expr1, expr2, ......exprN是傳遞給函數(shù)的輸入?yún)?shù)列表,該輸入?yún)?shù)列表的順序必須與函數(shù)定義時(shí)聲明其輸入的順序相同。下面給出一個(gè)函數(shù)調(diào)用實(shí)例。

函數(shù)調(diào)用實(shí)例:
module comb15 (A, B, CIN, S, COUT);

input [3:0] A, B;
input CIN;
output [3:0] S;
output COUT;

wire [1:0] S0, S1, S2, S3;

function signed [1:0] ADD;

input A, B, CIN;

reg S, COUT;

begin
S = A ^ B ^ CIN;
COUT = (A&B) | (A&CIN) | (B&CIN);
ADD = {COUT, S};
end
endfunction

assign S0 = ADD (A[0], B[0], CIN),
S1 = ADD (A[1], B[1], S0[1]),
S2 = ADD (A[2], B[2], S1[1]),
S3 = ADD (A[3], B[3], S2[1]),
S = {S3[0], S2[0], S1[0], S0[0]},
COUT = S3[1];
endmodule

在函數(shù)調(diào)用中,有下列幾點(diǎn)需要注意:
(1)函數(shù)調(diào)用可以在過程塊中完成,也可以在 assign 這樣的連續(xù)賦值語句中出現(xiàn)。
(2)函數(shù)調(diào)用語句不能單獨(dú)作為一條語句出現(xiàn),只能作為賦值語句的右端操作數(shù)。

今天就聊到這里,各位,加油。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598884
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109712
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    簡(jiǎn)FPGA的上電復(fù)位

    大家好,博主最近有事忙了幾天,沒有更新,今天正式回來了。那么又到了每日學(xué)習(xí)的時(shí)間了,今天咱們來聊一聊 簡(jiǎn)FPGA的上電復(fù)位,歡迎大家一起交流學(xué)習(xí)。 在基于verilog
    的頭像 發(fā)表于 06-18 19:24 ?2w次閱讀
    <b class='flag-5'>簡(jiǎn)</b><b class='flag-5'>談</b><b class='flag-5'>FPGA</b>的上電復(fù)位

    簡(jiǎn)FPGA的片內(nèi)資源

    簡(jiǎn)FPGA的片內(nèi)資源
    發(fā)表于 01-08 22:12

    數(shù)字電路FPGAverilog教程

    數(shù)字電路FPGAverilog教程,好東西,喜歡的朋友可以下載來學(xué)習(xí)。
    發(fā)表于 01-18 17:44 ?42次下載

    Verilog實(shí)現(xiàn)閏年的判斷(ISE8.21調(diào)試通過)

    Xilinx FPGA工程例子源碼:Verilog實(shí)現(xiàn)閏年的判斷(ISE8.21調(diào)試通過)
    發(fā)表于 06-07 14:54 ?31次下載

    FPGA_CPLD實(shí)現(xiàn)AD或DA的文章(英文Verilog)

    Xilinx FPGA工程例子源碼:在FPGACPLD實(shí)現(xiàn)AD或DA的文章(英文Verilog)
    發(fā)表于 06-07 15:07 ?17次下載

    簡(jiǎn)FPGA verilog的task用法

    ????????大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來聊一聊FPGA verilog的task用法。 ? ? ? ?任務(wù)就是一段封裝在“task-endtask”之間的程序。任務(wù)
    的頭像 發(fā)表于 08-09 18:59 ?4.1w次閱讀

    簡(jiǎn)FPGA verilog的repeat用法例子

    ????? ?大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來聊一聊FPGA verilog的repeat用法例子。? ? ? ?repeat
    的頭像 發(fā)表于 08-15 14:07 ?1.9w次閱讀
    <b class='flag-5'>簡(jiǎn)</b><b class='flag-5'>談</b><b class='flag-5'>FPGA</b> <b class='flag-5'>verilog</b><b class='flag-5'>中</b>的repeat<b class='flag-5'>用法</b>與<b class='flag-5'>例子</b>

    verilog的initial語句說明

    解釋verilog HDL的initial語句的用法。
    發(fā)表于 05-31 09:11 ?0次下載

    FPGA設(shè)計(jì)DAC控制的Verilog實(shí)現(xiàn)

    FPGA設(shè)計(jì)DAC控制的Verilog實(shí)現(xiàn)(單片機(jī)電源維修)-該文檔為FPGA設(shè)計(jì)DAC控制的Ver
    發(fā)表于 07-26 12:18 ?18次下載
    <b class='flag-5'>FPGA</b>設(shè)計(jì)<b class='flag-5'>中</b>DAC控制的<b class='flag-5'>Verilog</b>實(shí)現(xiàn)

    FPGA CPLDVerilog設(shè)計(jì)小技巧

    FPGA CPLDVerilog設(shè)計(jì)小技巧(肇慶理士電源技術(shù)有限)-FPGA CPLDVeril
    發(fā)表于 09-18 16:49 ?37次下載
    <b class='flag-5'>FPGA</b> CPLD<b class='flag-5'>中</b>的<b class='flag-5'>Verilog</b>設(shè)計(jì)小技巧

    FPGA如何使用Verilog處理圖像

    FPGA項(xiàng)目旨在詳細(xì)展示如何使用Verilog處理圖像,從Verilog讀取輸入位圖圖像(.bmp),處理并將處理結(jié)果寫入Verilog
    的頭像 發(fā)表于 09-23 15:50 ?5786次閱讀

    FPGA和USB3.0通信-FX3硬件設(shè)計(jì)簡(jiǎn)

    FPGA和USB3.0通信-FX3硬件設(shè)計(jì)簡(jiǎn)本次演示用的是USB3.0芯片-CYPRESS CYUSB3014(下稱 FX3),該芯片是標(biāo)準(zhǔn)的USB3.0 PHY,可以大大簡(jiǎn)化使用USB...
    發(fā)表于 12-01 20:06 ?24次下載
    <b class='flag-5'>FPGA</b>和USB3.0通信-FX3硬件設(shè)計(jì)<b class='flag-5'>簡(jiǎn)</b><b class='flag-5'>談</b>

    verilogfunction和task的區(qū)別

    Verilog,Function和Task是用于模塊化設(shè)計(jì)和重用代碼的兩種重要元素。它們?cè)试S開發(fā)人員將復(fù)雜的操作分解為更小的功能單元,并在需要時(shí)調(diào)用它們。雖然Function和Ta
    的頭像 發(fā)表于 02-22 15:40 ?1322次閱讀

    verilog function函數(shù)的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數(shù)字電子電路的行為和結(jié)構(gòu)。在 Verilog ,函數(shù) (Function) 是一種用于執(zhí)行特定任務(wù)并返回一個(gè)值的可重用代碼
    的頭像 發(fā)表于 02-22 15:49 ?3918次閱讀

    verilog task和function區(qū)別

    verilog的task和function都是用于實(shí)現(xiàn)模塊的可重復(fù)的功能,并且可以接收參數(shù)和返回結(jié)果。但是它們?cè)诰帉懞褪褂蒙嫌幸恍﹨^(qū)別。下面將詳細(xì)介紹task和
    的頭像 發(fā)表于 02-22 15:53 ?719次閱讀