新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > Verilog HDL高級語法結構―函數(function)

        Verilog HDL高級語法結構―函數(function)

        作者: 時間:2013-08-27 來源:網絡 收藏

        的目的是返回一個用于表達式的值。

        本文引用地址:http://www.104case.com/article/189517.htm


        1.定義語法

        返回值的類型或范圍> (名);
        端口說明語句>
        變量類型說明語句> begin
        語句>
        ...
        end
        end

        請注意返回值的類型或范圍>這一項是可選項,如缺省則返回值為一位寄存器類型數據。下面用例子說明:

        [7:0] getbyte;
        input [15:0] address;
        begin
        說明語句> //從地址字中提取低字節的程序
        getbyte = result_expression; //把結果賦予函數的返回字節
        end
        endfunction


        2.函數返回值

        函數的定義蘊含聲明了與函數同名的、函數內部的寄存器。如在函數的聲明語句中返回值的類型或范圍>為缺省,則這個寄存器是一位的;否則是與函數定義中返回值的類型或范圍>一致的寄存器。
        函數的定義把函數返回值所賦值寄存器的名稱初始化為與函數同名的內部變量。上面的例子說明了這個概念:getbyte被賦予的值就是函數的返回值。


        3.函數調用
        函數的調用是通過將函數作為表達式中的操作數來實現的,其調用格式如下:

        函數名> (表達式>,表達式>>*)

        其中函數名作為確認符。下面的例子中通過對兩次調用函數getbyte的結果值進行位拼接運算來生成一個字。

        word = control? {getbyte(msbyte),getbyte(lsbyte)} : 0;


        4.函數使用規則

        與任務相比函數的使用有較多的約束,下面給出的是函數的使用規則。
        • 函數的定義不能包含有任何的時間控制語句,即任何用#、@、或wait來標識的語句。
        • 函數不能啟動任務。
        • 定義函數時至少要有一個輸入參量。
        • 在函數的定義中必須有一條賦值語句給函數中的一個內部變量賦以函數的結果值,該內部變量具有和函數名相同的名字。


        5.實例詳解


        下面的例子中定義了一個可進行階乘運算的名為factorial的函數,該函數返回一個32位的寄存器類型的值,該函數可后向調用自身,并且打印出部分結果值。

        module tryfact; //模塊開始
        //函數的定義-------------------------------
        function[31:0]factorial; //函數開始
        input[3:0]operand; //函數的入口
        reg[3:0]index; //函數的寄存器
        begin
        factorial = operand? 1 : 0; //若operand全為0,則為0
        for(index=2;index=operand;index=index+1) //循環語句
        factorial = index * factorial; //乘法器
        end
        endfunction //函數結束
        //函數的測試-------------------------------------
        reg[31:0]result;
        reg[3:0]n;
        initial begin
        result=1;
        for(n=2;n=9;n=n+1) begin //循環語句(調用函數)
        $display(Partial result n= %d result= %d, n, result); //每次函數的執行結果
        result = n * factorial(n)/((n*2)+1); //調用函數
        end
        $display(Finalresult=%d,result); //打印結果
        end
        endmodule //模塊結束



        關鍵詞: function Verilog HDL 函數

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临高县| 荃湾区| 莆田市| 醴陵市| 上饶市| 莎车县| 兰溪市| 淮滨县| 昭平县| 临潭县| 彰化市| 中超| 汤阴县| 龙陵县| 枣强县| 平泉县| 镇赉县| 垣曲县| 太仆寺旗| 乾安县| 崇文区| 河北区| 阿坝县| 永靖县| 颍上县| 大港区| 龙胜| 衡山县| 和静县| 沙洋县| 丹棱县| 金湖县| 谢通门县| 平舆县| 高台县| 康平县| 华容县| 略阳县| 台中市| 平湖市| 龙口市|