Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> VHDL

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:

VSIM 2> run # ** Note: CountUp=1 CountDown=9 # Time: 0 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=2 CountDown=8 # Time: 10 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=3 CountDown=7 # Time: 20 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=4 CountDown=6 # Time: 30 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=5 CountDown=5 # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=6 CountDown=4 # Time: 50 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=7 CountDown=3 # Time: 60 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=8 CountDown=2 # Time: 70 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=9 CountDown=1 # Time: 80 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=10 CountDown=0 # Time: 90 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=11 CountDown=-1 # Time: 100 ns Iteration: 1 Instance: /t07_waitonuntiltb

Analisis

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.

Menguasai Pernyataan Wait dalam VHDL: Wait On, Wait Until, dan Penggunaan Gabungan

Kesimpulan

Lanjutkan ke tutorial berikutnya untuk wawasan lebih dalam tentang sinkronisasi VHDL.

VHDL

  1. Memanfaatkan Prosedur Dalam Proses untuk Desain FSM VHDL yang Lebih Bersih
  2. Menggunakan Fungsi Tidak Murni di VHDL: Meningkatkan Keterbacaan dan Pemeliharaan FSM
  3. Menguasai Fungsi VHDL: Panduan Praktis untuk Desain Efisien
  4. Menggunakan Prosedur dalam VHDL: Sederhanakan Desain dengan Kode yang Dapat Digunakan Kembali
  5. Memanfaatkan Konstanta dan Generic Map dalam VHDL untuk Desain Modul Fleksibel
  6. Menguasai Instantiasi Port Map dalam VHDL: Panduan Praktis
  7. Menguasai Pernyataan Case-When dalam VHDL: Desain Multiplexer Efisien
  8. Panduan Setup Editor & Simulator VHDL Gratis bagi Mahasiswa
  9. Mikrokontroler PIC18: Fitur, Performa, dan Cara Menggunakannya
  10. Memahami Reference Designator: Cara Melabeli Koneksi Rangkaian Papan Sirkuit Cetak