2012-01-18 10 views
9

C'è qualche differenza traDifferenza tra @ (posked Clk); a <= 1'b1; e @ (posedge Clk) a <= 1'b1;

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

e

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

Annotare il punto e virgola dopo Clk. Mi sono imbattuto in righe di codice simili quando stavo sfogliando un testbench. Ho fatto alcuni semplici esperimenti e non sono riuscito a trovare alcuna differenza durante la simulazione. La sequenza di esecuzione del codice che segue queste righe cambierà in alcun modo a causa della presenza/assenza del punto e virgola?

risposta

10

Hai ragione: non c'è alcuna differenza comportamentale.

La versione del punto e virgola è: Attendi. Fai questo. La versione non-punto e virgola è: attendere quindi fare questo. Avrete a volte vedere questo modulo utilizzato nel one-liner:

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

La sintassi BNF per qualsiasi dichiarazione procedurale è essenzialmente

statement_item := 
     {procedural_timing_control} statement; 

Questo significa che puoi avere 0 o più controlli di temporizzazione di fronte a qualsiasi dichiarazione. Nell'esempio @(posedge Clk) è un controllo di temporizzazione e a<= 1'b1; è l'istruzione.

Se il tuo esempio fosse all'interno di una forcella/join, ci sarebbe una differenza comportamentale perché il primo è costituito da due istruzioni; la successiva è una dichiarazione.

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

In questo caso, i 2 dichiarazioni vengono avviati in parallelo - a non avrebbe aspettato per il posedge da assegnare.

Problemi correlati