Menguasai Pernyataan Wait dalam VHDL: Wait On, Wait Until, dan Penggunaan Gabungan
Dalam tutorial sebelumnya kami mengeksplorasi perbedaan antara sinyal dan variabel dalam VHDL, menekankan bahwa sinyal memiliki cakupan yang lebih luas daripada variabel, yang terbatas pada satu proses. Pertanyaan logis berikutnya adalah bagaimana mengkoordinir beberapa proses menggunakan sinyal.
Di luar pernyataan wait; yang familiar (penundaan tak terbatas) dan wait for (penundaan berbasis waktu), VHDL menawarkan dua pernyataan canggih untuk sinkronisasi berbasis peristiwa: Wait On dan Wait Until. Ini juga dapat digabungkan dengan wait for untuk menciptakan aliran kontrol yang canggih.
Wait On
Pernyataan wait on menangguhkan proses sampai salah satu dari sinyal yang tercantum berubah nilai.
wait on <signal_name1>, <signal_name2>, ...;
Wait Until
Pernyataan wait until menunda eksekusi sampai kondisi Boolean yang ditentukan menjadi benar.
wait until <condition>;
Menggabungkan Pernyataan Wait
Semua tiga konstruksi dapat digunakan bersama untuk menciptakan perilaku timing yang halus:
wait on <signal_name1> until <condition> for <time_value>;
Misalnya, baris berikut akan menunda selama 10 ns atau sampai signal1 berubah dan signal2 sama dengan signal3:
wait on signal1 until signal2 = signal3 for 10 ns;
Contoh Praktis
Berikut adalah testbench lengkap yang menunjukkan bagaimana wait on dan wait until dapat digunakan untuk komunikasi antar-proses.
entity T07_WaitOnUntilTb is end entity; architecture sim of T07_WaitOnUntilTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin wait on CountUp, CountDown; report "CountUp=" & integer'image(CountUp) & " CountDown=" & integer'image(CountDown); end process; process is begin wait until CountUp = CountDown; report "Jackpot!"; end process; end architecture;
Keluaran konsol di ModelSim menunjukkan urutan peristiwa:
Proses pertama memperbarui CountUp dan CountDown secara bersamaan setiap 10 ns. Karena penugasan sinyal hanya berlaku setelah pernyataan wait, kedua counter diperbarui bersama pada setiap langkah simulasi.
Proses kedua menggunakan wait on CountUp, CountDown;, menangguh sampai salah satu counter berubah. Seperti yang ditunjukkan, ini memicu pada 0 ns (pembaruan awal) dan kemudian setiap kali salah satu sinyal berubah.
Proses ketiga menggunakan wait until CountUp = CountDown;. Ini terbangun pada setiap perubahan sinyal tetapi melanjutkan hanya ketika kesetaraan berlaku. Akibatnya, pesan “Jackpot!” hanya muncul sekali—pada 40 ns ketika kedua counter mencapai 5.
Kesimpulan
Wait On menunda sampai sinyal tertentu berubah.
Wait Until terbangun pada perubahan sinyal tetapi melanjutkan hanya jika kondisi mengevaluasi ke benar.
Semua tiga konstruksi—wait on, wait until, dan wait for—dapat digabungkan untuk kontrol yang detail.
Lanjutkan ke tutorial berikutnya untuk wawasan lebih dalam tentang sinkronisasi VHDL.