Anda di halaman 1dari 20

VOTING MACHINE

Disusun untuk memenuhi tugas akhir matakuliah Pemrograman FPGA

Oleh:
1. Aloysius Darin Ario (205150301111008)
2. Andiny Nur Rahmawati (205150307111015)
3. Aqil Dzakwanul Fikri (205150301111015)
4. Oktavian Hisdianton (205150301111011)
5. Reza Amelia Putri (205150301111038)
6. Zidan Indra Resiman (195150300111060)

Dosen Pengampu:
Dahnial Syauqy, S.T., M.T., M.Sc.

PROGRAM STUDI TEKNIK KOMPUTER


JURUSAN TEKNIK INFORMATIKA
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
MALANG
2021
DAFTAR ISI

HALAMAN JUDUL ........................................................................................................... i

DAFTAR ISI ....................................................................................................................... ii

BAB I PENDAHULUAN ................................................................................................... 1

1.1 Latar Belakang ......................................................................................................... 1

1.2 Rumusan Masalah .................................................................................................... 1

1.3 Tujuan ........................................................................................................................ 1

1.4 Manfaat ..................................................................................................................... 2

BAB II TINJAUAN PUSTAKA ........................................................................................ 3

2.1 Pengertian pemungutan suara ................................................................................. 3

2.2 Xilinx Spartan 3E .................................................................................................... 3

2.3 Field-Programable Gate Array (FPGA) .................................................................. 3

2.4 LCD ......................................................................................................................... 3

BAB III METODOLOGI DAN PERANCANGAN ......................................................... 5

3.1 Spesifikasi sistem dan prinsip kerja .......................................................................... 5

3.2 Blok diagram ............................................................................................................ 6

3.3 Perancangan sistem ................................................................................................... 7

BAB IV PEMBAHASAN ................................................................................................... 8

4.1 Flowchart pemrograman .................................................................................... 8

4.2 Implementasi dan Hasil uji ................................................................................. 9

BAB V PENUTUP .............................................................................................................. 11

5.1 Kesimpulan ......................................................................................................... 11

5.2 Saran ................................................................................................................... 11

Daftar Pustaka .................................................................................................................... 12

ii
Lampiran 1: Source code dan file UCF ............................................................................. 13

iii
BAB I
PENDAHULUAN

1.1 Latar Belakang


Voting manchine dapat digunakan untuk pemungutan suara yang aman,
dimana perusakan atau kecurangan yang akan terjadi sangat kecil. Jumlah suara
yang direkam dan disimpan dalam memori sistem terasa lebih praktis dan aman,
sedangkan pemungutan suara yang manual sangan tidak efisien, banyak celah
untuk kecurangan, dan tidak ramah lingkungan. Menurut International IDEA
(Lembar Kebijakan, Desember 2011) penggunaan IT dalam proses pemungutan,
penghitungan, dan rekapitulasi suara sudah dilaksanakan di beberapa negara yang
telah melaksanakan pemilu secara demokratis. Penerapan pemilihan dengan mesin
dan internet biasanya pada awalnya dilaksanakan di negara-negara yang kecil,
negara maju, dan bebas dari konflik. Banyak negara saat ini sedang
mempertimbangkan untuk memperkenalkan dan menerapkan teknologi dalam
proses pemungutan suara), penghitungan suara dan rekapitulasi suara. Tujuan dari
menerapkan dari IT tersebut untuk meningkatkan kualitas pemilu. Pemungutan
suara, penghitungan suara, dan rekapitulasi pemilu sering dilihat sebagai alat
untuk memajukan demokrasi, membangun kepercayaan terhadap penyelenggara
pemilu, dan meningkatkan kredibilitas hasil pemilu, dan meningkatkan efisiensi
proses pemilu secara keseluruhan..

1.2 Rumusan Masalah


- Tingginya tingkat kesalahan dan kecurangan dalan voting suara secara
manual.
1.3 Tujuan
- Mengurangi persentase kesalahan dan juga kecurangan dalam voting
suara secara manual.

1
1.4 Manfaat
- Mengurangi tenaga kerja yang membuat pemungutan suara tidak efektif
dan juga mengurangi tingkat kesalahan dalan proses perhitungan serta
kecurangan didalamnya

2
BAB II
TINJAUAN PUSTAKA
2.1 Pengertian pemungutan suara
Mesin pemungutan suara adalah sebuah mesin yang bertujuan untuk
melakukan pehitungan pemungutan suara. Mesin ini sudah banyak
diimplementasikan di negara-negara maju seperi Amerika, Inggris, dan
Cina.

2.2 Xilinx SPARTAN 3E


Software pemrograman berbasis bahasa VHDL yang berperan sebagai
modul yang digunakan sistem untuk mengolah data. Xilinx memudahkan
tugas manusia untuk melakukan perhitungan yang rumit dan panjang secara
instan. Pada penggunaannya dalam mesin pemungutan suara modul ini
berperan menerima dan memindahkan hasil suara dan menambahkan nilai
dan data dari masing-masing calon yang terpilih.
2.3 Field-Pogrammable Gate Array (FPGA)
FPGA adalah satu dari sekian banyak mikroprosesor yang merupakan
sebuah IC digital untuk mengimplementasikan rangkaian digital. FPGA pada
mesin pemungutan suara berperan sebagai otak dari sistem dan program di
masing masing mesin yang akan digunakan. Banyak pilihan yang bisa
digunakan sebagai pengganti FPGA seperti, mikrokontroler dan IC digital
lain. Pemilihan penggunaan FPGA sendiri dikarenakan kepraktisan yang
disediakan seperti, sudah tersedianya register tertanam, pin dan gerbang
logika tertanam , dan juga high programming-level yang bisa dikustomisasi
secara bebas.

2.4 LCD
Liquid Crystal Display adalah media tampilan yang menggunakan bahan
Kristal cair sebagai penampil utama. Penggunaan LCD pada mesin
pemungutan suara sebagai pemberitaan langsung kepada user/pemilih (User
Interface). LCD berperan tunggal sebagai penampil dan kegunaannya tidak

3
bisa digantikan dan tidak ada alternatifnya. LCD nantinya akan menampilkan
calon-calon yang bisa dipilih.

4
BAB III
METODOLOGI DAN PERANCANGAN

3.1 Spesifikasi sistem dan prinsip kerja

Prinsip kerja mesin pemungutan suara sendiri sebagai berikut,

1. State input, user(pemilih) menaruh suaranya pada tampilan calon (kita


misalkan 3 kandidat).
2. State checking, menerima suara dari user yang diterima dalam bentuk
beberapa bit. Checking memilah dengan prinsip seleksi kondisi dan
meneruskan ke state selanjutnya.
3. State calon1, calon1 melakukan fungsi count (calon1 = calon1++) jika
suara yang masuk untuk calon pertama.
4. State calon2, calon2 melakukan fungsi count (calon2 = calon2++) jika
suara yang masuk untuk calon kedua.
5. State calon3, calon3 melakukan fungsi count (calon3 = calon3++) jika
suara yang masuk untuk calon ketiga.
6. State done, suara yang ditaruh pada salah satu calon disimpan pada
memori dalam bentuk bit. Proses selesai dan akan looping dari tampilan
pada state awal lagi untuk user giliran selanjutnya.

5
3.2 Blok diagram

Terdapat beberapa konsep dalam mesin pemungutan suara berbasis FPGA


ini, yaitu initial (input), Check, Calon1 Count1+1, Calon2+1, Calon3 Count3+1
dan done (Selesai).

Gambar 3.1. Blok diagram sistem

6
3.3 Perancangan sistem

Sistem mesin pemungutan suara menggunaakan IC digital FPGA (bebasis


Xilinx Spartan 3E), VCC, dan Pin I/O. Mesin ini memiliki jumlah input yang bisa
dikostumisasi sesuai kebutuhan (jumlah alon) dan ditambah input clock. Input
calon akan diperiksa (check) langsung di FPGA itu sendiri. Setelah input
diperiksa maka FPGA akan menerima input dan menyimpan. Selain itu, sistem ini
memiliki output yang bisa dikostumisasi juga sesuai dengan calon yang
dibutuhkan dinamakan count. Penampil LCD akan menampilkan party yang bisa
kita pilih.

7
BAB IV
PEMBAHASAN

4.1 Flowchart pemrograman


Berikut merupakan Flowchart dari system mesin pemungutan suara Field
Programmable Gate Array (FPGA).

Gambar 4.1. Flowchart sistem

8
Saat program berjalan program akan mengdeklarasi CALON1, CALON2, dan
CALON3. setelah itu, user akan memasukkan suara/vote dan dicek di masing -
masing CALON1, CALON2, dan CALON3. Kemudian, data disimpan lalu reset
ke awal mula dan dapat digunakan oleh user selanjutnya.

4.2 Implementasi dan Hasil uji


Untuk mengimplementasikan system mesin pemungutan suara berbasis Field
Programmable Gate Array(FPGA) ini, kita harus menyiapkan modul Xilinx
SPARTAN 3E, modul LCD, Vcc, dan pin I/O.

Gambar 4.2 Hasil Simulasi

9
Gambar 4.3. Bentuk fisik sistem

10
BAB V
PENUTUP

5.1 Kesimpulan

Pembuatan mesin pemungutan suara ini dapat menjadi sebuah hal yang dapat
menjadi meningkatkan tingkat keamanan serta efiesiensi biaya dan waktu dalam
melakukan pemungutan suara yang biasa dilakukan pada saat hari-hari pemilihan.

5.2 Saran

Tentu saja dalam pembuatan tugas akhir ini masih banyak kekurangan, salah
satunya adalah karena cuman menggunakan aplikasi simulasi yang dimana ada
beberapa perbedaan dengan menggunakan FPGA Spartan 3E yang asli.

11
DAFTAR PUSTAKA

Dzale. 2010. "Sekilas Tentang FPGA". [Online]. Tersedia:


https://ndoware.com/sekilas-tentang-fpga.html

Abhiemanyu. 2019 . “Introduction to FPGA and It's Programming Tools”. Tersedia:


https://circuitdigest.com/tutorial/what-is-fpga-introduction-and-programming-tools

Bushwick, S. 2020. "An Expert on Voting Machines Explains How They Work".
[Online]. Tersedia: https://www.scientificamerican.com/article/an-expert-on-
votingmachines-explains-how-they-work

12
LAMPIRAN I: SOURCE CODE dan FILE UCF

A. Source Code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_arith.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;

entity Voting_Suara is
Port ( Clock : in STD_LOGIC;
Reset : in STD_LOGIC;
Calon1 : in STD_LOGIC;
Calon2 : in STD_LOGIC;
Calon3 : in STD_LOGIC;
Select_Calon : in STD_LOGIC;
count1 : out STD_LOGIC_VECTOR (5 downto 0);
count2 : out STD_LOGIC_VECTOR (5 downto 0);
count3 : out STD_LOGIC_VECTOR (5 downto 0));
end Voting_Suara;

architecture Behavioral of Voting_Suara is


signal hitung1,hitung2,hitung3: std_logic_vector(5 downto
0);
signal state: std_logic_vector(5 downto 0);
constant initial: std_logic_vector(5 downto 0):="000001";
constant check: std_logic_vector(5 downto 0):="000010";
constant calon1_state: std_logic_vector(5 downto
0):="000100";
constant calon2_state: std_logic_vector(5 downto
0):="001000";
constant calon3_state: std_logic_vector(5 downto
0):="010000";
constant done: std_logic_vector(5 downto 0):="100000";

begin
process(clock,reset,calon1,calon2,calon3)

begin
if(reset='1') then
hitung1<=(others=>'0');
hitung2<=(others=>'0');
hitung3<=(others=>'0');
state<=initial;
else

if(rising_edge(clock) and reset='0') then


case state is
when initial=>
--nsl
if (calon1='1' or calon2='1' or
calon3='1') then
state<=check;
else
state<=initial;
end if;
--ofl

13
when check=>
--nsl
if(calon1='1') then
state<=calon1_state;
elsif (calon2='1') then
state<=calon2_state;
elsif (calon3='1') then
state<=calon3_state;
else
state<=check;
end if;
--ofl

when calon1_state =>


--nsl
if(Select_Calon='1') then
state<=done;
else
state<=calon1_state;
end if;
--ofl
if(Select_Calon='1') then
hitung1<=hitung1 + '1';
end if;

when calon2_state=>
--nsl
if(Select_Calon='1') then
state<=done;
else
state<=calon2_state;
end if;
--ofl
if(Select_Calon='1') then
hitung2<=hitung2 + '1';
end if;

when calon3_state =>


--nsl
if(Select_Calon='1') then
state <= done;
else
state <= calon3_state;
end if;
--ofl
if(Select_Calon='1') then
hitung3<=hitung3 + '1';
end if;
when done=>
--nsl
state<=initial;
--ofl
when others=>
state<=initial;
end case;
end if;
end if;
end process;

14
count1<=hitung1;
count2<=hitung2;
count3<=hitung3;
end Behavioral;

B. Test Bench Code


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY voting_test IS
END voting_test;

ARCHITECTURE behavior OF voting_test IS

-- Component Declaration for the Unit Under Test (UUT)

COMPONENT Voting_Suara
PORT(
Clock : IN std_logic;
Reset : IN std_logic;
Calon1 : IN std_logic;
Calon2 : IN std_logic;
Calon3 : IN std_logic;
Select_Calon : IN std_logic;
count1 : OUT std_logic_vector(5 downto 0);
count2 : OUT std_logic_vector(5 downto 0);
count3 : OUT std_logic_vector(5 downto 0)
);
END COMPONENT;

--Inputs
signal Clock : std_logic := '0';
signal Reset : std_logic := '0';
signal Calon1 : std_logic := '0';
signal Calon2 : std_logic := '0';
signal Calon3 : std_logic := '0';
signal Select_Calon : std_logic := '0';

--Outputs
signal count1 : std_logic_vector(5 downto 0);
signal count2 : std_logic_vector(5 downto 0);
signal count3 : std_logic_vector(5 downto 0);

-- Clock period definitions


constant Clock_period : time := 5 ns;

BEGIN

-- Instantiate the Unit Under Test (UUT)


uut: Voting_Suara PORT MAP (
Clock => Clock,
Reset => Reset,
Calon1 => Calon1,
Calon2 => Calon2,
Calon3 => Calon3,
Select_Calon => Select_Calon,

15
count1 => count1,
count2 => count2,
count3 => count3
);

-- Clock process definitions


Clock_process :process
begin
Clock <= '0';
wait for Clock_period/2;
Clock <= '1';
wait for Clock_period/2;
end process;

-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 100 ns;

wait for Clock_period*10;

reset<='1';
wait for 10 ns;
reset<='0';
Calon1<='0';
Calon2<='0';

Calon3<='0';
Calon1<='1';
wait for 10 ns;
Calon1<='0';
wait for 10 ns;
Select_Calon<='1';
wait for 10 ns;
Select_Calon<='0';
wait for 10 ns;
Calon1<='1';
wait for 10 ns;
Calon1<='0';
wait for 10 ns;
Select_Calon<='1';
wait for 10 ns;
Select_Calon<='0';
wait for 10 ns;
Calon1<='1';
wait for 10 ns;
Calon1<='0';
wait for 10 ns;
Select_Calon<='1';
wait for 10 ns;
Select_Calon<='0';
wait for 10 ns;
Calon2<='1';
wait for 10 ns;
Calon2<='0';
wait for 10 ns;
Select_Calon<='1';

16
wait for 10 ns;
Select_Calon<='0';
wait for 10 ns;
Calon3<='1';
wait for 10 ns;
Calon3<='0';
wait for 10 ns;
Select_Calon<='1';
wait for 10 ns;
Select_Calon<='0';
wait for 10 ns;

wait;
end process;

END;

C. UCF code
# PlanAhead Generated physical constraints
NET "Clock" LOC = C9;

# PlanAhead Generated IO constraints


NET "Reset" PULLDOWN;

# PlanAhead Generated physical constraints


NET "count3[0]" LOC = C1;
NET "count3[1]" LOC = C2;
NET "count3[2]" LOC = D1;
NET "count3[3]" LOC = D2;
NET "count3[4]" LOC = E2;
NET "count3[5]" LOC = E1;
NET "count2[5]" LOC = F1;
NET "count2[1]" LOC = G6;
NET "count2[0]" LOC = H5;
NET "count2[2]" LOC = H3;
NET "count2[3]" LOC = H4;
NET "count2[4]" LOC = H1;
NET "count1[0]" LOC = F2;
NET "count1[1]" LOC = G3;
NET "count1[2]" LOC = G4;
NET "count1[4]" LOC = G5;
NET "count1[5]" LOC = H6;
NET "count1[3]" LOC = J5;
NET "Calon3" LOC = D3;
NET "Calon2" LOC = F4;
NET "Calon1" LOC = F5;
NET "Select_Calon" LOC = G1;
NET "Reset" LOC = J7;
#Created by Constraints Editor (xc3s500e-fg320-4) - 2021/11/18
NET "Clock" TNM_NET = Clock;
#Created by Constraints Editor (xc3s500e-fg320-4) - 2021/11/18
TIMESPEC TS_Clock = PERIOD "Clock" 10 ns HIGH 50%;

17

Anda mungkin juga menyukai