日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > EDA > 電子設(shè)計自動化
[導(dǎo)讀]函數(shù)的目的是返回一個用于表達(dá)式的值。 1.函數(shù)定義語法function <返回值的類型或范圍> (函數(shù)名); <端口說明語句> <變量類型說明語句> begin <語句> ... end endfunction 請注

函數(shù)的目的是返回一個用于表達(dá)式的值。


1.函數(shù)定義語法

function <返回值的類型或范圍> (函數(shù)名);
      <端口說明語句>
      <變量類型說明語句> begin
      <語句>
      ...
      end
endfunction

 

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

 

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


2.函數(shù)返回值

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


3.函數(shù)調(diào)用
函數(shù)的調(diào)用是通過將函數(shù)作為表達(dá)式中的操作數(shù)來實現(xiàn)的,其調(diào)用格式如下:

<函數(shù)名> (<表達(dá)式><,<表達(dá)式>>*)

 

其中函數(shù)名作為確認(rèn)符。下面的例子中通過對兩次調(diào)用函數(shù)getbyte的結(jié)果值進行位拼接運算來生成一個字。

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


4.函數(shù)使用規(guī)則

與任務(wù)相比函數(shù)的使用有較多的約束,下面給出的是函數(shù)的使用規(guī)則。
•  函數(shù)的定義不能包含有任何的時間控制語句,即任何用#、@、或wait來標(biāo)識的語句。
•  函數(shù)不能啟動任務(wù)。
•  定義函數(shù)時至少要有一個輸入?yún)⒘俊?br /> •  在函數(shù)的定義中必須有一條賦值語句給函數(shù)中的一個內(nèi)部變量賦以函數(shù)的結(jié)果值,該內(nèi)部變量具有和函數(shù)名相同的名字。


5.實例詳解


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

 

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

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉