🧩 Boolean İfadeler ve Assertions Arasındaki Benzerlik#
Assertionlar, basit bir boolean ifade gibi düşünülebilir. Örneğin:
assert(a && b);
bu aslında:
if (!(a && b))
$error("Assertion failed");
gibi çalışır. Yani assertionlar, runtime’da koşulu kontrol eder ve başarısız olursa simülasyonu uyarır.
📌 Assertion Directives (assert, assume, cover, restrict)#
SystemVerilog’da assertionlar 4 temel directive kullanılarak tanımlanır:
✅ assert – Tasarım davranışının doğru olup olmadığını kontrol eder. – Eğer assertion fail olursa, hata mesajı üretilir. – Örnek:
assert property (req |-> ##1 ack);
✅ assume – Formal doğrulama araçları için kullanılır ve tasarımın dışarıdan bazı koşulları varsaydığını belirtir. – Simülasyonda assert ile benzer davranır. – Örnek:
assume property (clk == 1'b1);
✅ cover – Tasarımın belirli bir davranışının oluşup oluşmadığını kontrol eder. – Tasarım sürecinde fonksiyonel coverage gibi kullanılabilir. – Örnek:
cover property (req && ack);
✅ restrict – Tasarım alanını kısıtlamak için kullanılır. – Formal doğrulamada kullanılır, simülasyonda genelde etkisi yoktur. – Örnek:
restrict property (reset == 0);