<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Verilog HDL高級(jí)語(yǔ)法結(jié)構(gòu)―函數(shù)(function)

          Verilog HDL高級(jí)語(yǔ)法結(jié)構(gòu)―函數(shù)(function)

          作者: 時(shí)間:2013-08-27 來(lái)源:網(wǎng)絡(luò) 收藏

          的目的是返回一個(gè)用于表達(dá)式的值。

          本文引用地址:http://www.ex-cimer.com/article/189517.htm


          1.定義語(yǔ)法

          返回值的類(lèi)型或范圍> (名);
          端口說(shuō)明語(yǔ)句>
          變量類(lèi)型說(shuō)明語(yǔ)句> begin
          語(yǔ)句>
          ...
          end
          end

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

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


          2.函數(shù)返回值

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


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

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

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

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


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

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


          5.實(shí)例詳解


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

          module tryfact; //模塊開(kāi)始
          //函數(shù)的定義-------------------------------
          function[31:0]factorial; //函數(shù)開(kāi)始
          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)語(yǔ)句
          factorial = index * factorial; //乘法器
          end
          endfunction //函數(shù)結(jié)束
          //函數(shù)的測(cè)試-------------------------------------
          reg[31:0]result;
          reg[3:0]n;
          initial begin
          result=1;
          for(n=2;n=9;n=n+1) begin //循環(huán)語(yǔ)句(調(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)鍵詞: function Verilog HDL 函數(shù)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();