⚙️ Verilog Sistem Fonksiyonları ve Görevleri (Tasks
)#
Verilog, simülasyon, veri işleme ve çalışma zamanı kontrolü için $
ile başlayan birçok yerleşik sistem fonksiyonu sağlar.
Bu fonksiyonlar sentezlenemez ve yalnızca testbench ya da simülasyon ortamlarında kullanılmalıdır.
🎲 Rastgele Sayı Fonksiyonları#
Fonksiyon | Açıklama | Örnek |
---|---|---|
$random | 32-bit işaretli rastgele sayı üretir | r = $random; |
$urandom | 32-bit işaretsiz rastgele sayı üretir | r = $urandom; |
$urandom_range(min, max) | Belirtilen aralıkta rastgele sayı üretir | r = $urandom_range(0, 15); |
Testbench’te test girdisi (stimulus) üretmek için kullanılır.
🛑 Simülasyon Kontrol Görevleri#
Görev | Açıklama | Örnek |
---|---|---|
$stop | Simülasyonu durdurur, varsa hata ayıklayıcıyı açar | $stop; |
$finish | Simülasyonu düzgün şekilde sonlandırır | $finish; |
$fatal | Hatalı şekilde sonlandırır (assert gibidir) | $fatal(1, "Hata!"); |
➗ Matematik ve Dönüştürme Fonksiyonları#
Fonksiyon | Açıklama | Örnek |
---|---|---|
$clog2(x) | Log2 tabanında yukarı yuvarlanmış değer | localparam W = $clog2(10); |
$bits(x) | Değişkenin bit genişliğini verir | $bits(my_reg) |
$signed(x) | Değeri işaretli tipe dönüştürür | out = $signed(data); |
$unsigned(x) | Değeri işaretsiz tipe dönüştürür | out = $unsigned(signed_data); |
$clog2
, bellek genişliği veya sayaç gibi parametrelerin belirlenmesinde çok faydalıdır.
module tb_system_tasks;
reg [7:0] r1, r2;
reg [3:0] index;
reg signed [15:0] s_val = -10;
reg [15:0] u_val;
initial begin
// Randomization
r1 = $urandom;
r2 = $urandom_range(0, 15);
$display("Random r1 = %0d, r2 (0-15) = %0d", r1, r2);
// Math & conversion
index = $clog2(10); // = 4
$display("clog2(10) = %0d", index);
u_val = $unsigned(s_val);
$display("s_val = %0d, u_val = %0d", s_val, u_val);
// Simulation control
#20 $finish;
end
endmodule