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:
tidaka
benar jika a adalah salah
adanb
benar jika a dan b benar
aataub
benar jika a atau b benar
adanb
benar jika a atau b salah
aataub
benar jika a dan b salah
axorb
benar jika tepat salah satu dari a atau b benar
axnorb
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:
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
If-then dapat digunakan sendiri atau dikombinasikan dengan Elsif dan Else.
Ekspresi dapat berisi perbandingan relasional dan logis serta perhitungan matematis