Menguasai Logika Kondisional dalam VHDL: If-Then-Elsif-Else Dijelaskan
Dalam tutorial sebelumnya kami menggunakan ekspresi kondisional dengan pernyataan Wait Until untuk memicu proses hanya ketika dua sinyal counter cocok. Bagaimana jika kita perlu program untuk mengambil tindakan yang berbeda berdasarkan input yang bervariasi?
Konstruksi If-Then-Elsif-Else memungkinkan kami untuk mencabang logika. Bergantung pada nilai variabel atau hasil ekspresi, program dapat mengikuti jalur yang berbeda.
Artikel ini merupakan bagian dari seri Tutorial Dasar VHDL.
Sintaks Dasar
Bentuk kanonik adalah:
if <condition> then elsif <condition> then else end if;
Klausa elsif dan else bersifat opsional, dan elsif dapat muncul berkali-kali. Sebuah <condition> dapat berupa literal boolean atau ekspresi yang mengevaluasi ke true atau false.
Contoh: MyCounter < 10 benar ketika MyCounter kurang dari sepuluh.
Operator Relasional
=
sama dengan
/=
tidak sama dengan
<
kurang dari
<=
kurang dari atau sama dengan
>
lebih dari
>=
lebih dari atau sama dengan
Operator Logika
nota
benar jika a salah
aandb
benar jika a dan b benar
aorb
benar jika a atau b benar
anandb
benar jika a atau b salah
anorb
benar jika a dan b salah
axorb
benar jika tepat satu dari a atau b benar
axnorb
benar jika a dan b sama
Latihan
Berikut adalah contoh lengkap VHDL yang mendemonstrasikan konstruksi If-Then-Elsif-Else dalam tindakan.
Kode akhir:
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;
Keluaran konsol simulator saat menjalankan model di ModelSim:
Kami menginisialisasi CountDown ke 10 dan CountUp ke 0. Kedua counter diperbarui secara bersamaan setiap 10 ns dalam proses pertama. Proses kedua menunggu sinyal-sinyal ini, sehingga memicu setiap kali mereka berubah. Blok If-Then-Elsif-Else kemudian memilih salah satu dari tiga cabang: CountUp > CountDown, CountUp < CountDown, atau CountUp = CountDown. Meskipun else eksplisit tidak wajib, menyertakannya adalah praktik terbaik, yang memastikan semua kasus tepi ditangani.
Lacak konsol memastikan bahwa proses kedua mengevaluasi kondisi setelah setiap pembaruan, mencetak pesan yang sesuai.
Kesimpulan
Gunakan If-Then sendirian atau gabungkan dengan Elsif dan Else untuk mencakup semua skenario yang mungkin.
Kondisi dapat mencakup ekspresi relasional, logika, dan aritmatika.