Anda di halaman 1dari 15

Perancangan FPGA dengan Hirarki (Component)

1. Tujuan
 Perancangan secara hirarki dengan component
 Pengenalan penggunaan memori internal dengan VHDL
 Membuat simulasi Test Bench VHDL
 Implementasi rancangan pada FPGA devais

2. Peralatan yang dibutuhkan


 Komputer yang sudah terinstall software XILINK ISE Design Suite 14.7 dan Adept Digital
 BASYS 2 FPGA board

3. Langkah percobaan

1. Buka software ISE Design Suite 14.7

2. Klik pada tombol “New Project” untuk membuat project baru.


3. Beri nama project dan letakkan project pada folder yang ditentukan serta Top-level source
type adalah HDL.
4. Setting jenis FPGA dan konfigurasi lainnya sesuai gambar dibawah, dimana
Family: Spartan-3E
Device: XC3S100E atau XC3S250E, tergantung jenis chip board anda
Package: CP132
Speed: -4
Preferred Language: VHDL
5. Klik Next dan anda akan mendapat konfirmasi konfigurasi yang telah dilakukan.
Selanjutnya klik Finish.
6. Selanjutnya buat file VHDL dengan cara klik kanan pada nama project, selanjutnya pilih
New Source.
7. Pilih jenis source VHDL Module dan berilah nama, misalnya Counter.
8. Selanjutnya langsung klik Next kemudian Finish, karena kita akan membuat port secara
manual dengan text.
9. Maka anda akan mendapatkan file baru (*.vhd), tetapi tanpa deskripsi port yang akan
digunakan.
10. Untuk percobaan ini kita akan mensimulasikan dan implementasi counter dan ROM

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)

a. Top Level – VHDL


library IEEE;
use IEEE.std_logic_1164.all;
entity TopLevel is
port(
mclk : in std_logic;
btn : in std_logic;
ReadROM : in std_logic;
led : out std_logic_vector(7 downto 0)
);
end TopLevel;

architecture Struc of TopLevel is


component clkdiv
port (
clr : in std_logic;
mclk : in std_logic;
clk3 : out std_logic
);
end 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;

signal clk3 : std_logic;


signal sign_counter : std_logic_vector(4 downto 0);
begin
U1: clkdiv
port map(
clk3 => clk3,
clr => btn,
mclk => mclk
);
U2 :counter
generic map(
N=>5)
port map(
clock => clk3,
reset => btn,
count_en => '1',
count_out => sign_counter
);

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;

b. Clk Divider – 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 clkdiv is
port (
mclk : in STD_LOGIC;
clr : in STD_LOGIC;
clk3 : out STD_LOGIC
);
end clkdiv;

architecture Behavioral of clkdiv is


signal q : STD_LOGIC_VECTOR(23 downto 0);
begin
--clock divider
process (mclk,clr)
begin
if clr = '1' then
q <= X"000000";
elsif mclk'event and mclk = '1' then
q <= (q + 1);
end if;
end process;
clk3 <= q(20) ;

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;

architecture Behavioral of counter is


signal sign_counter: std_logic_vector(n-1 downto 0);
begin
process(clock, count_en, reset)
begin
if reset = '1' then
sign_counter <= (others=>'0');
elsif (clock='1' and clock'event) then
if count_en = '1' then
sign_counter <= sign_counter + 1;
end if;
end if;
end process;
count_out <= sign_counter;
end Behavioral;

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;

ARCHITECTURE behavior OF TBHirarki IS


-- Component Declaration for the Unit Under Test (UUT)
COMPONENT TopLevel
PORT(
mclk : IN std_logic;
btn : IN std_logic;
ReadROM : IN std_logic;
led : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
--Inputs
signal mclk : std_logic := '0';
signal btn : std_logic := '0';
signal ReadROM : std_logic := '0';
--Outputs
signal led : std_logic_vector(7 downto 0);
-- Clock period definitions
constant mclk_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: TopLevel PORT MAP (
mclk => mclk,
btn => btn,
ReadROM => ReadROM,
led => led
);

-- Clock process definitions


mclk_process :process
begin
mclk <= '0';
wait for mclk_period/2;
mclk <= '1';
wait for mclk_period/2;
end process;
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
btn <= '1';
wait for 100 ns;
btn <= '0';
ReadROM <= '1';
wait for mclk_period*10;
-- insert stimulus here
wait;
end process;
END;
Hasil Running:
ANALISA DATA

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

Berdasarkan percobaan dan analisa maka dapat disimpulkan bahwa:

• 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.

Anda mungkin juga menyukai