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

Cara menggunakan pernyataan bersyarat dalam VHDL:If-then-Elsif-Else

Dalam tutorial sebelumnya kami menggunakan ekspresi kondisional dengan pernyataan Tunggu Sampai. Ekspresi memastikan bahwa proses hanya dipicu ketika dua sinyal penghitung sama. Tetapi bagaimana jika kita ingin program dalam suatu proses mengambil tindakan yang berbeda berdasarkan masukan yang berbeda?

Pernyataan If-then-Elsif-Else dapat digunakan untuk membuat cabang dalam program kita. Bergantung pada nilai variabel, atau hasil ekspresi, program dapat mengambil jalur yang berbeda.

Pos blog ini adalah bagian dari seri Tutorial VHDL Dasar.

Sintaks dasarnya adalah:

if <condition> then
elsif <condition> then
else
end if;

elsif dan else bersifat opsional, dan elsif dapat digunakan berkali-kali. <condition> dapat berupa true boolean atau false , atau dapat berupa ekspresi yang bernilai true atau false .

Contoh ekspresi yaitu true jika MyCounter kurang dari 10:

MyCounter < 10

Operator relasional:

= sama
/= tidak sama
kurang dari
<= kurang dari atau sama
> lebih besar dari
>= lebih besar atau sama

Operator logika:

tidak a benar jika a adalah salah
a dan b benar jika a dan b benar
a atau b benar jika a atau b benar
a dan b benar jika a atau b salah
a atau b benar jika a dan b salah
a xor b benar jika tepat salah satu dari a atau b benar
a xnor b benar jika a dan b sama

Olahraga

Dalam tutorial video ini kita akan belajar bagaimana menggunakan pernyataan If-then-Elsif-Else di VHDL:

Kode terakhir yang kita buat dalam tutorial ini:

entity T08_IfTb is
end entity;

architecture sim of T08_IfTb 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

        if CountUp > CountDown then
            report "CountUp is larger";
        elsif CountUp < CountDown then
            report "CountDown is larger";
        else
            report "They are equal";
        end if;

        wait on CountUp, CountDown;

    end process;

end architecture;

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

VSIM 2> run
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 0  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 0 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 10 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 20 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: CountDown is larger
#    Time: 30 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: They are equal
#    Time: 40 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 50 ns  Iteration: 1  Instance: /t08_iftb
# ** Note: Countup is larger
#    Time: 60 ns  Iteration: 1  Instance: /t08_iftb
...

Analisis

Kami memberikan CountDown nilai awal 10, dan CountUp nilai 0. Proses pertama mengubah kedua nilai counter pada waktu yang sama persis, setiap 10 ns. Ketika ini terjadi, proses kedua dipicu karena program akan selalu menunggu di wait on CountUp, CountDown; garis. Program akan selalu menunggu di sana karena If-then-Elsif-Else dan pernyataan laporan menghabiskan waktu simulasi nol.

Pernyataan If-then-Elsif-Else akan menyebabkan program mengambil salah satu dari tiga cabang yang kita buat. Dua cabang pertama mencakup kasus di mana kedua penghitung memiliki nilai yang berbeda. Kita bisa saja menjatuhkan satu else , dan menggunakan elsif CountUp = CountDown then yang akan memiliki hasil yang sama. Tapi itu adalah praktik desain yang baik untuk mencakup semua cabang, dan else klausa mencakup semua kasus yang disengaja dan tidak terduga.

Seperti yang dapat kita lihat dari hasil cetakan, proses kedua mengambil salah satu dari tiga cabang setiap kali penghitung berubah.

Bawa Pulang

Pergi ke tutorial berikutnya »


VHDL

  1. Bagaimana Kami Menggunakan Molibdenum?
  2. Cara membuat daftar string di VHDL
  3. Bagaimana menghentikan simulasi di testbench VHDL
  4. Cara membuat pengontrol PWM di VHDL
  5. Cara menghasilkan angka acak di VHDL
  6. Cara menggunakan Prosedur dalam Proses di VHDL
  7. Cara menggunakan Fungsi Tidak Murni di VHDL
  8. Cara menggunakan Fungsi di VHDL
  9. Cara membuat Mesin Finite-State di VHDL
  10. Cara Menggunakan Penggiling Pemotong