Menguasai Pernyataan Konkuren dalam VHDL: Panduan Praktis
Pernyataan konkuren dalam VHDL adalah penugasan sinyal yang terletak langsung dalam arsitektur, di luar blok process apa pun. Ini juga disebut sebagai tugas konkuren atau proses konkuren.
Saat Anda menulis pernyataan konkuren, Anda secara efektif membuat proses yang secara otomatis sensitif terhadap setiap sinyal yang muncul di sisi kanan penugasan. Dengan kata lain, tugas konkuren adalah sintaktis gula untuk proses dengan daftar sensitivitas lengkap.
Singkatan ini sangat berguna saat Anda ingin mengimplementasikan logika kombinatorial sederhana yang mendorong satu sinyal. Alih-alih mengeja konstruksi process lengkap dengan daftar sensitivitas, Anda dapat menetapkan langsung ke sinyal target dalam tubuh arsitektur.
Tutorial ini adalah bagian dari seri Tutorial VHDL Dasar.
Saat digunakan dengan benar, niat kode tetap sangat jelas—tidak perlu membingungkan desain dengan proses untuk setiap bit yang ingin Anda nyalakan.
Latihan
Dalam video ini kita mempelajari cara membuat pernyataan konkuren:
Kode akhir yang kita buat dalam tutorial ini:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T13_ConcurrentProcsTb is end entity; architecture sim of T13_ConcurrentProcsTb is signal Uns : unsigned(5 downto 0) := (others => '0'); signal Mul1 : unsigned(7 downto 0); signal Mul2 : unsigned(7 downto 0); signal Mul3 : unsigned(7 downto 0); begin process is begin Uns <= Uns + 1; wait for 10 ns; end process; -- Process multiplying Uns by 4 process is begin Mul1 <= Uns & "00"; wait on Uns; end process; -- Equivalent process using sensitivity list process(Uns) is begin Mul2 <= Uns & "00"; end process; -- Equivalent process using a concurrent statement Mul3 <= Uns & "00"; end architecture;
Jendela gelombang di ModelSim setelah kita menekan run, dan memperbesar timeline:
Kita dapat melihat dari gelombang bahwa Mul1, Mul2, dan Mul3 berperilaku sama persis. Ini memastikan bahwa pernyataan konkuren dan dua proses yang kita tulis sepenuhnya setara.
Pernyataan konkuren beroperasi sama seperti proses: semua sinyal yang muncul di sisi kanan dari <= secara implisit ditambahkan ke daftar sensitivitasnya. Akibatnya, sinyal di sisi kiri diperbarui setiap kali salah satu sinyal yang dievaluasi berubah.
Dalam contoh ini kita mengalikan sinyal Uns dengan 4 menggunakan geser bit ke kiri. Semua sinyal kami bertipe unsigned, jadi kompiler memperlakukan mereka sebagai nilai numerik. Menambahkan dua bit nol ke kanan bilangan biner setara dengan mengalikan dengan 4.
Kesimpulan
Pernyataan konkuren adalah penugasan sinyal yang ditempatkan langsung dalam arsitektur.
Secara fungsional identik dengan proses dengan semua sinyal sisi kanan pada daftar sensitivitasnya.