LAPORAN
PERCOBAAN : 6
KELAS : D4 LJ Elektronika
NRP : 2122640013
FPGA merupakan kepanjangan dari Field Programmable Gate Array yaitu programmable
device besar yang tersusun atas modul-modul logika independen yang dapat di konfigurasi oleh
pemakai yang di hubungkan melalui kanal-kanal routing yang dapat di program.
Field Programmable Gate Array (FPGA) mempunyai kelebihan sebagai berikut :
• Dikonfigurasi oleh End User
• Tidak memerlukan proses Fabrikasi
• Tersedia solusi yang mendukung chip customized VLSI
• Mampu menimplementasikan logic circuit, instant manufacturring, very-low cost
prototype
• Pemrograman yang singkat untuk fungsi dan kemampuan yang setara dengan ASIC
FPGA ini sendiri juga merupakan IC tipe HDL yang mana pemakai dapat mendesain
hardware sesuai yang diinginkan di dalam IC FPGA. Sedangkan perkembangan FPGA pada
saat ini berlangsung dengan cepat dan dewasa ini terdapat bermacam-macam keluarga FPGA
dengan kebutuhan perancangan dan perangkat perancangan ( design tools ) yang berbeda.
Xilinx merupakan salah satu perusahaan yang memproduksi FPGA disamping perusahaan lain
yang juga memproduksi FPGA seperti ACTEL dan PLESSEY Semiconductor. Xilinx sendiri
memproduksi beberapa jenis FPGA yaitu VIRTEX, SPARTAN, XC3000, XC4000 dan
XC5000.
Arsitektur FPGA
Secara umum arsitektur bagian dalam dari IC FPGA terdiri atas tiga elemen utama yaitu
Input/Output Blok ( IOB ), Configurable Logic Block (CLB) dan Interkoneksi. Configurable
Logic Blocks :
• Look up table based complex structure
• Implement the sequential circuit
Programmable Interconnect :
• Berisi wire segments dan programmable switches
• Menghubungkan anata Configurable Logic Blocks yang berbeda
Input/output block :
• Sebagai interface antara external package pin dari device dan internal user logic
Placement
After mapping the circuit into logic blocks placement algorithms are used to place
each block in the FPGA’s array
Typically these minimize the total length of interconnect required for placement
Routing software
Mengatur FPGA’s wire segments dan menentukan programmable switches untuk
menghubungkan antar FPGA blocks
Memastikan 100% connections telah terbentuk
Meminimalkan propagation delay pada time-critical connections
Programming unit
Mengkonfigurasi chip setelah placement & routing step tuntas
Keseluruhan proses memakan waktu antara beberapa menit sampai beberapa jam
1.4.Langkah Percobaan
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
Package: CP132
Speed: -4
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 My_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 membuat Counter 4-bit. Dimana input akan
didapatkan dari Switch dan Clock dari externa, Output akan ditampilkan pada
Seven-Segment. Percobaan akan dilakukan pada board Basys2 dengan IC FPGA
Spartan 3E.
library IEEE;
use
IEEE.STD_LOGIC_1164.ALL;
use
IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Decoder is
Port ( mclk : in STD_LOGIC;
Switch : in STD_LOGIC_VECTOR (7 downto 0); -- 3-bit input
Seven_Segment : out STD_LOGIC_VECTOR (0 to 6);
Led : out STD_LOGIC_VECTOR (7 downto 0) -- 8-bit output
); -- enable input
end Decoder;
begin
Led <= Switch;
reset <=
Switch(6);
end process;
--Counter
process(mclk,CE,Reset)
begin if Reset='1' then
sign_Count_Out <= "0000";
elsif(rising_edge(mclk))
then
if CE='1' then
if sign_Count_Out="1111" then
sign_Count_Out<="0000";
else
sign_Count_Out<=sign_Count_Out + 1;
end if;
end if;
end if;
end process;
13. Buat file deskripsi untuk penggunaan pin pada FPGA. Pada langkah ini Lokasi
Switch akan disetting untuk tepat terhubung dengan FPGA. Klik kanan pada
nama project, NEW Source kemudian pilih Implementation Constraints File
14. Buat file baru yang bernama my_Counter.ucf. Edit file ini menjadi seperti berikut
kemudian save:
# clock pin for Basys2 Board
16. Lakukan Generate Programming File untuk mendapatkan bit file yang akan di
upload ke FPGA. Apabila tidak ada error, maka anda akan mendapatkan bit file.
17. Sampai dengan tahap ini, anda sudah berhasil membuat file bit yang siap untuk
diupload ke FPGA.
18. Persiapkan board BASYS 2 FPGA. Hubungkan kabel USB ke board dan Switch-
On kan. Maka led merah dekat USB dan switch akan menyala.
19. Aktifkan software Adept Digilent, maka board akan otomatis dikenali oleh
software.
20. Klik Browse yang sejajar dengan FPGA XC3S dan upload file decoder.bit yang
sudah dibuat sebelumnya. Lokasi ada di folder project, misal COBA1_FPGA.
Klik Yes untuk memprogram FPGA.
21. Amati pada Board FPGA, apakah output pada Seven-segmen sesuai dengan yang
dirancang.
1.5. Data Hasil Percobaan dan Tugas
Hasil Percobaan :
Tugas untuk dikerjakan di LAB
a. Rubahlah nilai batas pada “ if cntDiv = X"F00000" then”, dengan nilai yang
jauh lebih kecil dan jauh lebih besar, jelaskan apa yang terjadi?
- Yang terjadi adalah proses counting akan semakin lambat saat nilai
tersebut diperbesar, dan semakin cepat saat counting diperkecil.
b. Edit kode VHDL untuk mendapatkan rangkaian UP-Down counter. Gunakan
Switch(7) sebagai pengatur counter up atau down.
c. Membuat counter dari 0 sampai 9999.
d. Membuat counter dengan kelipatan, dari switch 0 dan 1 jika bernilai 01 maka
kelipatan 1, jika 10 maka kelipatan 2, dan terakhir 11 maka kelipatan 3.
Jika tidak ada error dapat melanjutkan ke langkah selanjutnya, jika ada error harus
merevisi Kembali syntax yang ditulis.
4. Selanjutnya membuat file deskripsi untuk penggunaan pin pada FPGA. Pada
langkah ini Lokasi Switch akan disetting untuk tepat terhubung dengan FPGA.
Meng-klik kanan pada nama project, NEW Source kemudian memilih
Implementation Constraints File
5. Berikut koding Implementation Constraints File yang diketikan pada TUGAS 1 :
# clock pin for Basys2 Board
8. Selanjutnya jika semua proses sukses maka tampilan akan menjadi seperti di
bawah ini :
entity my_counter is
Port (
mclk : in STD_LOGIC;
Switch : in STD_LOGIC_VECTOR (7 downto 0); -- 3-bit input
Seven_Segment : out STD_LOGIC_VECTOR (0 to 6);
Led : out STD_LOGIC_VECTOR (7 downto 0); -- 8-bit output
DSatuan,DPuluhan,DRatusan,DRibuan : out std_logic
);
end my_counter;
begin
Led <= Switch;
reset <= Switch(6);
up_down <= Switch(7);
increment <= Switch(1 downto 0);
Family: Spartan-3E
Package: CP132
Speed: -4
Kemudian membuat New Source File untuk deskripsi port hardware yang nantinya akan
ditulis dengan syntax sebagai berikut:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity percobaan1 is
Port ( mclk : in STD_LOGIC;
Switch : in STD_LOGIC_VECTOR (7 downto 0); -- 3-bit input
Seven_Segment : out STD_LOGIC_VECTOR (0 to 6);
count_out : out STD_LOGIC_VECTOR (3 downto 0);
Led : out STD_LOGIC_VECTOR (7 downto 0) -- 8-bit output
);
end percobaan1;
architecture Behavioral of percobaan1 is
signal sign_Count_Out : STD_LOGIC_VECTOR(3 downto 0);
signal CE,reset : STD_LOGIC;
signal cntDiv: std_logic_vector(23 downto 0) := (OTHERS => '0'); -- general clock
div/cnt
begin
Led <= Switch;
reset <= Switch(6);
-- clock divider, untuk menurunkan frkuensi dari clock input (eksternal)
ckDivider: process(mclk)
begin
if mclk'event and mclk='1' then
cntDiv <= cntDiv + '1';
if cntDiv = X"1" then
CE <= '1';
cntDiv <= X"000000";
else
CE <= '0';
end if;
end if;
end process;
--Counter
process(mclk,CE,Reset)
begin
if reset='1' then
sign_Count_Out <= "0000";
elsif(rising_edge(mclk)) then
if CE='1' then
if sign_Count_Out="1111" then
sign_Count_Out<="0000";
else
sign_Count_Out <= sign_Count_Out + 1;
end if;
end if;
end if;
end process;
count_out <= sign_Count_Out;
-- Seven Segment Decoder
process (sign_Count_Out)
begin
case sign_Count_Out is
when "0000" => Seven_Segment <= "0000001"; ---0
when "0001" => Seven_Segment <= "1001111"; ---1
when "0010" => Seven_Segment <= "0010010"; ---2
when "0011" => Seven_Segment <= "0000110"; ---3
when "0100" => Seven_Segment <= "1001100"; ---4
when "0101" => Seven_Segment <= "0100100"; ---5
when "0110" => Seven_Segment <= "0100000"; ---6
when "0111" => Seven_Segment <= "0001111"; ---7
when "1000" => Seven_Segment <= "0000000"; ---8
when "1001" => Seven_Segment <= "0000100"; ---9
when "1010" => Seven_Segment <= "0001000"; ---A
when "1011" => Seven_Segment <= "1100000"; ---b
when "1100" => Seven_Segment <= "0110001"; ---C
when "1101" => Seven_Segment <= "1000010"; ---d
when "1110" => Seven_Segment <= "0110000"; ---E
when "1111" => Seven_Segment <= "0111000"; ---F
when others => Seven_Segment <= "1111111"; ---null
end case;
end process;
end Behavioral;
Setelah itu selesai selanjutnya melakukan pengecekan syntax untuk melihat apakah syntax
telah benar. Selanjutnya melakukan simulasi testbench terlebih dahulu agar mengetahui
apakah program sudah berjalan seperti yang diharapkan atau tidak sehingga resiko upload
ulang dapat diminamlisir.
Terlihat bahwa saat switch(6) atau reset bernilai ‘1’ maka tidak ada proses yang berjalan
pada sistem, namun saat reset bernilai ‘0’ maka sistem akan berjalan dengan program
counter akan menghitung dan hasil hitung tersebut disambung ke dalam seven segment
sehingga nantinya seven segment akan terlihat seperti counter yang terus menerus berjalan
dari 0 sampai 15 dan akan mengulang lagi ke 0 asalkan reset bernilai ‘0’.
Jika simulasi sudah berjalan lancer, selanjutnya membuat file Implementation Constraint
File, sebagai file inisialisasi terhadap 3 buah input dan 8 buah output, kemudia dimasukan
program dibawah ini :
Setelah memasukkan koding inisiasi selanjutnya menjalankan Synthesize dan jika sudah
sukses selanjutnya meng-Generating Programming File agar mendapatkan file bit yang siap
untuk diupload pada hardware FPGA.
INPUT OUTPUT
(counter) (seven segment)
A B C D E F G
0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1 1 0
0 1 0 0 1 0 0 1 1 0 0
0 1 0 1 0 1 0 0 1 0 0
0 1 1 0 0 1 0 0 0 0 0
0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 1 0 0
1 0 1 0 0 0 0 1 0 0 0
1 0 1 1 1 1 0 0 0 0 0
1 1 0 0 0 1 1 0 0 0 1
1 1 0 1 1 0 0 0 0 1 0
1 1 1 0 0 1 1 0 0 0 0
1 1 1 1 0 1 1 1 0 0 0
Selanjutnya hal ke-2 yang saya kerjakan yaitu membuat counter up dan counter down,
dimana langkah-langkah awal sama seperti percobaan 1, yang berbeda hanya kodingan seperti
yang ditunjukkan pada hasil percobaan.
Setelah memasukkan koding inisiasi selanjutnya menjalankan Synthesize dan jika sudah
sukses selanjutnya meng-Generating Programming File agar mendapatkan file bit yang siap
untuk diupload pada hardware FPGA.
Untuk hasil dari program ini yaitu terlihat di bawah ini:
Switch(7) counter Seven segment (A,B,C,D,E,F,G)
‘1’ 0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 1 0 0 1 1 1 1
0 0 1 0 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1 1 0
0 1 0 0 1 0 0 1 1 0 0
0 1 0 1 0 1 0 0 1 0 0
0 1 1 0 0 1 0 0 0 0 0
0 1 1 1 0 0 0 1 1 1 1
Dst.
‘0’ 1 1 1 1 0 1 1 1 0 0 0
1 1 1 0 0 1 1 0 0 0 0
1 1 0 1 1 0 0 0 0 1 0
1 1 0 0 0 1 1 0 0 0 1
1 0 1 1 1 1 0 0 0 0 0
1 0 1 0 0 0 0 1 0 0 0
1 0 0 1 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 0 0
Dst.
Pada tugas C dan D di percobaan ini membuat 2 counter yang pertama untuk proses
counting kemudian yang kedua sebagai selector dari 7 segment mana yang aktif, kemudian
nantinya proses counting akan berjalan sesuai dengan switch yang aktif apakah 01, 10, dan 11
dimana setiap switch tersebut mempunyai program counter yang berbeda seperti yang terlihat
pada program hasil percobaan untuk tugas C dan D.
KESIMPULAN
Setelah melakukan Percobaan dan Tugas pada praktikum ke-3 kali ini, didapat sebuah
analisa dan dari analisa itu didapat sebuah kesimpulan yaitu :
a. Field-Programmable Gate Array (FPGA) merupakan sebuah IC digital yang sering
digunakan untuk mengimplementasikan rangkaian digital.
b. Membuat program untuk FPGA menggunakan software Xilinx ISE Design Suite.
c. Sebelum diupload ke dalam FPGA, program harus telah sukses disimulasi didalam
software ISE Design Suite, sehingga tidak perlu memprogram ulang jika terdapat
kesalahan dalam program.
d. Program menggunakan bahasa VHDL.
e. Sebelum membuat file Implementation ke hardware, sebelumnya harus membuat simulasi
dari program tersebut agar dapat mengetahui apakah program yang dibuat sudah benar apa
tidak. Hal itu dilakukan agar resiko mengupload ulang program ke hardware tidak
dilakukan.
f. Percobaan membuat counter seven segment dimana menggunakan input counter 4 bit dan
7 output LED seven segment yang jika distart counter akan berjalan dari 0 sampai 15 dan
tampilannya dapat dilihat pada seven segment, untuk hasil sesuai tabel pada analisa.
g. Tugas membuat counter updown seven segment dimana menggunakan input counter 4 bit
dan 7 output LED seven segment, dimana saat switch(7) bernilai ‘1’ maka counter akan
berjalan maju dari 0 – 15 sedangkan apabila switch(7) bernilai ‘0’ maka counter akan
berjalan mundur dari 15 sampai 0.
h. Field Programmable Gate Array (FPGA) mempunyai kelebihan sebagai berikut :
• Dikonfigurasi oleh End User.
• Tidak memerlukan proses Fabrikasi.
• Tersedia solusi yang mendukung chip customized VLSI.
• Mampu menimplementasikan logic circuit, instant manufacturring, very-low cost
prototype.
• Pemrograman yang singkat untuk fungsi dan kemampuan yang setara dengan ASIC.
i. FPGA ini merupakan IC tipe HDL yang mana pemakai dapat mendesain hardware sesuai
yang diinginkan di dalam IC FPGA.