Diziler (Arrays)
Gün 1: SystemVerilog'a Giriş ve Veri Tipleri | Sabit boyutlu, dinamik ve ilişkisel diziler
Kaynak Kod
// =============================================================================
// GUN 1 - Konu 5: Diziler (Arrays): Sabit, Dinamik, Iliskisel
// =============================================================================
module diziler;
// -------------------------------------------------------------------------
// SABIT BOYUTLU DIZILER (Fixed-Size Arrays)
// -------------------------------------------------------------------------
int fixed_arr [5]; // 5 elemanli unpacked dizi
logic [7:0] packed_arr [3]; // 3 elemanli, her biri 8-bit
int matrix [3][4]; // 2 boyutlu dizi (3 satir, 4 sutun)
// -------------------------------------------------------------------------
// DINAMIK DIZILER (Dynamic Arrays)
// -------------------------------------------------------------------------
int dyn_arr []; // Boyut calisma zamaninda belirlenir
// -------------------------------------------------------------------------
// ILISKISEL DIZILER (Associative Arrays)
// -------------------------------------------------------------------------
int assoc_arr [string]; // String anahtarli
int sparse_mem [int]; // Int anahtarli
initial begin
$display("=== SystemVerilog Diziler ===\n");
// --- Sabit Boyutlu Dizi ---
$display("--- Sabit Boyutlu Diziler ---");
fixed_arr = '{10, 20, 30, 40, 50};
foreach (fixed_arr[i])
$display(" fixed_arr[%0d] = %0d", i, fixed_arr[i]);
// 2D dizi
$display("\n 2D Matris (3x4):");
foreach (matrix[i, j])
matrix[i][j] = (i * 4) + j;
foreach (matrix[i]) begin
$write(" Satir %0d: ", i);
foreach (matrix[i][j])
$write("%3d ", matrix[i][j]);
$display();
end
// Dizi metodlari
$display("\n Dizi Metodlari:");
$display(" sum = %0d", fixed_arr.sum());
$display(" min = %0d", fixed_arr.min());
$display(" max = %0d", fixed_arr.max());
$display(" unique = %p", fixed_arr.unique());
// Siralama
fixed_arr.rsort();
$display(" rsort = %p", fixed_arr);
fixed_arr.shuffle();
$display(" shuffle = %p", fixed_arr);
// --- Dinamik Dizi ---
$display("\n--- Dinamik Diziler ---");
dyn_arr = new[5];
foreach (dyn_arr[i]) dyn_arr[i] = (i + 1) * 100;
$display(" Baslangic boyut = %0d", dyn_arr.size());
foreach (dyn_arr[i]) $display(" dyn_arr[%0d] = %0d", i, dyn_arr[i]);
// Boyut degistirme (mevcut veriyi koruyarak)
dyn_arr = new[8](dyn_arr);
dyn_arr[5] = 600; dyn_arr[6] = 700; dyn_arr[7] = 800;
$display("\n Yeni boyut = %0d", dyn_arr.size());
foreach (dyn_arr[i]) $display(" dyn_arr[%0d] = %0d", i, dyn_arr[i]);
// Silme
dyn_arr.delete();
$display(" Silme sonrasi boyut = %0d", dyn_arr.size());
// --- Iliskisel Dizi ---
$display("\n--- Iliskisel Diziler ---");
// String anahtarli
assoc_arr["sifirlama"] = 0;
assoc_arr["baslat"] = 1;
assoc_arr["durdur"] = 2;
assoc_arr["hata"] = 99;
$display(" Eleman sayisi = %0d", assoc_arr.num());
if (assoc_arr.exists("hata"))
$display(" 'hata' anahtari mevcut, deger = %0d", assoc_arr["hata"]);
// foreach ile gezinme
foreach (assoc_arr[key])
$display(" assoc_arr[\"%s\"] = %0d", key, assoc_arr[key]);
// Seyrek bellek modeli
$display("\n Seyrek Bellek Modeli:");
sparse_mem[32'h0000] = 'hAA;
sparse_mem[32'h1000] = 'hBB;
sparse_mem[32'hFFFF] = 'hCC;
foreach (sparse_mem[addr])
$display(" MEM[0x%04h] = 0x%02h", addr, sparse_mem[addr]);
$display("\n=== Diziler Sonu ===");
$finish;
end
endmodule