Menguasai Instantiasi Port Map dalam VHDL: Panduan Praktis
Dalam VHDL, modul adalah unit yang contained yang berkomunikasi dengan dunia luar melalui entity nya. Klausa port map dari instantiasi menghubungkan port formal entity ke sinyal dalam desain sekitar.
Modul, Entitas, dan Testbench
Saat kita mengembangkan untuk FPGA atau ASIC, logika desain tinggal dalam modul yang memiliki port input dan output yang didefinisikan dengan jelas. Modul yang tidak memiliki port adalah testbench—wraper simulasi yang memberikan stimuli ke device under test (DUT) tetapi tidak pernah muncul pada chip fisik.
Dalam pos sebelumnya kita menulis semua VHDL dalam satu berkas, yang nyaman untuk eksperimen cepat tetapi tidak cocok untuk desain produksi. Memisahkan DUT dari testbenchnya meningkatkan keterbacaan, penggunaan kembali, dan menjadikan hierarki simulasi jelas.
Konvensi Penamaan Umum
Banyak tim mengikuti skema sederhana: berkas desain adalah MyModule.vhd, sementara testbenchnya adalah MyModuleTb.vhd. Arsitektur DUT sering disebut rtl (register-transfer level), dan arsitektur testbench disebut sim. Konvensi ini segera memberitahu Anda apakah berkas dimaksudkan untuk sintesis atau simulasi.
Sintaks VHDL untuk Instantiasi Port Map
Definisikan antarmuka modul dengan kata kunci entity:
entity <entity_name> is port( <entity_signal_name> : in|out|inout <signal_type>; ... ); end entity;
Instantiasi modul dalam berkas VHDL lain dengan port map eksplisit:
<label> muncul dalam hierarki simulator, <library_name> default ke work, dan setiap port formal harus terikat ke sinyal lokal.
Contoh Praktis: MUX 4-ke-1
Di bawah ini adalah pasangan testbench dan DUT lengkap yang mengimplementasikan multiplexer 4-ke-1 menggunakan sinyal unsigned 8-bit.
Kode Testbench
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_PortMapTb is end entity; architecture sim of T15_PortMapTb 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 Output : unsigned(7 downto 0); begin -- Instantiate the MUX with architecture rtl i_Mux1 : entity work.T15_Mux(rtl) port map( Sel => Sel, Sig1 => Sig1, Sig2 => Sig2, Sig3 => Sig3, Sig4 => Sig4, Output => Output); -- Stimulus process 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; end architecture;
Kode Modul
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T15_Mux is port( -- Inputs Sig1 : in unsigned(7 downto 0); Sig2 : in unsigned(7 downto 0); Sig3 : in unsigned(7 downto 0); Sig4 : in unsigned(7 downto 0); Sel : in unsigned(1 downto 0); -- Output Output : out unsigned(7 downto 0) ); end entity; architecture rtl of T15_Mux is begin process(Sel, Sig1, Sig2, Sig3, Sig4) is begin case Sel is when "00" => Output <= Sig1; when "01" => Output <= Sig2; when "10" => Output <= Sig3; when "11" => Output <= Sig4; when others => Output <= (others => 'X'); end case; end process; end architecture;
Analisis Gelombang
Menjalankan testbench di ModelSim menghasilkan gelombang yang sesuai dengan perilaku yang diharapkan dari MUX. Cuplikan gelombang di bawah ini memastikan bahwa DUT dengan benar beralih di antara keempat sinyal input saat sinyal Sel berubah.
Hal Utama yang Perlu Diingat
Modul mengekspos input dan output melalui port entity mereka.
Testbench tidak memiliki port dan hanya untuk simulasi.
Port mapping eksplisit adalah cara paling transparan untuk menginstantiasi modul VHDL.
Penamaan yang konsisten (misalnya, rtl untuk DUT, sim untuk testbench) meningkatkan keterbacaan di seluruh proyek.
Lanjutkan ke tutorial berikutnya untuk wawasan yang lebih dalam tentang pola desain VHDL.