Bu 4 terim arasında tamamen kafam karıştı: always_ff
, always_comb
, always_latch
ve always
. Bunlar nasıl ve ne için kullanılabilir?always_ff, always_comb, always_latch ve her zaman arasındaki fark
15
A
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.
'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. –
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
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. –