🚦 Immediate Assertion Nedir?#
Immediate assertions, procedural bloklar (initial
, always
, always_ff
, always_comb
, vb.) içinde kullanılan, hemen değerlendirilen assertionlardır. Kombinasyonel kontroller için kullanılır ve anlık hataları yakalar.
Örnek:
always_ff @(posedge clk) begin
assert (data_valid) else $error("Data not valid!");
end
Bu yapı, her clock kenarında data_valid
kontrolünü yapar ve fail durumunda hata mesajı verir.
⏳ Deferred Immediate Assertion Nedir?#
Deferred Immediate assertionlar da procedural bloklarda kullanılır; ancak kontrolü bir sonraki delta cycle’a erteler. Yani kontrol hemen yapılmaz, blok tamamlandıktan sonra yapılır. Bu, özellikle non-blocking assignment ile yazılan kodlarda veri uyumluluğunu sağlamak için kullanılır.
Örnek:
always_ff @(posedge clk) begin
x <= y; // non-blocking assignment
assert final(x == y); // deferred immediate assertion
// assert #0 (x == y); // deferred immediate assertion
end
Burada final
keyword’ü deferred immediate assertion’ı işaret eder ve assertion, blok tamamlandıktan sonra (delta cycle) evaluate edilir.
Immediate vs. Deferred Immediate#
Özellik | Immediate | Deferred Immediate |
---|---|---|
Çalışma zamanı | Blok içi (hemen) | Blok sonunda (delta cycle) |
Kod uyumluluğu | Blocking assignment | Non-blocking assignment |
Kullanım amacı | Hızlı kontrol | Data consistency kontrolü |