📈 Assertion Status#
Bir assertion’ın çalışması sırasında çeşitli durumları takip edebiliriz:
- Succeeded (pass): Assertion beklenen şekilde çalıştı.
- Failed: Assertion koşulu sağlanmadı.
- Inactive: Assertion devre dışı veya trigger edilmedi.
- Active: Assertion koşulu kontrol edilmeye başlandı; assertion tetiklendi ve çalışıyor durumda.
- Enabled: Assertion tetiklenebilir durumda; assertion enable duruma geldi ve belirli koşullar oluşursa çalışabilir hale geldi.
⏳ Cycle Delay Repetition#
Bir sequence veya assertion’da cycle delay ifadesi kullanarak ardışık clock cycle’lar boyunca bekleme tanımlayabiliriz.
Örnek:
sequence s_delay;
a ##2 b;
endsequence
Bu örnekte a
gerçekleştikten 2 cycle sonra b
kontrol edilir.
🔄 Cycle Delay Repetition Ranges#
Delay tekrarı için range kullanarak esnek kontroller tanımlayabiliriz:
sequence s_range;
a ##[2:4] b;
endsequence
Bu örnekte:
a
gerçekleştikten 2 ila 4 cycle sonrab
kontrol edilir.
🔁 Consecutive Repetition#
Consecutive repetition, bir olayın ardışık cycle’larda gerçekleşip gerçekleşmediğini kontrol eder.
Örnek:
sequence s_consec;
(a && b)[*3];
endsequence
Burada:
a && b
ifadesi 3 ardışık cycle boyunca true olmalıdır.
🔂 Consecutive Repetition with Ranges#
Ardışık repetition’larda da range kullanabiliriz:
sequence s_consec_range;
(a && b)[*3:5];
endsequence
Bu örnekte:
a && b
ifadesi 3 ila 5 ardışık cycle boyunca true olmalıdır.
🚦 Consecutive Repetition: Special Ranges#
Özel repetition’lar için:
[*]
➔ 0 veya daha fazla ardışık cycle.[+]
➔ 1 veya daha fazla ardışık cycle.
Örnek:
sequence s_star;
a[*];
endsequence
sequence s_plus;
b[+];
endsequence
⏸️ Nonconsecutive Repetition#
Nonconsecutive repetition (veya gözetimsiz repetition), bir olayın ardışık olmadan istenilen sayıda tekrar edip etmediğini kontrol eder. Bunun için throughout
veya within
keyword’leri kullanılır (advanced usage). Basit kullanım:
sequence s_nonconsec;
a ##[1:$] b;
endsequence
Burada:
a
gerçekleşir ve en az 1 cycle, en fazla sonsuz cycle sonrab
kontrol edilir.
🌀 Go-To Repetition#
Go-To repetition, ardışık cycle’larda olaylar overlap ederek yeni instance başlatabilir. Bu genelde FSM state assertion’larında kullanılır.
Örnek:
sequence s_goto;
a ##1 b [->3];
endsequence
Bu örnekte:
b
sinyali 3 defa overlap ederek paralel instance’larla kontrol edilir.
🔀 Go-To ve Nonconsecutive Ranges#
Go-To repetition range’leri de destekler:
sequence s_goto_range;
a ##1 b [->2:5];
endsequence
Burada:
b
sinyali 2 ila 5 defa overlap ederek non-deterministic sayıda instance başlatılabilir.
📊 Repetition Table#
Syntax | Anlamı |
---|---|
[*] | 0 veya daha fazla ardışık cycle |
[+] | 1 veya daha fazla ardışık cycle |
[N] | Tam olarak N ardışık cycle |
[N:M] | N ila M ardışık cycle |
[->N] | Go-To, N overlap instance |
[->N:M] | Go-To, N ila M overlap instance |