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

Menguasai Pernyataan Case-When dalam VHDL: Desain Multiplexer Efisien

Pernyataan Case-When mengarahkan program VHDL di sepanjang salah satu dari beberapa jalur berdasarkan sinyal, variabel, atau ekspresi. Ini menawarkan alternatif yang lebih bersih dan lebih mudah dibaca daripada rantai if-then-elsif-else yang panjang, terutama saat menangani banyak nilai diskrit.

Banyak bahasa pemrograman menggunakan konstruksi seperti switch atau case; dalam VHDL, konstruksi case adalah dasar untuk membangun multiplexer dan logika seleksi lainnya.

Artikel ini adalah bagian dari seri Tutorial VHDL Dasar kami.

Sintaks Dasar

Struktur kanonis dari pernyataan case adalah:

case <expression> is when <choice> => -- code for this branch when <choice> => -- code for this branch ... end case;

<expression> biasanya adalah sinyal atau variabel. Meskipun case dapat berisi banyak cabang when, hanya satu yang akan dieksekusi selama simulasi.

Setiap <choice> dapat berupa:

Latihan Praktis: Membangun Multiplexer 4-ke-1

Di bawah ini adalah kode VHDL lengkap yang menunjukkan multiplexer 4-ke-1 yang diimplementasikan dengan pendekatan if-then-elsif dan case.

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T14_CaseWhenTb is end entity; architecture sim of T14_CaseWhenTb is signal Sig1 : unsigned(7 downto 0) := x"AA"; signal Sig2 : unsigned(7 downto 0) := x"BB"; signal Sig3 : unsigned(7 downto 0) := x"CC"; signal Sig4 : unsigned(7 downto 0) := x"DD"; signal Sel : unsigned(1 downto 0) := (others => '0'); signal Output1 : unsigned(7 downto 0); signal Output2 : unsigned(7 downto 0); begin -- Stimuli for the selector signal process is begin wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= Sel + 1; wait for 10 ns; Sel <= "UU"; wait; end process; -- MUX using if-then-else process(Sel, Sig1, Sig2, Sig3, Sig4) is begin if Sel = "00" then Output1 <= Sig1; elsif Sel = "01" then Output1 <= Sig2; elsif Sel = "10" then Output1 <= Sig3; elsif Sel = "11" then Output1 <= Sig4; else Output1 <= (others => 'X'); end if; end process; -- Equivalent MUX using a case statement process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output2 <= Sig1; when "01" => Output2 <= Sig2; when "10" => Output2 <= Sig3; when "11" => Output2 <= Sig4; when others => Output2 <= (others => 'X'); end case; end process; end architecture; 

Setelah menjalankan simulasi di ModelSim, gelombang menunjukkan perilaku yang identik untuk Output1 dan Output2. Ketika selector Sel mengambil nilai yang tidak terdefinisi (misalnya, "UU"), klausa when others => mengeluarkan 'X', yang menandakan status tidak diketahui.

Keluaran konsol berisi peringatan berikut pada 50 ns, yang menunjukkan perbandingan metanilai:

VSIM 2> run # ** Warning: NUMERIC_STD."=": metavalue detected, returning FALSE # Time: 50 ns Iteration: 1 Instance: /t14_casewhentb # ** Warning: NUMERIC_STD."=": metavalue detected, returning FALSE # Time: 50 ns Iteration: 1 Instance: /t14_casewhentb # ** Warning: NUMERIC_STD."=": metavalue detected, returning FALSE # Time: 50 ns Iteration: 1 Instance: /t14_casewhentb # ** Warning: NUMERIC_STD."=": metavalue detected, returning FALSE # Time: 50 ns Iteration: 1 Instance: /t14_casewhentb

Hal Utama yang Perlu Diingat

Lanjutkan ke tutorial berikutnya untuk konsep VHDL yang lebih lanjut.

VHDL

  1. Contoh Prosedur VHDL: Meningkatkan Vektor Logika Standar
  2. Bagaimana Molibdenum Mengubah Industri Modern: Penggunaan, Manfaat, dan Dinamika Pasokan
  3. Membuat Daftar String dalam VHDL: Praktik Terbaik & Contoh
  4. Mengakhiri Simulasi Testbench VHDL dengan Elegan
  5. Implementasi Pengontrol PWM dalam VHDL: Desain, Simulasi, dan Demo FPGA
  6. Menghasilkan Angka Acak dalam VHDL: Dari Uniform hingga OSVVM
  7. Memanfaatkan Prosedur Dalam Proses untuk Desain FSM VHDL yang Lebih Bersih
  8. Menggunakan Fungsi Tidak Murni di VHDL: Meningkatkan Keterbacaan dan Pemeliharaan FSM
  9. Menguasai Fungsi VHDL: Panduan Praktis untuk Desain Efisien
  10. Menguasai Teknik Mesin Gerinda Cutter: Panduan Praktis