2014-04-16 11 views

cevap

18

always diğer bir simülasyon başlangıcında kez ran bir initial olup, Verilog süreçte ana türüdür.

always_ff @(posedge clk)

:
saat her pozitif kenarında (yürütülen) bir flip-flop (ff), işlemi başlatılır temsil eder. Bu, always @(posedge clk) değiştirir. Bu, engelleme olmayan ( <=) atamaların kullanılmasının gerekli olduğu tek tiptir; çünkü bu, bir flip-flop verisinin veri aktarım şeklini taklit eder.

always_ff @(posedge clk) begin 
    a <= b; 
end 

always_latch: mandalları temsil içindir.

Kullanımı olacaktır:

always_latch begin 
    if (enable) begin 
    a_latch = something; 
    end 
    //No else clause so a_latch's value 
    //is not always defined, so it holds its value 
end 

Bu yerine geçer:

always_comb

always @* begin 
    if (enable) begin 
    a_latch = something; 
    end 
    //No else clause so a_latch's value 
    //is not always defined, so it holds its value 
end 
:
kombinatoryal mantık için, size bir mandalı istemiyoruz always @* için yerine geçer mi. Artık tasarım amacımızı istediğimiz zaman ile mandal istemediğimiz zaman arasında ayırabiliriz.

SystemVerilog isimleri always_ff, always_latch ve always_comb tetiklendiklerinde için katı kriterlere sahiptir, bu kapı seviyeye RTL şansını anlamına gelir (sentez sonrası) uyumsuzluğu azalır. Bu, always @ sayaç kısmına% 100 eşdeğer olmadığı anlamına gelir ve bazı simülasyon davranışlarını değiştirebilir.

+4

'always_comb',' always @ * 'ile eşdeğer değildir ve artık' always @ * 'kullanılmamalıdır. Bunun en büyük nedeni, her zaman sabiti veya parametresi mantığa dahil olduğunda, her zaman @ * 'nin çalışmamasıdır. Bloğun yürütülmesini tetikleyecek olaylar üretmezler. "always_comb", 0 zamanında yürütmeyi garanti eder. –

+0

Teşekkürler @ dave_59 Son paragrafımla tam olarak eşitliği sağlamaya çalıştım. Bunlar SystemVerilog ve IP'leri çoğunlukla Verilog ile geriye dönük olarak uyumlu olacak şekilde tasarlanıyor, bu yüzden "always @ *" kullanımı devam edecek. Yeni başlayanların manuel hassasiyet listesindeki soruları ne zaman yayınladıklarını düşünürken, "always_comb" norm haline gelmeden önce bir yolumuz olduğunu düşünüyorum. – Morgan

+1

Evet, sadece insanların '// sentez çevirme' gibi yorum pragmalarını '' ifdef SYNTHESIS '' i kullanmaya nasıl geçtiğini düşünün. Verilog'a ifdef eklendiğinden beri 25 yıl geçti. –

İlgili konular