設計一個4選1的數據選擇器,輸入信號為A, B, C, D , 輸出信號為F, 地址選擇信號為SEL。


任務與函數結構

verilog HDL語言引入任務與函數兩種模塊化程序的描述方式,使之便於理解和調試另外簡化了程序的結構,增強了代碼的易讀性。任務和函數一般用於行為建模,編寫驗證程序(Test Bench)

1.任務

  任務(task)類似於一般的編程語言中的過程(process),它可以從程序的不同位置執行共同的代碼,通常把需要共用的代碼段定義為任務,然后通過調用任務來使用它。在任務中可以包含時序控制等,還可以調用其他的任務和函數。任務的使用包括任務定義

和任務調用。

  在進行任務定義時,必須注意以下幾點:

 (1)任務定義結構不能出現在任何一個過程塊的內部;

 (2)和模塊定義不一樣,在第一行"task"語句中不能列出端口名列表;

  (3)一個任務可以沒有輸入輸出端口;

  (4)一個任務可以沒有返回值,也可以通過輸出端口或雙向端口返回一個或多個值;

  (5)除任務參數外,任務還能夠引用說明任務所在的模塊中定義的任何變量。

任務調用:

  一個任務由任務調用語句調用,任務調用語句給出傳入任務的參數值和接收結果的變量值,其語法為

    <任務名> (端口1,端口2,...,端口n) ;

  在進行任務調用時,必須注意下面幾點:

(1)任務調用語句是過程性語句,因此只能出現在always過程塊和initial過程塊;

(2)任務調用語句中參數列表必須與任務定義時的輸入、輸出和雙向端口參數說明的順序相匹配;

(3)進行任務調用時,參數要按值傳遞,而不能按地址傳遞(這一點與其他高級語言不同);

(4)由於任務調用語句是過程性語句,因此任務調用的輸入與輸出參數必須是寄存器類型;

(5)一個任務中可以直接訪問上一級調用模塊中的任何寄存器;

(6)可以使用disable語句來中斷任務的執行,在任務被中斷后,程序流程將返回到調用任務的地方繼續往下執行。

2.函數

  函數(function)同任務一樣,也可以在模塊的不同位置執行共同的代碼。函數與任務的差別在於

(1)函數只能返回一個值,而任務卻可以有多個或者沒有返回值;

(2)一個任務塊可以包含時間控制結構,而函數塊則沒有,也就是說函數塊從零仿真時刻開始執行,結束后立即返回(相當於組合邏輯);

(3)一個任務塊就可以有也可以沒有輸入和輸出,而函數必須有一個輸入,而沒有任何輸出:

(4)任務塊的觸發是通過一條語句來實現,而函數塊只有當它在一個表達式中被引用時才會生效

(5)在一個函數內可以調用其他的函數,但是不可以調用其他任務,而在任務中則可以調用其他的函數和任務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM