1. 程式人生 > >RTL基本知識:task和function

RTL基本知識:task和function

設計 全局變量 bubuko .com gin 變量 輸入 更多 center

在使用Verilog進行設計的過程中,使用task和function在同一個module中多次調用,充分提高了代碼的復用性,有效增強設計的可維護性和復用性,可以避免不同模塊間代碼復制導致的不必要的錯誤。本文主要探討task和function的使用以及兩者之間的異同點。

1 task

定義不能出現在過程性語句快中,但是必須在“module-end”結構中。

格式一:

技術分享圖片

格式二:

技術分享圖片

task可以沒有或者有一個或多個參數,值通過參數傳入和傳出task。輸入輸出在任務開始處聲明,且輸入與輸出信號的排列順序決定了task被調用時傳遞參數的順序。在使用task時需要註意以下幾點:

  • task一般在過程性語句中被調用,且調用語句中的輸入必須與task定義中的一致,輸出亦然,參數傳遞的順序保持一致;
  • task參數是按照值傳遞方式進行傳遞(不是引用),所以在被調用的task執行的過程中,如果該task外部輸入參數發生變化是不會影響正在執行的task;
  • 因為task在過程性語句中定義,所以task在調用時傳遞的參數都是變量類型(reg、integer、real等);
  • 定義task的module中的變量對於task是可見的,即task可引用其所在module中定義的變量,但是這種引用全局變量的做法極度不推薦;
  • task在默認情況下是static,即當多個並行進程調用同一個task時將會有可能導致程序異常(後續進行示例

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

更多資訊,請關註個人公眾號:芯光燦爛

技術分享圖片

RTL基本知識:task和function