1. Tujuan
Perancangan secara hirarki dengan component
Pengenalan penggunaan memori internal dengan VHDL
Membuat simulasi Test Bench VHDL
Implementasi rancangan pada FPGA devais
3. Langkah percobaan
11. Untuk implementasi ini ada 1 file top level vhdl dan 3 buah file komponen sebagaimana
digambarkan pada langkah 10 diatas.
TOP LEVEL VHDL:
Clock Divider:
COUNTER:
ROM:
12. Buat keempat file VHDL diatas dengan 4 file yang berbeda.
13. Check syntax dan synthesize
14. Tugas1: Buat Test Bench nya sebagaimana percobaan pekan sebelumya
15. Tugas2: Implementasikan hardwarenya, displaykan pada led dengan input dari clock dan
switch (Lihat percobaan sebelumnya)
PRAKTIKUM VLSI DAN PERANCANGAN LOGIKA KOLOM ACC
LAB H-102
KAMIS, 31 OKTOBER 2019
NAMA KELOMPOK :
1. Fidhi Pradinni Nurani (1110171031)
2. Ghagas Prabaswara (1110171032)
3. Marta Diana (1110171056)
4. Dita Anggraini Pratiwi (1110171057)
PRAKTIKUM 7
Perancangan FPGA dengan Hirarki (Component)
component counter
generic(
N : INTEGER := 5
);
port (
clock : in std_logic;
reset : in std_logic;
count_en : in std_logic;
count_out : out std_logic_vector(N-1 downto 0)
);
end component;
component ROM
port( Clock : in std_logic;
Reset : in std_logic;
Enable : in std_logic;
ReadROM : in std_logic;
Address : in std_logic_vector(4 downto 0);
Data_out : out std_logic_vector(7 downto 0)
);
end component;
U3 : ROM
port map(
Clock => clk3,
Reset => btn,
Enable => '1',
ReadROM => ReadROM,
Address => sign_counter,
Data_out => led
);
end Struc;
--entity Hirarki is
--end Hirarki;
--architecture Behavioral of Hirarki is
--begin
--end Behavioral;
entity clkdiv is
port (
mclk : in STD_LOGIC;
clr : in STD_LOGIC;
clk3 : out STD_LOGIC
);
end clkdiv;
end Behavioral;
c. Counter – VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity counter is
GENERIC(n: natural :=4);
port( clock: in std_logic;
reset: in std_logic;
count_en: in std_logic;
count_out: out std_logic_vector(n-1 downto 0)
);
end counter;
d. ROM – VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ROM is port( Clock : in std_logic;
Reset : in std_logic;
Enable : in std_logic;
ReadROM : in std_logic;
Address : in std_logic_vector(4 downto 0);
Data_out: out std_logic_vector(7 downto 0)
);
end ROM;
architecture Behavioral of ROM is
type ROM_Array is array (0 to 31)
of std_logic_vector(7 downto 0);
constant Content: ROM_Array := (
0 => "00000001", -- Suppose ROM has
1 => "00000010", -- prestored value
2 => "00000011", -- like this table
3 => "00000100", --
4 => "00000101", --
5 => "00000110", --
6 => "00000111", --
7 => "00001000", --
8 => "00001001", --
9 => "00001010", --
10 => "00001011", --
11 => "00001100", --
12 => "00001101", --
13 => "00001110", --
14 => "00001111", --
OTHERS => "11111111" --
);
begin
process(Clock, Reset, ReadROM, Address)
begin
if( Reset = '1' ) then
Data_out <= "ZZZZZZZZ";
elsif( Clock'event and Clock = '1' ) then
if Enable = '1' then
if( ReadROM = '1' ) then
Data_out <= Content(conv_integer(Address));
else
Data_out <= "ZZZZZZZZ";
end if;
end if;
end if;
end process;
end Behavioral;
e. Hirarki – VHDL
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY TBHirarki IS
END TBHirarki;
Berdasarkan apa yang kami kerjakan tentang Perancangan FPGA dengan Hirarki
(Component) maka dapat dianalisa bahwa, dengan menggunakan address (01000) akan didapatkan
hasilnya yaitu dengan nilai clock selama 10ms kondisi high dan 10ms kondisi low, dengan keadaan
clock tersebut terjadi secara berulang terus menerus sampai dengan n-periode pada led[7:0],
q[23:0], dan sign_counter[4:0].
Kemudian untuk periode master clock (mclk_period) pada led[7:0] maka didapatkan
hasilnya yaitu sebesar 1000ps, dengan pergantian urutan angka biner pada led[7:0] setiap 20ms.
Sama hal nya seperti data_out[7:0].
Sedangkan pada address [4:0] terdapat 5-bit didalamnya (01000), bit LSB (yang paling
kanan) mengalami kondisi high dan low selama 20ms, dalam keadaan tersebut maka terjadi secara
berulang terus menerus. Kemudian bit setelah LSB (2 dari kanan) mengalami kondisi high dan
low selama 40ms, keadaan tersebut juga terjadi secara terus menerus. Dan untuk bit selanjutnya,
lama kondisi high dan low yang terjadi adalah sebesar dua kali dari lamanya bit sebelumnya.
KESIMPULAN
• Clock domain, Synthesis tool dapat menangangani banyak clock pada satu periode. Jika
rancangan mempunyai clockd engan periode yang berbeda, maka rancangan perlu dibagi
dengan clock domain, sehingga logic nya mempunyai domain yang berbeda, dapat di-
synthesis dan dioptimalkan secara terpisah.
• Output dari percobaan ini adalah data dari nyala led[7:0], yang pada simulasi ini berupa
urutan angka biner dengan jumlah 8-bit.