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

Cara menggunakan Tunggu dan Tunggu Sampai di VHDL

Dalam tutorial sebelumnya kita mempelajari perbedaan utama antara sinyal dan variabel. Kami belajar bahwa sinyal memiliki cakupan yang lebih luas daripada variabel, yang hanya dapat diakses dalam satu proses. Jadi bagaimana kita bisa menggunakan sinyal untuk komunikasi antara beberapa proses?

Kami telah belajar menggunakan wait; menunggu tanpa batas, dan wait for untuk menunggu waktu tertentu. Ada dua jenis pernyataan tunggu lagi di VHDL.

Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.

Pernyataan Wait On akan menghentikan proses hingga salah satu sinyal yang ditentukan berubah:
wait on <signal_name1>, <signal_name2> ...;

Pernyataan Tunggu Sampai akan berhenti sampai suatu peristiwa menyebabkan kondisi menjadi benar:
wait until <condition>;

Ternyata Wait On, Wait Hingga dan Wait For bisa digabung:
wait on <signal_name1> until <condition> for <time_value>;

Contoh ini akan berhenti selama 10 nanodetik, atau hingga signal1 perubahan dan signal2 sama dengan signal3 :
wait on signal1 until signal2 = signal3 for 10 ns;

Olahraga

Dalam video tutorial ini kita akan belajar bagaimana menggunakan pernyataan Wait On dan Wait Hingga untuk komunikasi antar-proses di VHDL:

Kode terakhir yang kita buat dalam tutorial ini:

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;

Output ke konsol simulator saat kita menekan tombol run di ModelSim:

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 menambah CountUp counter dan mengurangi CountDown menangkal. Mereka diperbarui secara bersamaan. Meskipun penetapan sinyal dari dua sinyal berada pada jalur yang berbeda dalam proses, nilai sinyal yang ditetapkan hanya menjadi efektif ketika program mencapai pernyataan Tunggu. Proses melakukan operasi ini pada awal simulasi, dan kemudian setiap 10 nanodetik.

Baris pertama proses kedua adalah wait on CountUp, CountDown; . Program akan menunggu pada baris ini sampai salah satu atau kedua sinyal berubah. Seperti yang dapat kita lihat dari hasil cetakan, ini terjadi pada waktu simulasi 0 ns ketika penghitung diubah untuk pertama kalinya, dan setiap kali penghitung berubah setelah itu.

Baris pertama proses ketiga adalah wait until CountUp = CountDown; . Program akan bangun setiap kali salah satu dari dua sinyal berubah, seperti yang dilakukan proses pertama. Tapi itu hanya akan berlanjut jika ekspresi bernilai true , jika tidak maka akan kembali tidur. Seperti yang bisa kita lihat dari cetakan, “Jackpot!” hanya dicetak sekali, pada 40 ns ketika kedua penghitung memiliki nilai yang sama.

Bawa Pulang

Pergi ke tutorial berikutnya »


VHDL

  1. Cara menggunakan Prosedur dalam Proses di VHDL
  2. Cara menggunakan Fungsi Tidak Murni di VHDL
  3. Cara menggunakan Fungsi di VHDL
  4. Cara menggunakan Prosedur di VHDL
  5. Cara menggunakan Konstanta dan Peta Generik di VHDL
  6. Cara menggunakan instantiasi Port Map di VHDL
  7. Cara menggunakan pernyataan Case-When di VHDL
  8. Cara memasang simulator dan editor VHDL secara gratis
  9. Mikrokontroler PIC18:Apa Itu dan Bagaimana Cara Menggunakannya
  10. Apa Itu Penanda Referensi Dan Bagaimana Kami Menggunakannya Dalam Perakitan?