Ana içeriğe geç

SystemVerilog'da Concurrent Assertions Kullanımı

· loading · loading · ·
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Concurrent Assertions Property Default Clocking Doğrulama
Eğitim SystemVerilog Doğrulama
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
SystemVerilog Tasarım Serisi - This article is part of a series.
Part 34: This Article

🔗 Concurrent Assertions Nedir?
#

Concurrent assertions, temporal (zaman) bağımlı davranışları kontrol etmek için kullanılır. Bu assertion’lar bir clock veya event bazlı olarak başlatılır ve zamana yayılmış ifadelerin kontrolünü yapar. property blokları ile tanımlanabilir veya property inline olarak da yazılabilir.

Örnek (property ile):

property p1;
  @(posedge clk) req |=> ack;
endproperty

assert property(p1);

Örnek (inline property):

assert property (@(posedge clk) req |=> ack);

👉 Not: Property bloğu ayrı yazmak zorunda değilsiniz; kısa ifadeler için inline yazmak kodu sadeleştirebilir. Ancak uzun veya tekrar kullanılacak property’ler için ayrı blok yazmak okunabilirliği artırır.


🏗️ Property Blokları
#

Concurrent assertions yazarken davranışlar property blokları ile tanımlanabilir. Property, temel olarak bir temporal ifade veya ardışık koşullar zinciridir.

Örnek:

property p_ready;
  @(posedge clk) (req ##1 ack);
endproperty

Bu örnekte, req sinyali geldikten 1 cycle sonra ack sinyalinin gelmesi beklenir.


🔖 Naming and Asserting the Property
#

Property blokları isimlendirilerek tekrar kullanılabilir. Assertion çağrıları ise bu property’e referans verir.

Örnek:

property p_req_ack;
  @(posedge clk) req |=> ack;
endproperty

tag_ismi :assert property(p_req_ack);

Bu sayede:

  • Aynı property’yi birden fazla assertion ile kullanabiliriz.
  • assume, cover, restrict gibi direktiflerle farklı kontrol türleri yazabiliriz.

⏲️ Clocking the Property
#

Concurrent assertionlar clock sensitive çalışır ve tasarımda senkronizasyonu sağlamak için clock tanımı gerektirir. Property tanımında clock:

  • @(posedge clk) veya
  • @(negedge clk) şeklinde yazılabilir.

Örnek:

property p_enable_check;
  @(posedge clk) disable iff (reset)
    (enable |-> ##1 data_valid);
endproperty

⚙️ Default Clock Statement
#

Birden fazla property kullanıyorsak, her biri için clock belirtmek yerine default clocking kullanabiliriz. Bu, testbench veya tasarım seviyesinde global clock tanımı sağlar.

Örnek:

default clocking cb @(posedge clk);
endclocking

property p_example;
  req |=> ack;
endproperty

assert property(p_example);

Bu durumda p_example property’si otomatik olarak clk sinyali ile clocklanır ve kod daha sade olur.


SystemVerilog Tasarım Serisi - This article is part of a series.
Part 34: This Article

Related

Immediate Assertion
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Verification Immediate Assertion Deferred Immediate Assertion Doğrulama
Eğitim SystemVerilog Doğrulama
SystemVerilog Assertion (SVA) Nedir ve Neden Kullanılır?
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Doğrulama Formal Verification Concurrent Assertion Immediate Assertion SVA
Eğitim SystemVerilog Doğrulama
SystemVerilog'da Boolean İfadeler ve Assertion Kullanımı
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Verification Doğrulama
Eğitim SystemVerilog Doğrulama
SystemVerilog'da Mailbox Kullanımı
· loading · loading
Kerim Turak
Eğitim Doğrulama SystemVerilog SystemVerilog IPC Mailboxes Doğrulama Senkronizasyon
Eğitim Doğrulama SystemVerilog
SystemVerilog'da Named Events Kullanımı
· loading · loading
Kerim Turak
Eğitim Doğrulama SystemVerilog SystemVerilog IPC Named Events Doğrulama Senkronizasyon
Eğitim Doğrulama SystemVerilog
SystemVerilog'da Polymorphism ve Sanallık (Virtuality)
· loading · loading
Kerim Turak
Eğitim Doğrulama SystemVerilog SystemVerilog OOP Nesne Yönelimli Programlama Doğrulama Virtuality
Eğitim Doğrulama SystemVerilog