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.
İlgili konular
- 1. Groovy her ve forEach arasındaki fark nedir?
- 2. Dizi ve Zaman Çizelgeleri Arasındaki Fark
- 3. Zaman aşımı ve açık zaman aşımı arasındaki fark nedir?
- 4. Her kullanıldığında Hashing vectorizer ve Count vectorizer arasındaki fark nedir?
- 5. Gradle ve Maven Arasındaki Fark?
- 6. SQL'de zaman damgaları arasındaki fark nasıl döndürülür?
- 7. netTcpContextBinding ve netTcpBinding arasındaki fark
- 8. Notta 'hepsi' ile 'her' arasındaki fark nedir?
- 9. Redis ve kafka arasındaki fark
- 10. ASCIIEncoding ve Encoding Arasındaki Fark
- 11. jsRender ve jsViews arasındaki fark
- 12. os.getenv ve os.environ.get arasındaki fark?
- 13. Neden zaman damgası unix süresi ve time() arasındaki fark yanlış?
- 14. UNIX'teki $ @ ve $ * arasındaki fark nedir?
- 15. objectForKey ve valueForKey arasındaki fark?
- 16. Arşivleme ve sıkıştırma arasındaki fark
- 17. dtrtrs ve dtrsm arasındaki fark
- 18. XeLaTeX ve pdfLaTeX arasındaki fark
- 19. Python'da {} ve [] arasındaki fark nedir?
- 20. string.h ve strings.h arasındaki fark
- 21. Harita ile her biri arasındaki fark nedir ve toplanır?
- 22. typedef arasındaki fark ve tanımlamak
- 23. İşlem ve TransactionScope Arasındaki Fark
- 24. eylem ve action.async arasındaki fark
- 25. arasındaki fark
- 26. HttpClient.Timeout ve WebRequestHandler zaman aşımı özellikleri arasındaki fark nedir?
- 27. NonSerialized ve Xml.Serialization.XmlIgnore arasındaki fark?
- 28. XSS'de IDREF ve IDREFS arasındaki fark nedir?
- 29. IOError ve OSError arasındaki fark nedir?
- 30. arasındaki fark
'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. –