Kuyruklar (Queues)
Gün 1: SystemVerilog'a Giriş ve Veri Tipleri | Kuyruk yapısı ve metodları: push, pop, find, sort
Kaynak Kod
// =============================================================================
// GUN 1 - Konu 6: Kuyruklar (Queues) ve Metodlari
// =============================================================================
module kuyruklar;
// Kuyruk tanimlama: $ sembolu ile
int q_int [$]; // Bos kuyruk
string q_str [$]; // String kuyruk
int bounded_q [$:9]; // Maksimum 10 elemanli sinirli kuyruk
typedef struct {
int id;
string name;
int data;
} packet_t;
packet_t q_pkt [$]; // Struct kuyruk
initial begin
$display("=== SystemVerilog Kuyruklar (Queues) ===\n");
// --- Temel Islemler ---
$display("--- Temel Kuyruk Islemleri ---");
// push_back: Sona ekle
q_int.push_back(10);
q_int.push_back(20);
q_int.push_back(30);
q_int.push_back(40);
q_int.push_back(50);
$display(" push_back sonrasi: %p", q_int);
$display(" Boyut = %0d", q_int.size());
// push_front: Basa ekle
q_int.push_front(5);
$display(" push_front(5) sonrasi: %p", q_int);
// pop_front: Bastan cikar
begin
int val = q_int.pop_front();
$display(" pop_front() = %0d, Kuyruk: %p", val, q_int);
end
// pop_back: Sondan cikar
begin
int val = q_int.pop_back();
$display(" pop_back() = %0d, Kuyruk: %p", val, q_int);
end
// --- Ekleme ve Silme ---
$display("\n--- insert ve delete ---");
q_int.insert(2, 25); // Indeks 2'ye 25 ekle
$display(" insert(2, 25): %p", q_int);
q_int.delete(0); // Indeks 0'i sil
$display(" delete(0): %p", q_int);
// --- Erisim ---
$display("\n--- Eleman Erisimi ---");
$display(" Ilk eleman q[0] = %0d", q_int[0]);
$display(" Son eleman q[$] = %0d", q_int[$]);
$display(" Dilimleme q[1:2] = %p", q_int[1:2]);
// --- Arama Metodlari ---
$display("\n--- Arama Metodlari ---");
q_int = '{15, 30, 45, 30, 60, 15};
$display(" Kuyruk = %p", q_int);
begin
int found [$];
found = q_int.find with (item == 30);
$display(" find(==30) = %p", found);
found = q_int.find_index with (item == 30);
$display(" find_index(==30) = %p", found);
found = q_int.find with (item > 40);
$display(" find(>40) = %p", found);
found = q_int.min();
$display(" min = %p", found);
found = q_int.max();
$display(" max = %p", found);
found = q_int.unique();
$display(" unique = %p", found);
end
// --- Siralama ---
$display("\n--- Siralama ---");
q_int.sort();
$display(" sort() = %p", q_int);
q_int.rsort();
$display(" rsort() = %p", q_int);
q_int.reverse();
$display(" reverse() = %p", q_int);
q_int.shuffle();
$display(" shuffle() = %p", q_int);
// --- Struct Kuyruk ---
$display("\n--- Struct Kuyruk ---");
q_pkt.push_back('{id: 1, name: "READ", data: 'hAA});
q_pkt.push_back('{id: 2, name: "WRITE", data: 'hBB});
q_pkt.push_back('{id: 3, name: "READ", data: 'hCC});
foreach (q_pkt[i])
$display(" Paket[%0d]: id=%0d, name=%s, data=0x%02h",
i, q_pkt[i].id, q_pkt[i].name, q_pkt[i].data);
// FIFO benzeri kullanim
$display("\n FIFO Kullanimi:");
begin
packet_t p;
while (q_pkt.size() > 0) begin
p = q_pkt.pop_front();
$display(" Isleniyor: id=%0d, %s (0x%02h)", p.id, p.name, p.data);
end
end
$display("\n=== Kuyruklar Sonu ===");
$finish;
end
endmodule