2012-01-18 92 views
9

@(posedge Clk)之間的區別; a <= 1'b1;和@(posedge Clk)a <= 1'b1;

@(posedge Clk); 
    a<= 1'b1; 

@(posedge Clk) 
    a<= 1'b1; 

注Clk時分號後有什麼區別。當我瀏覽測試平臺時,我遇到了類似的代碼行。我做了一些簡單的實驗,在模擬過程中我找不到任何差異。由於分號的存在/不存在,這些行後面的代碼的執行順序是否會以任何方式改變?

回答

10

你是對的 - 沒有行爲差異。

分號版本是:等待。做這個。 非分號版本是:等待然後執行此操作。有時你會看到單行用這種形式:

@(posedge Clk) a<= 1'b1; 
12

任何程序語句中的BNF語法基本上是

statement_item := 
     {procedural_timing_control} statement; 

這意味着你可以有0個或更多的時間控制在任何前聲明。在你的例子@(posedge Clk)是一個時間控制和a<= 1'b1;是聲明。

如果你的例子是在一個fork/join中,會有行爲上的差異,因爲前者是兩個語句;後者是一種說法。

fork 
    @(posedge Clk); a<1'b1; 
join 

在這種情況下,2條語句開始並行 - a不會等待被分配posedge。

相關問題