Digital Counter Nexys A7 100T

by Angelene in Circuits > Electronics

65 Views, 0 Favorites, 0 Comments

Digital Counter Nexys A7 100T

IMG-20230202-WA0003.jpg
KELOMPOK 4:
ANGELENE AGUSTINA(2502013952)
EFENDI (2502011392)
KENT (2540128695)
KEVIN JUAN (2540118183)


Latar Belakang

Teknologi jaman sekarang sudah berkembang sangat cepat dan banyak
macamnya dengan contoh dari yang bersifat hardware yaitu seperti layar
digital, sensor, on/off switch agar bisa menyalakan dan mematikan suatu alat,
dan hardware-hardware lainnya, hingga yang bersifat software yaitu codingan
dengan bahasa pemrograman seperti C, C++, Python, Java Script, dan
semacamnya. Dan dengan dibuatnya hardware serta software, terbuatlah alat
yang canggih yaitu seperti mikrokontroler yang bertujuan untuk menerima
codingan atau pekerjaan untuk sistemnya bisa memproses hal yang harus
dilakukan hardwarenya, dengan ini alatnya akan jalan sesuai yang disuruh.
Meskipun zaman sudah berkembang sangat canggih, tetapi manusia pun
masih bertujuan untuk bekerja dengan keras, cepat dan hingga masih banyak
orang kesulitan melakukan hal secara manual. Dengan contoh seperti
orang-orang yang bekerja pada gudang toko seperti toko serba ada, pasar,
supermarket, dan lainnya. Orang yang bekerja di gudang biasanya
pekerjaannya ialah menghitung barang yang masuk ke gudang dari
suppliernya. Dan dikarenakan menghitung secara manual, hal ini membuat
orang yang bekerja di gudang sangat membuang-buang waktu, sulit dalam
menghitung manual, dan juga banyak melakukan kesalahan karena adanya
Human Error.
Dengan ini kami membuat alat Smart Counter Digital untuk
mempermudah setiap orang yang bekerja di gudang-gudang. Hal ini bertujuan
dan bermanfaat untuk mempercepat dan mempermudah, serta mengurangi
kesalahan karena keteledoran seseorang.

1.2 Rumusan Masalah
- Bagaimana cara membuat bermacam-macam output yang dapat mempermudah pembuatan alat?
- Bagaimana cara agar barang sebesar dan sekecil apapun bisa terdeteksi secara otomatis?

1.3 Tujuan dan Manfaat
1.3.1 Tujuan
● Membuat alat dari prototype Counter Digital.
● Menciptakan alat yang bisa menghitung banyaknya barang yang ada secara otomatis.
● Menciptakan alat yang dapat mempermudah pekerjaan manusia.
1.3.2 Manfaat
● Dapat mengetahui berapa banyak barang dengan angka pasti yang terdapat pada 7 segment counter Digital.
● Menjadi inditakor dengan berapa banyak barang yang ada.
● Agar pekerjaan yang dilakukan lebih cepat dan efisien.

1.4 Ruang Lingkup
Penelitian ini tujuan utamanya ditujukan kepada orang yang bekerja di gudang pada gudang toko seperti toko serba ada, supermarket, dan semacamnya yang berhubungan dengan menghitung banyaknya barang yang ada seperti ratusan bahkan ribuan barang.
Meskipun tujuan utama dituju kepada toko yang besar, tetapi sebagai tujuan sekunder, alat ini juga bisa digunakan kepada seseorang yang perlu menghitung banyak tidak sebanyak yang di gudang. Contohnya seperti orang yang mengirim atau menerima supply dari temannya yang hanya terdapat puluhan barang. Dengan ini membuat ruang lingkup yang dituju lebih luas dari sebelumnya. Hal ini dikarenakan dibuatnya output yang bisa mempermudah seseorang dalam menggunakan alat kami.

1.5 Tinjauan Pustaka
Pada penelitian mengenai Smart Counter Digital sudah banyak dilakukan oleh orang-orang lain. Dan penggunaan sensornya pun juga bermacam-macam. Disini kami meninjau fakta pembuatan counter barang dari penelitian orang lain juga. Dan yang kami dapatkan adalah penelitian yang sudah dilakukan oleh Angga Aditia (2020) yaitu mengenai “RANCANG
BANGUN SISTEM PENGHITUNG JUMLAH ORANG ATAU PENGUNJUNG BERBASIS ARDUINO “UNO” MENGGUNAKAN
SENSOR PIR (PASSIVE INFRARED RECEIVER) DAN SENSOR
ULTRASONIC.”. Pada Penelitiannya, kami mendapatkan kalau ia memakai sensor PIR atau singkatan dari passive infrared receiver dan juga sensor ultrasonic. Meskipun yang kami gunakan sebagai pemicu counternya berbeda, tetapi teori yang dipakai tetap sama karena menggunakan counter digital. Dari sini kita mendapatkan fakta kalau counter digital bisa digunakan dengan baik.
Lalu kami juga meneliti dari penelitian yang lain yaitu dari penelitian Ari
Purnama, Fauziah, dan Novi Dian Nathasia (2022). “SMART COUNTER PADA KAPASITAS BUS TRANSJAKARTA MENGGUNAKAN SENSOR INFRARED BERBASIS ARDUINO UNO ATMEGA 328.”. Disini ia memakai sensor infrared juga sebagai counter kapasitas bus transjakarta. Dan hal yang didapatkan disini adalah keberhasilan penelitiannya. Meskipun penelitian yang kami buat adalah mengcounter barang, tetapi dengan fakta yaitu penelitian dari mereka dengan membuat counter digital bisa untuk menghitung orang, maka menghitung barang pun juga bisa.

Supplies

- Nexys A7-100T FPGA
- Komputer
- Xilinx Vivado

Landasan Teori

Pada bab ini kami akan menulis dan menjelaskan komponen-komponen
yang dipakai pada penelitian ini dan kami juga akan menjelaskan teori-teori dasar
dari komponen-komponen untuk penelitian kami.
a. On/Off Switch
Pada komponen ini, kegunaannya adalah untuk menyalakan dan
mematikan pada alat yang dibuat. On/Off Switch terbagi menjadi 4 bagian
yaitu push button switch, toggle switch, selector switch, limit switch. Dan
yang digunakan pada alat kami ialah toggle switch. Toggle switch adalah
switch yang hanya bisa di geser atau di pencet kekanan dan kekiri yang
biasanya ada tulisan (O/I).
b. 4 Digit Seven Segment Display
4 Digit Seven Segment Display adalah komponen visual yang bisa
menunjukan nomor yang sudah diinput atau dari codingan sudah dibuat.
Komponen ini awalnya adalah dari seven segment display karena terdapat
7 garis yang membentuk seperti (8).
Maka yang dimaksud dengan 4 digit pada seven segment display
adalah terdapat 4 angka yang bisa diinput seperti contoh _ _ _ _ .
c. FPGA Board (Nexys A7 Artix 100T)
FPGA Board adalah alat yang digunakan untuk menjalankan
kodenya yang sudah dibuat di Vivado dengan menggunakan bahasa
VHDL. Cara kerja alat ini adalah saat sudah dinyalakan, lalu dihubungkan
dengan dicolok ke komputer yang sudah ada kodenya. Setelah itu
dihubungkan kodenya ke FPGA Board, lalu pakai tombol atau switch yang
sudah dibuat di Vivadonya.

Metode Pelaksanaan

Screenshot_20230126_012603_Microsoft 365 (Office).jpg
Screenshot_20230126_011909_Microsoft 365 (Office).jpg
IMG-20230201-WA0003.jpg
Data awal yang didapatkan adalah banyaknya orang yang kesulitan saat
bekerja menghitung banyaknya barang digudang. Hal ini membuat orang sangat
membuang-buang waktu, bahkan membuat banyak kesalahan juga. Hal ini
membuat kita berpikir untuk membuat Counter Digital. Pada Counter Digital ini,
kami memakai komponen seperti FPGA Board yaitu Nexys A7 Artix 100T, 4
Digit Seven Segment Display yang kegunaannya sebagai display angka dari
switch atau tombol yang sudah dipencet, on/off switch yang kegunaannya sebagai
alat untuk menyalakan dan mematikan counter digitalnya.
Berikutnya adalah rekayasa keteknikan. Dalam teknik pembuatan Counter
Digital akan mempermudah orang dalam mengetahui berapa banyak barang yang
sudah terdeteksi. Dalam alat ini, pertama kita menggunakan on/off switch sebagai
benda untuk menyalakan dan mematikan alat kami. Lalu kita memakai FPGA
Board dari Nexys A7 Artix 100T sebagai alat yang dipakai dari kodingan yang
sudah dibuat dan sudah dihubungkan dari Vivado. Dan cara kerjanya awalnya
adalah dari Vivado, yaitu coding yang sudah dibuat sebagai pekerjaannya dan saat
diproses, saat kita sudah memencet tombol atau memakai switchnya, maka barang
ini akan terhitung 1, dan selanjutnya saat kita memencet tombol atau memakai
switchnya lagi, maka angkanya akan bertambah. Dan yang terakhir untuk 4 Digit
Seven Segment Display, angka pada penjelasan sebelumnya akan bertambah dan
ditunjukan pada display tersebut.
Lalu cara uji keandalan karyanya dengan cara menghubungkan kode yang
sudah dibuat di Vivado ke dalam FPGA boardnya. Setelah itu pakai tombol atau
switch sebagai pemicu agar angkanya bisa bertambah maupun berkurang. Dan
setelah diuji coba ke dalam FPGA Boardnya, dan hasilnya adalah angkanya pada
4 Digit Seven Segment Display nya bisa muncul serta bisa bertambah dan
berkurang. Dengan ini pembuatan kode dan alat ini dinyatakan sukses dan bisa
bekerja dengan baik.

3.1 Penjelasan Singkat Sistem
Cara kerja sistem alat kami adalah pertama-tama dari on/off switch untuk menyalakan dan mematikan alat. Lalu setelah dinyalakan, berikutnya kita menggunakan FPGA Board yaitu Nexys A7 Artix 100T sebagai alat yang mengoperasikan kodenya yang sudah dibuat di Vivado. FPGA Board ini di setting agar bisa menggunakan tombol atau switchnya. Dan yang terakhir adalah 5 Digit Seven Segment Display. Kegunaan komponen ini adalah untuk menunjukan angka yang sudah dipicu dengan tombol atau switchnya.

3.2 Cara Kerja Sistem
Dengan penjelasan pada 3.2, cara kerja alat ini adalah setelah dinyalakan, kemudian pada FPGA Board Nya dipencet tombol atau dipakai switchnya sebagai pemicu agar angkanya bisa bertambah serta berkurang. Dengan penjelasan contoh singkatnya adalah saat switch atau tombolnya dipakai, maka akan terhitung 1, lalu saat dilakukan penggunaan tombol atau switchnya pada FPGA Board tersebut, maka akan terhitung menjadi 2, dan seterusnya. Dan semua angka ini akan ditunjukan pada 4 Digit Seven Segment Display Nya. Maka dari itu Counter Digital ini bisa bisa menunjukan berapa banyak tombol atau switch yang sudah kita pakai sebagai menambahkan serta menggurangkan.

3.3 Blok Diagram

3.4 Diagram Alir (Flow Chart) 

3.5 Perancangan Perangkat Keras (Skematik, Perancangan hardware)

3.6 Perancangan Perangkat Lunak
- Clock
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity CLOCK is
Port ( clk1 : in std_logic;
clk : out std_logic
);
end CLOCK;
architecture Behavioral of CLOCK is
signal count : integer :=0;
signal b : std_logic :='0';
begin
--clk generation.For 100 MHz clock this generates 1 Hz clock.
process(clk1) begin
if(rising_edge(clk1)) then count <=count+1;
if(count = 49999) then
b <= not b;
count <=0;
end if;
end if;
end process;
clk<=b;
end Behavioral;

- Kode Utama
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 01/16/2023 12:04:46 PM -- Design Name:
-- Module Name: tugasrancang - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity tugasrancang is
Port (
Segment7: out std_logic_vector (7 downto 0); CommonA: out std_logic_vector (7 downto 0); switch: in std_logic;
clk, rst,dec: in std_logic
);
end tugasrancang;

architecture Behavioral of tugasrancang is

-- Clock Generator
component CLOCK port (
clk1: in std_logic;
clk: out std_logic);
end component;
-- 7 Segment Decoder
component Segmentdec
port (
data: in std_logic_vector (3 downto 0);
output: out std_logic_vector (7 downto 0));
end component;

-- Mod 9 counter (ganti nama) component Mod9Count_code port (
rst,switch,dec: in std_logic;
output1: out std_logic_vector (3 downto 0);
output10: out std_logic_vector (3 downto 0); output100: out std_logic_vector (3 downto 0); output1000: out std_logic_vector (3 downto 0); output10000: out std_logic_vector (3 downto 0);
output100000: out std_logic_vector (3 downto 0);
output1000000: out std_logic_vector (3 downto 0);
output10000000: out std_logic_vector (3 downto 0)
);
end component;
--ring satuanpuluhan (ganti nama) component scan_engine_angka port (
input_clock: in std_logic_vector (3 downto 0); angka_satuan: in std_logic_vector (3 downto 0); angka_puluhan: in std_logic_vector (3 downto 0); angka_ratusan: in std_logic_vector (3 downto 0); angka_ribuan :in std_logic_vector (3 downto 0); angka_puluhribu:in std_logic_vector (3 downto 0);
angka_ratusribu:in std_logic_vector (3 downto 0); angka_juta:in std_logic_vector (3 downto 0); angka_puluhjuta:in std_logic_vector (3 downto 0);
output_angka: out std_logic_vector (3 downto 0)
);
end component;

--ring counter 8 bit
component Ring8bit_code
port (
clk: in std_logic_vector(3 downto 0);
output: out std_logic_vector (7 downto 0));
end component;

--ring counter mod4Count_code
component mod8Count_code
port (
rst,clk: in std_logic;
output1: out std_logic_vector (3 downto 0));
end component;
signal Keluaran_Ring8bit: std_logic_vector (7 downto 0);
signal Keluaran_7Segmentdec: std_logic_vector (7 downto 0);
signal keluaran_mod8Count_code: std_logic_vector (3 downto 0);
signal Keluaran_ClkSource: std_logic;
signal Keluaran_rst: std_logic;
signal satuan: std_logic_vector (3 downto 0); signal puluhan: std_logic_vector (3 downto 0); signal ratusan : std_logic_vector (3 downto 0); signal ribuan : std_logic_vector (3 downto 0);
signal puluhribu : std_logic_vector (3 downto 0); signal ratusribu : std_logic_vector (3 downto 0); signal juta : std_logic_vector (3 downto 0);
signal puluhjuta: std_logic_vector (3 downto 0); signal Keluaran_Puluhan_Satuan: std_logic_vector (3 downto 0);
begin
comp1: CLOCK port map (clk,Keluaran_ClkSource);
comp2: mod8Count_code port map(rst,Keluaran_ClkSource,keluaran_mod8Count_code);
comp3: Ring8bit_code port map
(keluaran_mod8Count_code,Keluaran_Ring8bit); comp4: Segmentdec port map (Keluaran_Puluhan_Satuan
,Keluaran_7Segmentdec);
comp5: Mod9Count_code port map (rst,switch,dec,satuan, puluhan, ratusan, ribuan,puluhribu,ratusribu,juta,puluhjuta ); comp6: scan_engine_angka port map (keluaran_mod8Count_code,satuan, puluhan, ratusan, ribuan,puluhribu,ratusribu,juta,puluhjuta
,Keluaran_Puluhan_Satuan);
Segment7 <= Keluaran_7Segmentdec; CommonA <= Keluaran_Ring8bit;
end Behavioral;
- Mod8Count
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 10.11.2022 15:59:55 -- Design Name:
-- Module Name: Mod8Count_code - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Mod8Count_code is
Port ( rst,clk: in std_logic; output1: out std_logic_vector (3 downto 0));
end Mod8Count_code;
architecture Behavioral of Mod8Count_code is signal count : std_logic_vector(3 downto 0);
begin process(rst,clk)
begin
if (rst = '1' or count >=8) then count <= "0000"; elsif (clk'event and clk = '1') then count <= count + 1;
end if;
end process;
output1 <= count;
end Behavioral;
- Mod9Count
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Mod9Count_code is
port (rst,switch,dec: in std_logic;
output1: out std_logic_vector (3 downto 0); output10: out std_logic_vector (3 downto 0); output100: out std_logic_vector (3 downto 0); output1000: out std_logic_vector (3 downto 0); output10000: out std_logic_vector (3 downto 0); output100000: out std_logic_vector (3 downto 0); output1000000: out std_logic_vector (3 downto 0);
output10000000: out std_logic_vector (3 downto 0)
);
end Mod9Count_code;
architecture behavioral of Mod9Count_code is
signal satuan : std_logic_vector(3 downto 0):="0000";
signal puluhan : std_logic_vector(3 downto 0):="0000";
signal ratusan : std_logic_vector(3 downto 0):="0000";
signal ribuan : std_logic_vector(3 downto 0):="0000";
signal puluhribu : std_logic_vector(3 downto 0):="0000";
signal ratusribu : std_logic_vector(3 downto 0):="0000";
signal juta : std_logic_vector(3 downto 0):="0000";
signal puluhjuta : std_logic_vector(3 downto 0):="0000";
begin process(rst,switch,dec)
begin
if (rst = '1') then
satuan <= "0000";
puluhan <= "0000";
ratusan <= "0000";
ribuan <= "0000";
puluhribu <= "0000";
ratusribu <= "0000";
juta <= "0000";
puluhjuta <= "0000";
elsif (rising_edge (dec)) then
if (switch)='0' then
if(satuan=9) then
satuan <= "0000";
if(puluhan=9) then puluhan <= "0000"; if(ratusan=9) then ratusan <= "0000"; if(ribuan=9) then
ribuan <= "0000";
if(puluhribu=9) then puluhribu <= "0000"; if(ratusribu=9) then ratusribu <= "0000";
if (juta=9) then
juta<="0000";
if (puluhjuta=9) then
puluhjuta<="0000";
else puluhjuta<=puluhjuta+1;
end if;
else juta<=juta+1;
end if;
else ratusribu<=ratusribu+1;
end if;
else puluhribu<=puluhribu+1;
end if;
else ribuan<=ribuan+1;
end if;
else ratusan<= ratusan+ 1;
end if;
else puluhan <= puluhan + 1;
end if;
else satuan <= satuan + 1;
end if;
elsif (switch ='1') then
if(satuan=0) then
if puluhan =0 then satuan <="0000";
else satuan <= "1001";
end if;
if(puluhan=0) then
if ratusan =0 then puluhan <="0000";
else puluhan <= "1001";
end if; if(ratusan=0) then if ribuan =0 then ratusan <="0000";
else ratusan <= "1001";
end if;
if(ribuan=0) then
if puluhribu =0 then ribuan <="0000";
else ribuan <= "1001";
end if;
if(puluhribu=0) then
if ratusribu =0 then puluhribu <="0000";
else puluhribu <= "1001";
end if;
if(ratusribu=0) then
if juta =0 then ratusribu <="0000";
else ratusribu <= "1001";
end if;
if (juta=0) then
if puluhjuta =0 then juta <="0000";
else juta<="1001";
end if;
if (puluhjuta=0) then
if puluhjuta =0 then puluhjuta <="0000";
else puluhjuta<="1001";
end if;
else puluhjuta<=puluhjuta - 1;
end if;
else juta<=juta - 1;
end if;
else ratusribu<=ratusribu - 1;
end if;
else puluhribu<=puluhribu - 1;
end if;
else ribuan<=ribuan - 1;
end if;
else ratusan<=ratusan - 1;
end if;
else puluhan<=puluhan -1;
end if;
else satuan<=satuan - 1;
end if;
end if;
end if;
end process;
output10000000<= puluhjuta;
output1000000<= juta;
output100000<= ratusribu;
output10000<= puluhribu;
output1000<= ribuan;
output100<= ratusan;
output10<= puluhan;
output1<= satuan;
end behavioral;
- Ring8Bit
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 11/14/2022 11:50:12 AM -- Design Name:
-- Module Name: decoder_code1 - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Ring8bit_code is Port ( clk : in std_logic_vector(3 downto 0);
output : out std_logic_vector (7 downto 0)
);
end Ring8bit_code ;
architecture Behavioral of Ring8bit_code is begin
process (clk)
begin
case clk is
when "0000"=>output<= "01111111";
when "0001"=>output<= "10111111";
when "0010"=>output<= "11011111";
when "0011"=>output<= "11101111";
when "0100"=>output<= "11110111";
when "0101"=>output<= "11111011";
when "0110"=>output<= "11111101";
when "0111"=>output<= "11111110";
when "1000"=>output<= "11111111";
when others =>output<= "11111111";
end case;
end process;
end Behavioral;
- Scan Engine
-- Uncomment the following library declaration if instantiating -- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity scan_engine_angka is
Port (
angka_satuan: in std_logic_vector (3 downto 0); angka_puluhan: in std_logic_vector (3 downto 0); angka_ratusan: in std_logic_vector (3 downto 0); angka_ribuan :in std_logic_vector (3 downto 0); angka_puluhribu:in std_logic_vector (3 downto 0); angka_ratusribu:in std_logic_vector (3 downto 0); angka_juta:in std_logic_vector (3 downto 0); angka_puluhjuta:in std_logic_vector (3 downto 0); input_clock: in std_logic_vector(3 downto 0); output_angka : out std_logic_vector (3 downto 0)
);
end scan_engine_angka; architecture Behavioral of scan_engine_angka is
begin process (angka_satuan, angka_puluhan,angka_ratusan, angka_ribuan, input_clock) begin case input_clock is
when "0000"=>output_angka<= angka_puluhjuta; when "0001"=>output_angka<= angka_juta; when "0010"=>output_angka<= angka_ratusribu; when "0011"=>output_angka<= angka_puluhribu; when "0100"=>output_angka<= angka_ribuan; when "0101"=>output_angka<= angka_ratusan; when"0110"=>output_angka<=angka_puluhan;
when "0111"=>output_angka<= angka_satuan; when "1000"=>output_angka<= "0000"; when others =>output_angka<= "0000";
end case; end process; end Behavioral;
- SegmentDec
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 05.11.2022 22:12:48 -- Design Name:
-- Module Name: Segment7Dec_code - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_arith.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 leaf cells in this code.
--library UNISIM; --use UNISIM.VComponents.all;
entity Segmentdec is
Port (
Data: in std_logic_vector (3 downto 0);
Output: out std_logic_vector (7 downto 0)
);
end Segmentdec;
architecture Behavioral of Segmentdec is signal temp: std_logic_vector (7 downto 0); begin process (data,temp ) begin
case data is when "0000" => temp <= "11000000";--0 when "0001" => temp <= "11111001";--1 when "0010" => temp <= "10100100";--2 when "0011" => temp <= "10110000";--3 when "0100" => temp <= "10011001";--4 when "0101" => temp <= "10010010";--5 when "0110" => temp <= "10000010";--6 when "0111" => temp <= "11111000";--7 when "1000" => temp <= "10000000"; --8 when "1001" => temp <= "10010000";--9
when others => temp <= "11111111";
end case;
end process;
Output <= temp;
end Behavioral;

Hasil Dan Pembahasan

Screenshot_20230126_014402_Microsoft 365 (Office).jpg
Screenshot_20230126_014412_Microsoft 365 (Office).jpg
Hasil pengujian pada alat ini dilakukan beberapa kali dengan dihubungkan ke FPGA Board lalu diputuskan hubungannya dan dihubungkan ulang sebagai uji coba keberhasilan kodingan serta alat ini.

Kesimpulan Dan Saran

5.1 Kesimpulan
Kesimpulan yang didapatkan pada penelitian pembuatan kode serta alat ini yaitu:
- Alat dan kode ini bisa bekerja dengan baik dari angka 0 hingga 9.
- Koding ini bisa digunakan ke dalam FPGA Board pada Nexys A7 Artix
100T.
- Penggunaan tombol dan switchnya bisa bekerja dengan baik untuk menambahkan serta mengurangkan angkanya.
5.2 Saran
Saran yang didapatkan pada penelitian pembuatan kode serta alat ini supaya bisa lebih baik yaitu:
- Kodingannya diperbagus agar bisa menunjukan angka yang banyak puluhan hingga ribuan.
- Diperbaiki kodingannya agar bisa menunjukan angkanya 1 per 1 pada seven segment display nya.
- Dibuat dengan sensor agar bisa lebih mudah digunakan.

Daftar Pustaka

● Rezekibarokah. (2021). Pengertian Seven Segment Display. https://rezekibarokah.com/pengertian-seven-segment-display/ (Diakses: January 17, 2023).
● Suyadhi, Taufiq D.S. (2015). Field Programmable Gate Array (FPGA). https://www.robotics-university.com/2015/06/field-programmable-gate-arr ay-fpga.html?m=1 (Diakses: January 17, 2023).
● Suprianto. (2015). PENGERTIAN PUSH BUTTON SWITCH (SAKLAR
TOMBOL TEKAN).
https://blog.unnes.ac.id/antosupri/pengertian-push-button-switch-saklar-to mbol-tekan/ (Diakses: January 17, 2023).
● Purnama, Ari, Fauziah, Novi Dian Nathasia. (2022). SMART COUNTER
PADA KAPASITAS BUS TRANSJAKARTA MENGGUNAKAN SENSOR INFRARED BERBASIS ARDUINO UNO ATMEGA 328.
https://jurnal.stkippgritulungagung.ac.id/index.php/jipi/article/download/2 623/1137 (Diakses: January 20, 2023).
● Aditia, Angga. (2020). RANCANG BANGUN SISTEM PENGHITUNG JUMLAH ORANG ATAU PENGUNJUNG BERBASIS ARDUINO “UNO” MENGGUNAKAN SENSOR PIR (PASSIVE INFRARED
RECEIVER) DAN SENSOR ULTRASONIC.
https://smart.stmikplk.ac.id/stmikplk/AmbilLampiran?ref=13888&jurusan =&jenis=Item&usingId=false&download=false&clazz=ais.database.model
.file.LampiranLain&iframe=true (Diakses: January 20, 2023)

Lampiran

Screenshot_20230202_103827_Gallery.jpg
Lampiran 1
gambar yang di lampirkan

Lampiran 2
https://digilent.com/reference/programmable-logic/nexys-a7/reference-manual
(Link untuk Datasheet Nexys A7 Atrix 100T)

Lampiran 3. Code
- Clock
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity CLOCK is
Port ( clk1 : in std_logic; clk : out std_logic
);
end CLOCK;
architecture Behavioral of CLOCK is signal count : integer :=0;
signal b : std_logic :='0';
begin
--clk generation.For 100 MHz clock this generates 1 Hz clock. process(clk1) begin
if(rising_edge(clk1)) then count <=count+1; if(count = 49999) then
b <= not b; count <=0; end if;
end if;
end process; clk<=b;
end Behavioral;
- Kode Utama
----------------------------------------------------------------------------------- Company:
-- Engineer:
--
-- Create Date: 01/16/2023 12:04:46 PM -- Design Name:
-- Module Name: tugasrancang - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity tugasrancang is
Port (
Segment7: out std_logic_vector (7 downto 0); CommonA: out std_logic_vector (7 downto 0); switch: in std_logic;
clk, rst,dec: in std_logic
);
end tugasrancang;
architecture Behavioral of tugasrancang is
-- Clock Generator
component CLOCK port (
clk1: in std_logic; clk: out std_logic);
end component;
-- 7 Segment Decoder component Segmentdec port (
data: in std_logic_vector (3 downto 0); output: out std_logic_vector (7 downto 0));
end component;
-- Mod 9 counter (ganti nama) component Mod9Count_code port (
rst,switch,dec: in std_logic;
output1: out std_logic_vector (3 downto 0);
output10: out std_logic_vector (3 downto 0);
output100: out std_logic_vector (3 downto 0);
output1000: out std_logic_vector (3 downto 0);
output10000: out std_logic_vector (3 downto 0);
output100000: out std_logic_vector (3 downto 0); output1000000: out std_logic_vector (3 downto 0);
output10000000: out std_logic_vector (3 downto 0)
);
end component;
--ring satuanpuluhan (ganti nama) component scan_engine_angka port (
input_clock: in std_logic_vector (3 downto 0); angka_satuan: in std_logic_vector (3 downto 0); angka_puluhan: in std_logic_vector (3 downto 0); angka_ratusan: in std_logic_vector (3 downto 0); angka_ribuan :in std_logic_vector (3 downto 0); angka_puluhribu:in std_logic_vector (3 downto 0);
angka_ratusribu:in std_logic_vector (3 downto 0);
angka_juta:in std_logic_vector (3 downto 0);
angka_puluhjuta:in std_logic_vector (3 downto 0);
output_angka: out std_logic_vector (3 downto 0)
);
end component;
--ring counter 8 bit component Ring8bit_code port (
clk: in std_logic_vector(3 downto 0);
output: out std_logic_vector (7 downto 0));
end component;
--ring counter mod4Count_code component mod8Count_code port (
rst,clk: in std_logic;
output1: out std_logic_vector (3 downto 0));
end component;
signal Keluaran_Ring8bit: std_logic_vector (7 downto 0);
signal Keluaran_7Segmentdec: std_logic_vector (7 downto 0);
signal keluaran_mod8Count_code: std_logic_vector (3 downto 0);
signal Keluaran_ClkSource: std_logic;
signal Keluaran_rst: std_logic;
signal satuan: std_logic_vector (3 downto 0);
signal puluhan: std_logic_vector (3 downto 0); signal ratusan : std_logic_vector (3 downto 0);
signal ribuan : std_logic_vector (3 downto 0); signal puluhribu : std_logic_vector (3 downto 0); signal ratusribu : std_logic_vector (3 downto 0);
signal juta : std_logic_vector (3 downto 0);
signal puluhjuta: std_logic_vector (3 downto 0);
signal Keluaran_Puluhan_Satuan: std_logic_vector (3 downto 0);
begin
comp1: CLOCK port map (clk,Keluaran_ClkSource);
comp2: mod8Count_code port map(rst,Keluaran_ClkSource,keluaran_mod8Count_code); comp3: Ring8bit_code port map
(keluaran_mod8Count_code,Keluaran_Ring8bit);
comp4: Segmentdec port map (Keluaran_Puluhan_Satuan
,Keluaran_7Segmentdec);
comp5: Mod9Count_code port map (rst,switch,dec,satuan, puluhan, ratusan, ribuan,puluhribu,ratusribu,juta,puluhjuta ); comp6: scan_engine_angka port map (keluaran_mod8Count_code,satuan, puluhan, ratusan, ribuan,puluhribu,ratusribu,juta,puluhjuta
,Keluaran_Puluhan_Satuan);
Segment7 <= Keluaran_7Segmentdec; CommonA <= Keluaran_Ring8bit;
end Behavioral;
- Mod8Count
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 10.11.2022 15:59:55 -- Design Name:
-- Module Name: Mod8Count_code - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE; use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Mod8Count_code is
Port (
rst,clk: in std_logic; output1: out std_logic_vector (3 downto 0));
end Mod8Count_code;
architecture Behavioral of Mod8Count_code is signal count : std_logic_vector(3 downto 0);
begin process(rst,clk)
begin
if (rst = '1' or count >=8) then count <= "0000"; elsif (clk'event and clk = '1') then count <= count + 1;
end if;
end process;
output1 <= count;
end Behavioral;
- Mod9Count
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Mod9Count_code is
port (rst,switch,dec: in std_logic;
output1: out std_logic_vector (3 downto 0); output10: out std_logic_vector (3 downto 0); output100: out std_logic_vector (3 downto 0); output1000: out std_logic_vector (3 downto 0); output10000: out std_logic_vector (3 downto 0); output100000: out std_logic_vector (3 downto 0);
output1000000: out std_logic_vector (3 downto 0);
output10000000: out std_logic_vector (3 downto 0)
);
end Mod9Count_code;

architecture behavioral of Mod9Count_code is
signal satuan : std_logic_vector(3 downto 0):="0000";
signal puluhan : std_logic_vector(3 downto 0):="0000";
signal ratusan : std_logic_vector(3 downto 0):="0000";
signal ribuan : std_logic_vector(3 downto 0):="0000";
signal puluhribu : std_logic_vector(3 downto 0):="0000";
signal ratusribu : std_logic_vector(3 downto 0):="0000";
signal juta : std_logic_vector(3 downto 0):="0000";
signal puluhjuta : std_logic_vector(3 downto 0):="0000";

begin
process(rst,switch,dec) begin
if (rst = '1') then
satuan <= "0000";
puluhan <= "0000";
ratusan <= "0000";
ribuan <= "0000";
puluhribu <= "0000";
ratusribu <= "0000";
juta <= "0000";
puluhjuta <= "0000";

elsif (rising_edge (dec)) then
if (switch)='0' then
if(satuan=9) then
satuan <= "0000";
if(puluhan=9) then puluhan <= "0000";
if(ratusan=9) then ratusan <= "0000"; if(ribuan=9) then
ribuan <= "0000";
if(puluhribu=9) then puluhribu <= "0000";
if(ratusribu=9) then ratusribu <= "0000";
if (juta=9) then
juta<="0000";
if (puluhjuta=9) then
puluhjuta<="0000";
else puluhjuta<=puluhjuta+1;
end if;
else juta<=juta+1;
end if;
else ratusribu<=ratusribu+1;
end if;
else puluhribu<=puluhribu+1;
end if;
else ribuan<=ribuan+1;
end if;
else ratusan<= ratusan+ 1;
end if;
else puluhan <= puluhan + 1;
end if;
else satuan <= satuan + 1;
end if;
elsif (switch ='1') then
if(satuan=0) then
if puluhan =0 then satuan <="0000";
else satuan <= "1001";
end if;
if(puluhan=0) then
if ratusan =0 then puluhan <="0000";
else puluhan <= "1001";
end if;
if(ratusan=0) then
if ribuan =0 then ratusan <="0000";
else ratusan <= "1001";
end if;
if(ribuan=0) then
if puluhribu =0 then ribuan <="0000";
else ribuan <= "1001";
end if;
if(puluhribu=0) then
if ratusribu =0 then puluhribu <="0000";
else puluhribu <= "1001";
end if;
if(ratusribu=0) then
if juta =0 then ratusribu <="0000";
else ratusribu <= "1001";
end if;
if (juta=0) then
if puluhjuta =0 then juta <="0000";
else juta<="1001";
end if;
if (puluhjuta=0) then
if puluhjuta =0 then puluhjuta <="0000";
else puluhjuta<="1001";
end if;
else puluhjuta<=puluhjuta - 1;
end if;
else juta<=juta - 1;
end if;
else ratusribu<=ratusribu - 1;
end if;
else puluhribu<=puluhribu - 1;
end if;
else ribuan<=ribuan - 1;
end if;
else ratusan<=ratusan - 1;
end if;
else puluhan<=puluhan -1;
end if;
else
satuan<=satuan - 1;
end if;
end if;
end if;
end process;
output10000000<= puluhjuta;
output1000000<= juta;
output100000<= ratusribu;
output10000<= puluhribu;
output1000<= ribuan;
output100<= ratusan;
output10<= puluhan;
output1<= satuan;
end behavioral;

- Ring8Bit
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 11/14/2022 11:50:12 AM -- Design Name:
-- Module Name: decoder_code1 - Behavioral -- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
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;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Ring8bit_code is
Port ( clk : in std_logic_vector(3 downto 0);
output : out std_logic_vector (7 downto 0)
);
end Ring8bit_code ;
architecture Behavioral of Ring8bit_code is begin
process (clk)
begin
case clk is
when "0000"=>output<= "01111111";
when "0001"=>output<= "10111111";
when "0010"=>output<= "11011111";
when "0011"=>output<= "11101111";
when "0100"=>output<= "11110111";
when "0101"=>output<= "11111011";
when "0110"=>output<= "11111101";
when "0111"=>output<= "11111110";
when "1000"=>output<= "11111111";
when others =>output<= "11111111";
end case;
end process;
end Behavioral;

- Scan Engine
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity scan_engine_angka is
Port (
angka_satuan: in std_logic_vector (3 downto 0); angka_puluhan: in std_logic_vector (3 downto 0); angka_ratusan: in std_logic_vector (3 downto 0); angka_ribuan :in std_logic_vector (3 downto 0); angka_puluhribu:in std_logic_vector (3 downto 0);
angka_ratusribu:in std_logic_vector (3 downto 0);
angka_juta:in std_logic_vector (3 downto 0);
angka_puluhjuta:in std_logic_vector (3 downto 0);
input_clock: in std_logic_vector(3 downto 0);
output_angka : out std_logic_vector (3 downto 0)
);
end scan_engine_angka; architecture Behavioral of scan_engine_angka is
begin process (angka_satuan, angka_puluhan,angka_ratusan, angka_ribuan, input_clock) begin case input_clock is
when "0000"=>output_angka<= angka_puluhjuta; when "0001"=>output_angka<= angka_juta; when "0010"=>output_angka<= angka_ratusribu; when "0011"=>output_angka<= angka_puluhribu; when "0100"=>output_angka<= angka_ribuan; when "0101"=>output_angka<= angka_ratusan; when"0110"=>output_angka<=angka_puluhan;
when "0111"=>output_angka<= angka_satuan; when "1000"=>output_angka<= "0000";
when others =>output_angka<= "0000";
end case;
end process;
end Behavioral;
- SegmentDec
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 05.11.2022 22:12:4
-- Design Name:
-- Module Name: Segment7Dec_code - Behavioral
-- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created -- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_arith.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 leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Segmentdec is
Port (
Data: in std_logic_vector (3 downto 0);
Output: out std_logic_vector (7 downto 0)
);
end Segmentdec;
architecture Behavioral of Segmentdec is
signal temp: std_logic_vector (7 downto 0);
begin
process (data,temp )
begin
case data is
when "0000" => temp <= "11000000";--0
when "0001" => temp <= "11111001";--1
when "0010" => temp <= "10100100";--2
when "0011" => temp <= "10110000";--3
when "0100" => temp <= "10011001";--4
when "0101" => temp <= "10010010";--5
when "0110" => temp <= "10000010";--6
when "0111" => temp <= "11111000";--7
when "1000" => temp <= "10000000"; --8
when "1001" => temp <= "10010000";--9
when others => temp <= "11111111";
end case;
end process;
Output <= temp;
end Behavioral;