1. 程式人生 > >Verilog學習筆記基本語法篇(四)·········塊語句

Verilog學習筆記基本語法篇(四)·········塊語句

http://www.cnblogs.com/SYoong/archive/2016/09/08/5852128.html

塊語句是指將兩條或者兩條以上的語句組合在一起,使其在格式上更像一條語句。塊語句分為兩種:

1)用begin_end語句,通常用來標識順序執行的語句,用它標識的塊稱作順序塊;

2)用fork_join語句,通常用來標識並行執行的語句,用它標識的塊稱作並行塊。

A)順序塊

begin

    語句1;

    語句2;

   ....

    語句n;

end

begin:塊名

    塊內宣告語句

    語句1;

    語句2;

   ....

    語句n;

end

特點:

1)塊內的語句是按照順序執行的,即只有上面一條語句執行完後下面的語句才能執行;

2)每條語句的延遲時間都是相對於前一條語句的模擬時間而言的;

3)直到最後一條語句執行完,程式流程控制才跳出該語句塊。

在begin-end語句塊中,begin-end和fork-join塊可以相互巢狀,也可以自我巢狀。如果begin-end中包含有區域性宣告,則他必須被命名(必須有一個標誌)。如果要禁止一個begin-end塊,那麼被禁止的begin-end必須有名字。

B)並行塊

fork

    語句1;

    語句2;

   ....

    語句n;

join

fork:塊名

    塊內宣告語句

    語句1;

    語句2;

   ....

    語句n;

join

特點:

1)塊內語句是同時執行的,即程式流程控制進入該塊時刻,塊內語句則開始同時並行執行;

2)塊內每條語句的延遲時間都是相對於程式流程進入到塊內的時刻。

3)延遲時間是用來給賦值語句提供執行時序的;

4)當按時間排序在最後的語句執行完成後,或者一個disable語句執行時,程式流程控制跳出該模組。

塊名:

1)可以在塊內定義區域性變數,即只在塊內使用的變數;

2)可以允許被其他的語句呼叫,也可以通過層次名進行呼叫

3)在Verilog中,所有的變數都是靜態的,即所有的變數都只有一個唯一的儲存地址,因此進入或者跳出塊並不影響儲存在變數內的值。

4)命令塊可以被禁用,關鍵詞為disable,可以用disable跳出迴圈,處理錯誤條件以及根據控制訊號來控制某些程式碼是否執行。

順序塊和並行塊的性質對比

對比性質 順序塊 並行塊
塊內宣告語句變數型別 parameter、reg、integer、real parameter、reg、integer、real、time、event
開始時間 第一條語句開始執行的時間 流程控制進入該塊的時間
結束時間 最後一條語句結束執行時間 按時間排在最後的語句執行結束時間

舉例:(程式功能相同的順序塊和並行塊)

parameter  d=50;

reg   [7:0] r;

begin

    #d   r='h35;

    #d   r='hE2;

    #d   r='h00;

    #d   r='hF7;

    #d   ->end_wave;                   //->表示觸發事件end_wave使其翻轉

end

 (如果d=0,則這個順序塊的執行不需要時間。若d=50,則塊語句完成的時間為250,因為每個語句都要等待50個時間單位)

fork

    #250  ->end_wave; 

    #200   r='hF7;

    #150   r='h00;

    #100   r='hE2;

    #50     r='h35;

join

(在並行塊中,所有語句都是在程式流程進入並行塊時同時開始的,因此這個語句結束的時間為250)