verilog塊語句

轉載自:https://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)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章