Multiplexer VHDL

Diposting oleh blog pribadiku

Multiplexer berfungsi untuk memilih output dari beberapa input berdasarkan input pada kaki selectornya. Multiplexer memiliki rangkaian logika sebagai berikut :



Dalam tulisan kali ini akan dicontohkan kode program vhdl untuk membuat multiplexer dengan 4 input, 2 selector, dan 1 output. Multiplexer diatas memiliki tabel logika :

==========
= s1 = s2 = Y =
==========
= 0 = 0 = a =
= 0 = 1 = b =
= 1 = 0 = c =
= 1 = 1 = d =
===========


Pertama-tama definisikan entitas multiplexer dengan nama "kepletex" :

entity kepletex is -- mendefinisikan entity "kepletex"
port(
a,b,c,d,s1,s2: in bit; -- terdapat 4 port input, 2 selector, dan 1 output
y:out bit);
end kepletex;


Lalu definisikan arsitektur "mux_arch" dari entity "kepletex" :

architecture mux_arch of kepletex is
begin
proc: process is
begin
if (s1='0' and s2='0') then y <= a;
else if (s1='0' and s2='1') then y <= b;
else if (s1='1' and s2='0') then y <= c;
else if (s1='1' and s2='1') then y <= d;
end if;
end process proc;
end mux_arch;


Arsitektur berfungsi untuk menerangkan bagaimana entity "kepletex" bekerja. Namun kode diatas hanyalah berupa template, sehingga tidak bisa dijalankan untuk simulasi maupun di sintesis karena belum didefinisikan bit input pada masing-masing portnya. Untuk itu kita tambahkan entity "sinyal" dan arsitektur "sinyal_arch" yang berfungsi untuk memberikan input pada entity "kepletex".

entity sinyal is
port(
pa,pb,pc,pd,ps1,ps2:out bit);
end sinyal;

architecture sinyal_arch of sinyal is
begin
pros: process is
begin
pa <= '0';
pb <= '1';
pc <='1';
pd <= '0';
ps1 <= '1';
ps2 <= '0';
end process pros;
end sinyal_arch;


Semua kode vhdl diatas digabung menjadi satu menjadi :

library ieee;
use ieee.std_logic_1164.all;

entity kepletex is -- mendefinisikan entity "kepletex"
port(
a,b,c,d,s1,s2: in bit; -- terdapat 4 port input, 2 selector, dan 1 output
y:out bit);
end kepletex;

architecture mux_arch of kepletex is
begin
proc: process is
begin
if (s1='0' and s2='0') then y <= a;
else if (s1='0' and s2='1') then y <= b;
else if (s1='1' and s2='0') then y <= c;
else if (s1='1' and s2='1') then y <= d;
end if;
end process proc;
end mux_arch;

entity sinyal is
port(
pa,pb,pc,pd,ps1,ps2:out bit);
end sinyal;

architecture sinyal_arch of sinyal is
begin
pros: process is
begin
pa <= '0';
pb <= '1';
pc <='1';
pd <= '0';
ps1 <= '1';
ps2 <= '0';
end process pros;
end sinyal_arch;

-- kode dibawah ini merupakan kode yang berfungsi menjalankan --
-- entity yang telah didefinisikan diatas --

library work;
use work.all;

entity eksekusi is
end eksekusi;

architecture eksekusi_arch of eksekusi is
signal in1,in2,in3,in4,select1,select2,output: bit;
begin
w1: entity sinyal port map(in1,in2,in3,in4,select1,select2);
w2: entity kepletex port map(in1,in2,in3,in4,select1,select2,output);
end eksekusi_arch;

0 komentar:

Posting Komentar