久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2772|回復: 0
打印 上一主題 下一主題
收起左側

Verilog中函數與任務比較

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發表于 2016-2-23 03:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
任務和函數只能實現組合邏輯,而對時序邏輯無能為力。
  1  任務
      任務就是一段封裝在“task-endtask”之間的程序。任務是通過調用來執行的,而且只有在調用時才執行,如果定義了任務,但是在整個過程中都沒有調用它,那么這個任務是不會執行的。調用某個任務時可能需要它處理某些數據并返回操作結果,所以任務應當有接收數據的輸入端和返回數據的輸出端。
      任務可以彼此調用,而且任務內還可以調用函數。任務是不可綜合的,它只能用于仿真。
  (1)任務定義
      任務定義的形式如下:
      task task_id    // 任務名
           [declaration]   //端口定義
           procedural_statement  //任務的具體操作語句
      endtask
      其中,task_id是任務名;可選項declaration是端口聲明語句和變量聲明語句,任務接收輸入值和返回輸出值就是通過此處聲明的端口進行的;procedural_statement是一段用來完成這個任務操作的過程語句,如果過程語句多于一條,應將其放在語句塊內。
      一些注意事項:
  

a. 在任務定義結構中不能出現initial和always過程塊。

  

b. 任務的輸入、輸出端口和雙向端口數量不受限制,甚至可以沒有輸入、輸出端口和雙向端口。

  (2)任務調用
      任務調用語句可以在initial語句和always語句中使用,其語法形式如下:
      task_id[(expr1, expr2, ........, exprN)];
      task_id是要調用的任務名,expr1, expr2, ........是參數列表。參數列表給出傳入任務的數據(進入任務的輸入端)和接收返回結果的變量(從任務的輸出端接收返回結果),任務調用語句中參數列表的順序必須與任務定義中的端口聲明順序相同。任務調用語句是過程性語句,所以任務調用中接收返回數據的變量必須是寄存器類型。      
      調用任務時,可以引用任務聲明所在的模塊內定義的任何變量。
      任務內可以帶有時序控制,如時延。但任務的輸出值必須等到整個任務的全部語句都執行完之后才能返回。
  2   函數
      和任務一樣,verilog的函數也是一段可以完成特定操作的程序,這段程序處于關鍵詞“function-endfunction”之間。
  (1)函數定義
      函數定義和任務定義一樣,可以出現在模塊內的任何位置,其形式如下:
      function [range] function_id;
          input_declaration
          other_declarations
          procedural_statement
      endfunction
      其中[range]參數指定返回值的類型或位寬,默認是1比特數據。
      function_id為所定義函數的名稱,對函數的調用也是通過函數名來完成的,而且它在函數結構體內代表一個內部變量,函數調用的返回值就是通過函數名變量傳遞給調用語句的。
  

一些注意事項:

  

a. 函數定義只能在模塊中完成,不能出現在過程塊中;

  

b. 函數至少要有一個輸入端口,但不能包含輸出和雙向端口;

  

c. 在函數結構中,不能使用任何形式的時間控制語句(#、wait等),也不能使用disable中止語句;

  

d. 函數定義結構體總不能出現過程塊語句;

  

e. 函數內部可以調用函數,但不能調用過程。

      函數的定義中并沒有聲明輸出,函數定義時,在函數內部已經隱性的聲明了一個寄存器變量,該寄存器變量與函數名同名并且取值范圍也相同。
  (2)函數調用
      函數也是在被調用時才被執行的,調用函數的語句:func_id(expr1, expr2, ........., exprN),其中,func_id是要調用的函數名,expr1, expr2, ......exprN是傳遞給函數的輸入參數列表,該輸入參數列表的順序必須與函數定義時聲明其輸入的順序相同。
      在函數內部聲明的所有寄存器都是靜態的,當函數被調用時,這些寄存器的值不能被改變。
  

一些注意事項:

  

a. 函數調用可以在過程塊中完成,也可以在assign這樣的連續賦值語句中出現;

  

b. 函數調用語句不能單獨作為一條語句出現,只能作為賦值語句的右端操作數。

  3  任務與函數比較
  比較點          任務                函數
  輸入輸出      可以有任意多個輸入輸出        至少一輸入,不能有輸出和雙向端口
  調用         任務只能在過程語句中調用,     函數可作為賦值操作的表達式,
                         而不能在連續賦值語句中調用          用于過程賦值和連續賦值語句
  觸發事件控制    任務不能出現always語句;             函數中不能出現always、#,
                           可以包含延時控制語句(#),         這樣的語句,要保證函數執行
                           但只能面向仿真,不能綜合              在零時間內完成
  調用其他           可以調用其他任務和函數                  只能調用函數,不能調用任務
  返回值              通過輸出端口傳遞返回值                  通過函數名返回,只有一個返回值
  其他說明          任務調用語句可以作為一條               函數調用語句不能單獨作為
  完整的語句出現                                一條語句,出現只能作為賦
值語句的右端操作數
中斷                可以由disable中斷                           不允許由disable中斷
  


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级在线毛片 | 国产黄色在线观看 | 国产精品国产馆在线真实露脸 | 美女天天干天天操 | 中文字幕一区二区三区在线观看 | 国产精品免费看 | 91高清视频 | 久久精品国产一区 | 免费人成激情视频在线观看冫 | 日韩午夜精品 | 国外成人在线视频网站 | 伊人二区 | 国产精品久久久久久久久久免费 | 欧美亚洲高清 | 日本黄色大片免费 | 久久久性 | 国产精品欧美一区二区 | 欧美xxxx做受欧美 | 国产精品成人一区二区三区 | 91精品国产一区二区三区 | 国产日韩中文字幕 | 午夜在线观看视频 | 亚洲成人网在线观看 | 欧美在线一级 | 欧美一级视频 | 伊人狠狠干 | 天天操操| 免费在线一区二区 | 久久亚洲一区 | 国产探花在线观看视频 | 一区二区三区四区免费观看 | 99爱在线观看 | 在线一区| 91亚洲免费 | 91porn成人精品| 欧美久久一区 | 美女黄色在线观看 | 久久精品视频在线观看 | 男女羞羞视频免费 | 51ⅴ精品国产91久久久久久 | 国产成人精品一区二区三区在线观看 |