Ana içeriğe geç

SystemVerilog'da Property Reuse: Parametreler, Argümanlar ve Assertion Binding

· loading · loading · ·
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog SVA Property Assertion Binding Parametreli Property Verification Reusable Property Testbench
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 39: This Article

🔗 SystemVerilog’da Property Reuse (Yeniden Kullanım)
#

SystemVerilog Assertions (SVA)’da property reuse (property’nin yeniden kullanımı), modüler, ölçeklenebilir ve bakımı kolay assertion’lar yazmak için kritik bir tekniktir. Parametreler, argümanlar ve reusable yapılar sayesinde tek bir property tanımı üzerinden birden fazla senaryo için assertion yazılabilir; bu da kod okunabilirliğini ve verimliliğini artırır.


🛠️ Property’lerin Argüman Alması
#

Property’ler, tıpkı fonksiyonlar gibi input (argüman) alabilir ve bu sayede farklı clocklar, sinyaller ve koşullar için dinamik olarak uyarlanabilir.

Örnek:

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

Burada:

  • req ve ack property’ye argüman olarak girilir.
  • Aynı property, farklı sinyal çiftlerine uygulanabilir.

⚡ Property İçinde Parametre Kullanımı
#

Property’ler, iç davranışı (örneğin delay süresi veya eşik değerleri) kontrol etmek için parametreler kullanabilir. Örnek olarak delay inputunun kullanımı.

Örnek:

  property p_handshake(logic req, logic ack, int delay);
    @(posedge clk)
      req |=> ##delay @(posedge clk) ack;
  endproperty

Burada:

  • delay parametresi ile req ile ack arasındaki bekleme süresi dinamik olarak belirlenebilir.

🔄 generate ile Property Kullanımı
#

Property’yi birden fazla instance için (örneğin bus, kanal veya core) uygulamak istediğimizde generate blokları çok faydalıdır.

Örnek:

generate
  genvar i;
  for (i = 0; i < NUM_CHANNELS; i++) begin : gen_handshake_check
    assert property (p_handshake(req[i], ack[i]));
  end
endgenerate

Bu örnekte:

  • Tüm kanallar için aynı assertion uygulanır.
  • Kod tekrarı azaltılır ve bakım kolaylaşır.

🔗 Assertion Binding
#

Assertion binding, assertion’ları tasarım modüllerine bağlamayı, RTL kaynak kodunu değiştirmeden yapmamıza olanak tanır. Böylece reusable property’leri tasarım dışında kolayca kullanabiliriz.

Örnek:

// Modül Tanımı
module my_module (
    input wire clk,
    input wire rst_n,
    input wire [3:0] data
);

    // Bir örnek sinyal
    wire [3:0] internal_data;

    assign internal_data = data + 1;

endmodule

// Assertion Tanımı
module assertion_module (
    input wire clk,
    input wire rst_n,
    input wire [3:0] data,
    input wire [3:0] internal_data
);

    // Assertion: internal_data, data'dan bir fazla olmalı
    assert property (@(posedge clk) disable iff (!rst_n)
                    (data + 1) == internal_data)
        else $error("Assertion failed: internal_data is not equal to data + 1");

endmodule

// Bind İfadesi
module top;

    bit clk;
    bit rst_n;
    bit [3:0] data;

    // Saat sinyali oluşturma
    always #5 clk = ~clk;

    // Reset sinyali oluşturma
    initial begin
        rst_n = 0;
        #10 rst_n = 1;
    end

    // Örnek veri sinyali
    initial begin
        data = 4'b0000;
        #20 data = 4'b0001;
        #20 data = 4'b0010;
        #20 $finish;
    end

    // Modül örneği
    my_module my_module_inst (
        .clk(clk),
        .rst_n(rst_n),
        .data(data)
    );

    // Assertion'ı modüle bağlama
    bind my_module_inst assertion_module assertion_inst (
        .clk(clk),
        .rst_n(rst_n),
        .data(data),
        .internal_data(my_module_inst.internal_data)
    );

endmodule

Bu:

  • p_handshake property’sini dut modülünün req ve ack sinyallerine bağlar.
  • Tasarımın iç koduna dokunmadan assertion eklenmesine veya çıkarılmasına imkan tanır.

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

Related

SystemVerilog'da cover directive kullanımı ve functional coverage
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog SVA Cover Assertion Verification Functional Coverage Testbench
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
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 Assertionlar: Delay, Repetition ve Status
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Verification Repetition Delay Overlap Go-to Repetition Assertion Status
Eğitim SystemVerilog Doğrulama
SystemVerilog Assertions: Same Cycle ve Next Cycle İmplication
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Verification Same Cycle Implication Next Cycle Implication Assertion Overlapping Fonksiyonlar
Eğitim SystemVerilog Doğrulama
SystemVerilog Sequence, Sequence Implication ve Kullanımı
· loading · loading
Kerim Turak
Eğitim SystemVerilog Doğrulama SystemVerilog Assertion Verification Sequence Sequence Implication Overlapping Non-Overlapping Conditional Property Never Property $Rose $Fell Disable Iff
Eğitim SystemVerilog Doğrulama