Events (Olaylar)
Gün 4: Süreçler Arası İletişim (IPC) | Olay tetikleme (->), bekleme (@, wait) ve senkronizasyon
Kaynak Kod
// =============================================================================
// GUN 4 - Konu 3: Event'ler - Olay Tetikleme ve Bekleme
// =============================================================================
module events;
// Event tanimla
event data_ready;
event ack_received;
event reset_done;
event phase_complete;
int shared_data;
// --- Uretici (Producer) ---
initial begin : producer
$display("=== Events (Olay Tetikleme) ===\n");
// Reset bekle
@(reset_done);
$display(" [%0t] Uretici: Reset tamamlandi, calismaya basliyor", $time);
repeat (5) begin
#10;
shared_data = $urandom_range(1, 100);
$display(" [%0t] Uretici: Veri uretildi = %0d", $time, shared_data);
-> data_ready; // Olayi tetikle
@(ack_received); // Tuketici onayini bekle
$display(" [%0t] Uretici: Onay alindi", $time);
end
$display("\n [%0t] Uretici: Tum veriler gonderildi", $time);
-> phase_complete;
end
// --- Tuketici (Consumer) ---
initial begin : consumer
@(reset_done);
$display(" [%0t] Tuketici: Reset tamamlandi", $time);
forever begin
@(data_ready); // Veri hazir olayini bekle
$display(" [%0t] Tuketici: Veri alindi = %0d", $time, shared_data);
#5; // Isleme suresi
-> ack_received; // Onay gonder
end
end
// --- Reset sureci ---
initial begin : reset_gen
$display(" [%0t] Reset basladi...", $time);
#20;
$display(" [%0t] Reset tamamlandi!", $time);
-> reset_done;
end
// --- wait() ile event bekleme ---
initial begin
wait(phase_complete.triggered);
$display("\n [%0t] Phase tamamlandi (wait ile algilandi)", $time);
end
// --- Triggered ozelligi ---
initial begin
#200; // Zaman asimi
$display("\n=== Events Sonu ===");
$finish;
end
endmodule