Ana içeriğe geç

Verilog Task ve Function: HDL'de Yeniden Kullanılabilir Mantık

· loading · loading · ·
Kerim Turak
Donanım Tasarımı Verilog Task Verilog Function Yeniden Kullanılabilir Kod HDL Kodlama Testbench Tasarımı
Donanım Tasarımı
Yazar
Kerim Turak
Digital IC Design & Verification Engineer
Table of Contents
Verilog HDL Serisi - This article is part of a series.
Part 13: This Article

🔧 Verilog’ta Task ve Function Kullanımı
#

Task ve function yapıları, tekrarlayan kodları azaltmak ve yeniden kullanılabilir mantık blokları oluşturmak için kullanılır. Özellikle testbench ve simülasyon senaryolarında kodun okunabilirliğini artırır.


📌 task
#

Task yapıları, şu özelliklere sahiptir:

  • Birden fazla giriş ve çıkış alabilir.
  • Zamanlama kontrolleri içerebilir (#, @, wait gibi).
  • Diğer task veya function bloklarını çağırabilir.
  • Eğer yerel değişken tanımlanmazsa, global değişkenleri değiştirebilir.
  • assign içinde kullanılamaz.

✅ Örnek:
#

task convert;
  input  [7:0] adc_in;
  output [7:0] out;
  begin
    out = (9/5) * (adc_in + 32);
  end
endtask

🔔 Kullanım:
#

always @(adc_a) convert(adc_a, adc_a_conv);

📌 function
#

Function yapıları saf mantık işlemleri için kullanılır:

  • Sıfır zaman içinde çalışmalıdır.
  • Sadece tek bir değer döndürür.
  • İçinde #, @, wait, posedge gibi zamanlama ifadeleri kullanılamaz.
  • Sadece diğer function’ları çağırabilir, task çağrısı yapılamaz.
  • assign ifadelerinde kullanılabilir.

✅ Örnek:
#

function [7:0] myfunction;
  input [3:0] a, b, c, d;
  begin
    myfunction = ((a + b) + (c - d));
  end
endfunction

🔔 Kullanım:
#

assign f = myfunction(a, b, c, d) ? e : 8'd0;

🧠 Karşılaştırma Tablosu
#

Özelliktaskfunction
Dönüş Değerioutput portlar ile (birden fazla olabilir)Tek bir değer döndürür
Zamanlama#, @, wait gibi ifadeler kullanılabilirZamanlama ifadesi kullanılamaz
İfade içinde kullanım❌ Kullanılamaz✅ Kullanılabilir
ÇağırmaDiğer task/function çağrabilirSadece function çağırabilir
Kullanım AmacıProsedürel ve zamanlamalı işlemlerKombinasyonel mantık
Delay / EventKullanılabilirYasaktır

⚠️ En İyi Kullanım Önerileri
#

  • Zamanlama içeren prosedürler için task kullanın.
  • Kombinasyonel hesaplamalar için function tercih edin.
  • Blokları modüler ve kısa tutmaya çalışın (tercihen 20 satırdan az).

module tb_task_function;

    reg  [7:0] adc_a = 8'd50;
    wire [7:0] adc_a_conv;
    wire [7:0] f;
    reg  [3:0] a = 1, b = 2, c = 5, d = 3, e = 8;

    // Task usage
    reg [7:0] adc_conv_result;
    always @(*) convert(adc_a, adc_conv_result);
    assign adc_a_conv = adc_conv_result;

    // Function usage
    assign f = myfunction(a, b, c, d) ? e : 8'd0;

    // Task definition
    task convert;
        input  [7:0] adc_in;
        output [7:0] out;
        begin
            out = (9/5) * (adc_in + 32);
        end
    endtask

    // Function definition
    function [7:0] myfunction;
        input [3:0] a, b, c, d;
        begin
            myfunction = ((a + b) + (c - d));
        end
    endfunction

endmodule

Verilog HDL Serisi - This article is part of a series.
Part 13: This Article

Related

Verilog Atamaları: Prosedürel ve Sürekli Atama Farkları
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Atamaları Sürekli Atama Prosedürel Atama RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı
Verilog Blocking vs. Non-Blocking Atamalar
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Atamaları Blocking Atama NonBlocking Atama RTL Tasarımı Sıralı Mantık
Donanım Tasarımı
Verilog Ad Alanları: Kapsam ve Modülerliği Anlamak
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Ad Alanı Verilog Kapsam Modülerlik RTL Tasarımı Donanım Tanımlama Dili
Donanım Tasarımı
Verilog Hiyerarşik Referans: Dahili Sinyallere Erişim
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Hiyerarşik Referans Force Release Testbench Simülasyon Hata Ayıklama Donanım Doğrulama
Donanım Tasarımı
Verilog Komut Satırı Girişi: Testbench Kontrolü İçin $plusargs
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Komut Satırı Plusargs Testbench Simülasyon Kontrolü Donanım Doğrulama
Donanım Tasarımı
Verilog Simülasyon Temelleri ve Testbench Tasarımı
· loading · loading
Kerim Turak
Donanım Tasarımı Verilog Simülasyon Testbench Timescale Simülasyon Bölgeleri Donanım Doğrulama
Donanım Tasarımı