2012-01-18 24 views
9

@ (posedge Clk) arasındaki fark; bir <= 1'b1; ve @ (posedge Clk) a <= 1'b1;

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

ve

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

Not Clk sonra noktalı arasında herhangi bir fark yoktur. Ben bir testbenine göz atarken benzer kod satırlarına rastladım. Bazı basit deneyler yaptım ve simülasyon sırasında herhangi bir farklılık bulamadım. Bu satırları izleyen kod için yürütme dizisi, noktalı virgülün varlığı/yokluğu nedeniyle herhangi bir şekilde değişecek mi?

cevap

10

Haklısınız - davranışsal bir fark yok.

Noktalı virgül sürümü: Bekleyin. Bunu yap. noktalı virgül olmayan sürümü: Bekle bunu yapın. Bazen bu formu tek gömlekleri kullanılan görürsünüz:

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

herhangi prosedürel ifadesi için BNF sözdizimi temelde

statement_item := 
     {procedural_timing_control} statement; 

Bu, herhangi önüne 0 veya daha fazla zamanlama kontrolleri anlamına gelir Beyan. Örneğinizde @(posedge Clk) bir zamanlama kontrolüdür ve a<= 1'b1; ifadesidir.

Örneğiniz bir çatal/birleştirmenin içinde olsaydı, davranışsal bir fark olurdu çünkü eski iki ifadedir; sonraki bir ifadedir. Bu durumda

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

, 2 ifadeler paralel olarak başlatılır - posedge atanacak için a beklemezdim.

İlgili konular