LIBRARY ENTITY
END COMPONENT;
END COMPONENT; COMPONENT instantiation:
• Test Bench
Test bench adalah proses pengujian suatu rancangan rangkaian. Dalam proses perancangan rangkaian, test bench akan menguji design rangkaian apakah sudah sesuai atau belum. Test bench ini dilakukan dengan menggunaan file HDL (berbentuk kode, baik VHDL maupun Verilog). Sehingga berbeda dengan bentuk diagram yang menggunakan gambar sebagai tampilannya, test bench menggunakan kode-kode tulisan sebagai tampilannya.
Test bench biasanya ditulis dengan kode bahasa VHDL maupun Verilog. Bentuk test bench ini terbilang lebih sukar dibandingkan dengan bentuk timing diagram. Hal ini disebabkan karena untuk melakukan test bench, diperlukan kemampuan untuk menulis dan mengerti kode-kode VHDL maupun verilog. Sehingga bentuk test bench pada umumnya sering dipakai oleh pengguna FPGA tingkat mahir. VHDL Test Bench File: myadder_tb.vhd
library IEEE;
use IEEE.std_logic_1164.ALL; ENTITY myadder_tb is END myadder_tb;
ARCHITECTURE simulate OF myadder_tb IS ---
--- The parent design, myadder8_top, is instantiated --- in this testbench. Note the component
--- declaration and the instantiation. --- COMPONENT myadder8_top PORT ( AP : IN std_logic_vector(7 downto 0); BP : IN std_logic_vector(7 downto 0); CLKP: IN std_logic ; C_INP: IN std_logic;
QP: OUT std_logic_VECTOR (8 downto 0)); END COMPONENT;
SIGNAL a_data_input :std_logic_vector(7 DOWNTO 0); SIGNAL b_data_input :std_logic_vector(7 DOWNTO 0); SIGNAL clock : std_logic;
SIGNAL sum :std_logic_vector (8 DOWNTO 0); BEGIN uut: myadder8_top PORT MAP ( AP =>a_data_input, BP =>b_data_input, CLKP => clock, C_INP=>carry_in, QP => Q); stimulus: PROCESS BEGIN ---
---Provide stimulus in this section. (not shown here) ---
wait;
end process; -- stimulus END simulate;
Contoh – contoh implementasi VHDL: • Sebuah Program AND 3 input
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; entity AND3input is
port (A,B,C : in std_logic; Z : out std_logic);
End AND3input;
Architecture behavioral of AND3input is Begin
Z <= A AND B AND C; End behavioral;
• Program Half Adder library ieee; use ieee.std_logic_1164.all; entity half_adder is port ( a_input : in std_logic; b_input : in std_logic; cout : out std_logic;
sum : out std_logic); End entity half_adder;
Architecture half_adder_bhv of half_adder is Begin
Sum <= a_input xor b_input ; Cout<= a_input and b_input; End half_adder_bhv;
• Implementasi Full Adder dengan component Half Adder library ieee; use ieee.std_logic_1164.all; --nama entity entity full_adder is port ( a_input : in_std_logic; b_input : in std_logic; cin : in std_logic; cout : out std_logic; sum : out std_logic ); --port dari entity end entity full_adder;
--nama architecture --nama entity architecture full_adder_bhv of full_adder is component half_adder is
a_input : in std_logic; b_input : in std_logic; sum : out std_logic; cout : out std_logic);
end component half_adder; signal sum0 : std_logic; signal cout0 : std_logic; signal cout1 : std_logic; begin
FA0 : half_adder
port map (a_input =>a_input , b_input => b_input , sum => sum0 , cout => cout0); FA1 : half_adder
port map (a_input => cin , b_input => sum0 , sum => sum , cout => cout1); cout<= cout0 or cout1;
end full_adder_bhv;
• Implementasi Counter Up- Down 2bit library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Counter_VHDL is
port( Clock: in std_logic; Reset: in std_logic; Updown: in std_logic;
Output: out std_logic_vector(0 to 3) ); end Counter_VHDL;
architecture Behavioral of Counter_VHDL is signal a: std_logic_vector(0 to 3);
begin
begin
if Reset='1' then a <= "0000";
elsif ( Clock'event and Clock='1') then if Updown='0' then a <= a + 1; else a <= a - 1; end if; end if; end process; Output <= a; end Behavioral;
• Shift Register 4-bit Library ieee;
Use ieee.std_logic_1164.all; Entity shift4 is
Port (w, clock : in std_logic; Q : out std_logic_vector (1 to 4)); end shift4;
architecture behavior of shift4 is signal sreg: std_logic_vector (1 to 4); begin
process (clock) begin
if clock ‘event and clock = ‘1’ then sreg (4) <= w;
sreg (3) <= sreg(4); sreg (2) <= sreg (3);
sreg (1) <= sreg (2); end if;
end process; Q <= sreg; End behavior;
• Detektor Sekuensial (mealy 011, D-FF) o D-FF Library IEEE; Use IEEE.STD_LOGIC_1164.ALL; Entity dataFF is Port ( clk, rst, d : in std_logic; q : out std_logic); end dataFF;
architecture behav of dataFF is begin baca : process (clk, rst) begin if (rising_edge (clk)) then if rst = ‘1’ then q <= d; end if; end process; end behav; o Detektor Sekuensial library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mealy011 is port ( clk, rst, x : in std_logic; z : out std_logic); end mealy011;
architecture behav of mealy011 is component dataFF is
port (
clk, rst, d : in std_logic; q : out std_logic); end component dataFF; signal q1 : std_logic; signal q2 : std_logic; signal d1 : std_logic; signal d2 : std_logic;
begin
DFF1 : dataFF
port map (d => d1, clk => clk, q => q1, rst => rst); DFF2 : dataFF
port map (d => d2, clk => clk, q => q2, rst => rst); d1 <= (not q1) and q2 and x;
d2 <= (not x) or ((not q1) and q2); z <= q1 and x;
end behav; D. Pengenalan Quartus
Software Quartus merupakan salah satu program untuk melakukan proses synthesis dan implementasi desain rangkaian yang telah dibuat dalam VHDL, menjadi file konfigurasi FPGA (*.vhd). Dalam praktikum ini digunakan Quartus II version 12.1.
Sintesis HDL merupakan proses pembangunan rangkaian secara skematik yang tersusun atas gerbang logika atau komponen lain dari suatu rangkaian yang telah dibuat menggunakan bahasa VHDL. Sintesis rangkaian bertujuan untuk memperlihakan bagaimana bentuk rancangan secara skematik dari suatu scipt VHDL.
Setelah script disintesis, barulah rangkaian ini dapat diload ke kit FPGA. Tahapannya dimulai dari perutean pin – pin pada FPGA yang dihubungkan dengan rangkaian digital yang telah dibuat, lalu dilakukan inisiasi tipe FPGA yang dipakai, setelah itu barulah dilakukan load rangkaian digital ke FPGA.
b. Penggunaan Software Quartus 1. Membuat project baru
a) Buat project baru dengan memilih file > New Project Wizard.
c) Pilih tempat penyimpanan project yang ingin dibuat dan tentukan nama project yang ingin dibuat, lalu klik Next.
e) Pilih Cyclone II pada sub menu device family lalu pada sub menu target device pilih Specific device selected in ‘Available device’ list, kemudian pilih device dengan nama EP2C20F484C7 setelah itu klik Next.
g) Klik Finish.
2. Membuat lembar kerja baru
a) Untuk membuat lembar kerja baru pilih file > New…
3. Meng-compile program rangkaian digital a) Contoh hasil pengkodean (Half Adder).
Berikut contoh scriptnya :
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.all;
ENTITY Belajar1 IS
PORT (X1,X2 : INSTD_LOGIC; Y1,Y2 : OUTSTD_LOGIC);
END Belajar1;
ARCHITECTURE LogicFunction OF Belajar1 IS
BEGIN
Y1 <= X1 XOR X2; Y2 <= X1 AND X2;
END LogicFunction;
b) Cari tool pada bagian atas interface software Quartus, lalu klik tool tersebut.
d) Berikut hasil program yang telah berhasil di-compile.
4. Melihat hasil sintesis rangkaian digital
a) Hasil rangkaian dapat dilihat dengan dua metode. Yaitu, Technology Map Viewer dan RTL Viewer. b) Ikuti langkah berikut untuk melihat hasil rangkaian logika dengan Technology Map Viewer.
d) Ikuti langkah berikut untuk melihat hasil rangkaian logika dengan RTL Viewer.
e) Berikut adalah contoh hasil menggunakan RTL Viewer.
5. Melakukan simulasi rangkaian digital a) Klik tools RTL Simulation.
b) Pada bagian library cari sub library work lalu pilih entity file yang sama dengan program sintesis rangkaian yang dibuat.
c) Pada bagian object pilih semua variable yang ada pada rangkaian untuk dimasukkan ke jendela simulasi.
d) Buka jendela simulasi.
e) Pada variable input masukkan nilai yang diinginkan dan ubah selang waktu yang dibutuhkan sesuai keinginan.
E. Prosedur Praktikum a. Program Full Subtractor
1. Buat sebuah program Half Subtractor 2. Simulasikan semua kemungkinan input
3. Buat sebuah program Full Subtractor dari program Half Subtractor yang sebelumnya anda buat 4. Simulasikan semua kemungkinan input
5. Isi Jurnal Praktikum b. Program Multiplier
simulasikan, dan catat hasilnya pada jurnal ! ket : Black box merupakan komponen full adder F. Contoh Program
a. FULL SUBSTRACTOR library IEEE;
use IEEE.STD_LOGIC_1164.ALL; entity FullSubs is
Port ( Borin : in STD_LOGIC; A : in STD_LOGIC; B : in STD_LOGIC; D : out STD_LOGIC;
Borout : out STD_LOGIC); end FullSubs;
architecture Behavioral of FullSubs is component HalfSubs is
port (a_input : in STD_LOGIC; b_input : in STD_LOGIC; bor : out STD_LOGIC; diff : out STD_LOGIC); end component HalfSubs;
signal d0, b0, b1 : std_logic; begin
FA0 : HalfSubs
port map (a_input => A, b_input => B, bor => b0, diff => d0); FA1 : HalfSubs
port map (a_input => Borin, b_input => d0, bor => b1, diff => D); Borout <= b0 or b1; end Behavioral; b. HALF SUBSTRACTOR library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity HalfSubs is
Port ( a_input : in STD_LOGIC; b_input : in STD_LOGIC; bor : out STD_LOGIC; diff : out STD_LOGIC); end HalfSubs;
architecture Behavioral of HalfSubs is begin
bor<= (not(b_input)) and a_input ; diff<= a_input xor b_input;
end Behavioral; c. MULTIPLIER library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Multiply is Port ( A0 : in STD_LOGIC; A1 : in STD_LOGIC; B0 : in STD_LOGIC; B1 : in STD_LOGIC; C0 : out STD_LOGIC; C1 : out STD_LOGIC; C2 : out STD_LOGIC; C3 : out STD_LOGIC); end Multiply;
architecture Behavioral of Multiply is begin
C0 <= A0 and B0;
C1 <= (A0 and B1) xor (A1 and B0);
C2 <= ((A0 and B1) and (A1 and B0)) xor (A1 and B1); C3 <= ((A0 and B1) and (A1 and B0)) and (A1 and B1); end Behavioral;
MODUL IV
SINTESIS RANCANGAN RANGKAIAN MENGGUNAKAN VHDL