📌 Cover Directive Nedir?#
SystemVerilog’da cover
directive, tasarım veya testbench ortamında belirli bir davranışın gerçekleşip gerçekleşmediğini kontrol etmek için kullanılır. Bu, functional coverage takibi yapmak için kritik bir mekanizmadır.
Örnek:
cover property (@(posedge clk) req |-> ack);
Bu örnekte:
req
sinyali aktif olduğunda, bir sonraki cycle’daack
sinyalinin aktif olup olmadığını kontrol eder.- Assertion hata üretmez; yalnızca koşul sağlandığında coverage event’i tetikler.
🛠️ Neden Cover Kullanırız?#
✅ Testbench Etkinliği: Tasarımın her yolunun (örneğin state geçişleri veya handshake senaryoları) test edilip edilmediğini görmek için kullanılır.
✅ Coverage Analizi: Testlerin kapsamını ölçerek hangi davranışların test edildiğini veya eksik kaldığını raporlar.
✅ Assertion ile Kombinasyon: Aynı property hem assert hem de cover directive ile kullanılabilir:
assert property (p_handshake);
cover property (p_handshake);
🔍 Cover’ın Kullanım Alanları#
FSM (Finite State Machine) coverage: Tüm state geçişlerinin test edildiğinden emin olmak için kullanılır.
Handshake Protokolleri: Request-acknowledge, valid-ready gibi handshake’lerin her kombinasyonunun gerçekleşip gerçekleşmediğini takip eder.
Protokol Coverage: PCIe, AMBA gibi protokollerde transaction’ların farklı kombinasyonlarını kontrol eder.
📝 Cover Kullanırken Dikkat Edilmesi Gerekenler#
Simülasyona Bağımlıdır: Cover directive yalnızca simülasyon çalışırken testlerin gerçekleşip gerçekleşmediğini kontrol eder. Formal verification’da assertion coverage kullanımı assertion coverage tool’una bağlıdır.
Hata Mesajı Üretmez: Cover koşulu sağlanmazsa test fail olmaz, sadece coverage eksik raporlanır.
🔧 Basit Örnek#
property p_valid_ready;
@(posedge clk) valid |-> ready;
endproperty
cover property(p_valid_ready);
Bu örnekte:
valid
geldiğinde bir sonraki cycle’daready
kontrol edilir.- Bu senaryo gerçekleşirse coverage tick edilir.