Senin, 25 Oktober 2010

MULTIPLEXER VHDL



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;

Nama Paket Dalam VHDL

Multiplexer atau biasa disebut juga Transceiver berfungsi sebagai rangkaian yang menerima input data dan untuk suatu saat tertentu hanya mengijinkan satu dari data input tersebut untuk lewat mencapai output. Atau pengertian lainnya yaitu rangkaian digital yang memiliki banyak input dan 1 output.

Logika Programmer :

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;

Nama Paket yang terdapat pada Library IEEE dan STD
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

PACKAGE my_package IS
CONSTANT ADDER_WIDTH : integer := 5;
CONSTANT RESULT_WIDTH : integer := 6;

SUBTYPE ADDER_VALUE IS integer RANGE 0 TO 2 **

ADDER_WIDTH - 1;
SUBTYPE RESULT_VALUE IS integer RANGE 0 TO 2 **

RESULT_WIDTH - 1;
END my_package;

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE work.my_package.ALL;

ENTITY addsub IS
PORT
(
a: IN ADDER_VALUE;
b: IN ADDER_VALUE;
addnsub: IN STD_LOGIC;
result: OUT RESULT_VALUE
);
END addsub;

ARCHITECTURE rtl OF addsub IS
BEGIN
PROCESS (a, b, addnsub)
BEGIN
IF (addnsub = ‘1′) THEN
result ELSE
result END IF;
END PROCESS;
END rtl;

Paket Library WORK
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_arith.all;
USE IEEE.std_lodic_unsigned.all;
LIBRARY lpm;
USE lpm.lpm_components.all;
USE WORK.sigdec1.ALL

SEJARAH VHDL :

VHDL adalah singkatan yang dipersingkat karena aslinya adalah VHSIC HDL. Program VHIC (Very Highspeed Integrated Circuit) dikembangkan akhir tahun 1970-an sampai awal 1980-an, berdasarkan sumber dari Universitas Waterloo :

  • Rupanya pada waktu itu program VHSIC dikembangkan oleh Departemen Pertahanan Amerika
  • Alat yang sudah ada (pada waktu itu tahun 1980, yaitu Ada programming language) sudah tidak sanggup untuk membuat desain hardware yang lebih kompleks sehingga akhirnya dibuatlah penggantinya dengan nama VHDL.

Inilah evolusi berdasarkan sumber dari Universitas Waterloo :

  • 1981, VHDL diusulkan sebagai bahasa deskripsi hardware
  • 1986, VHDL diusulkan sebagai standar IEEE
  • 1987, Standar pertama VHDL (IEEE-1076-1987)
  • 1993, Standar VHDL direvisi (IEEE-1076-1993)
  • 2002, Standar VHDL sekarang (IEEE-1076-2002), dan
  • Sekarang digunakan dengan luas oleh kalangan industri dan akademi, dengan penambahan IEEE-1164-1993 untuk mengenalkan nilai sistem logika

IEEE adalah singkatan dari Institut of Electrical and Electronics Engeneers, Institut inilah yang melakukan standarisasi VHDL.