Introduction: DIGITAL CLOCK FPGA

Digital Clock FPGA dikerjakan oleh :

Ady Wijaya - 2501962946
Farrel ZL - 2540125390
Nicholas O. - 2540125390
William Deli - 2540119702


Di era sekarang, ilmu pengetahuan dan teknologi (IPTEK ) di bidang sistem digital berkembang dengan sangat pesat. Banyak perangkat analog dengan sistem konvensional yang telah dikembangkan dengan sistem digital salah satunya adalah jam. Jam merupakan suatu perangkat analog yang digunakan untuk menunjukkan waktu. Jam ini merupakan salah satu penemuan paling tua di dunia yang sangat penting kegunaannya. Jam digital lebih efisien penggunaannya dari segi efisiensi tempat dan konsumsi daya jika dibandingkan dengan jam konvensional. Oleh karena itu, pada perancangan ini kami membuat sebuah jam digital diatas platform board FPGA (Field Programmbale Gate Array) dengan 7segment.


Supplies

Hardware :

Board FPGA Nexsys A7-100T
7segment module
1 reset button
2 input button


Software (Vivado) :

1 Clock Rb Component
1 Clock Counter Component
1 Mod Counter Component
3 Binary to BCD decoder Component
1 Multiplexer 6 to 1 Component
1 Ring 8-bit Component
1 7segment decoder Component

Step 1: Flowchart & Block Diagram

Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 2: Skematik (Full Layout)

Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 3: Skematik Clock Component

Komponen clock digunakan untuk mengatur kecepatan counter pada selector mux 6 to 1 dan juga ring bit counter. Agar data yang ditampilkan dan juga waktu perpindahan antara satu 7segment dengan yang lainnya memiliki interval yang sama maka dibutuhkan satu sumber clock yang sama. Maka dari itu komponen clock ini dipakai.


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 4: Skematik Clock Counter

Fungsi clock counter diatas kami gunakan untuk menjalankan jam, menit, dan detik serta dapat diberikan input button untuk mengatur jam dan menit yang diinginkan user. Berikut cara kerja dari clock counter :


1) Kami membuat port untuk mendeclare input dan output yang ingin digunakan, serta berapa bit keluaran yang diinginkan disini kami menggunakan 4 input dan 3 output berupa vector, 4 input yang kami gunakan adalah : clock, reset, dan 2 input button untuk jam dan menit. 3 output yang kami gunakan adalah untuk keluaran 3 bit dari jam, menit, dan detik

2) Kami menginisialisasi sinyal untuk perhitungan clock, jam, menit, dan detik yang dimulai dari 0

3) Kami membuat 1 proses untuk clk dan reset nantinya di dalam proses tersebut kami menggunakan beberapa kondisi untuk menset jam, menit, detik, dan clocknya kedalam satuan biner (0 dan 1)

4) Kondisi reset adalah ketika user memencet tombol maka semua clock, jam, menit, dan detik akan kembali ke 0

5) Kondisi jika user tidak memencet tombol maka perhitungan clock akan terus menerus + 1 (berjalan)

6) Kondisi perhitungan clock kami memakai 100mhz dimana itu bisa dikatakan perhitungan yang bisa dikeluarkan oleh board fpga tersebut.

7) Kami membuat 1 kondisi dengan 2 fungsi berbeda untuk detik dan input menit, disini kami memberikan batasan detik 59,

  • Untuk fungsi pertama kami adalah jika detik sudah menghitung mencapai 59 maka selanjutnya akan kembali ke 0 dan menit akan + 1,
  • Fungsi kedua kami adalah jika user memencet tombol maka menit akan akan + 1 dan detik akan kembali ke 0 


8) Kami membuat 1 kondisi dengan 2 fungsi berbeda untuk menit dan input jam, disini kami memberikan batasan menit 59,

  • Untuk fungsi pertama kami adalah jika menit sudah menghitung mencapai 59 maka selanjutnya akan kembali ke 0 dan jam akan + 1,
  • Fungsi kedua kami adalah jika user menekan tombol maka jam akan akan + 1 dan menit dan detik akan kembali ke 0 


9) Kami membuat 1 kondisi untuk jam, dimana kondisi disini kami hanya membatasi jam mencapai 23 dan jika melewati 23 maka akan kembali ke 0 


10) Kami menggunakan fungsi to_unsigned untuk mengubah suatu nilai, misalnya hour <= std_logic_vector(to_unsigned(hour_count, 8));

  •  (to_unsigned(hour_count, 8)) fungsi pertama adalah nilai yang akan dikonversi, dan fungsi kedua adalah ukuran hasil dalam bitnya
  • diatas hour_count dikonversi ke angka 4bit dan disimpan di hour


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 5: Skematik Binary to BCD Jam, Menit & Detik

Pada komponen binary to BCD converter yang digunakan, input binary yang diterima oleh binary adalah sebanyak 4 bit dan bcd yang dikeluarkan adalah sebanyak 8 bit untuk kemudian dimasukan ke dalam 7segment decoder agar dapat ditampilkan ke dalam 2 buah 7 segment. 


4-bit yang masuk ke dalam BCD converter ini diterjemahkan menjadi dua buah angka yang terpisah menggunakan sebuah algoritma yang dinamakan sebagai double dabbler. Sebagai contoh, ketika input yang diberikan adalah biner 1011 sedangkan yang ingin ditampilkan adalah angka 11 pada 7segment maka, diperlukan dua buah 7segment untuk menampilkan angka 0001 dan 0001. Algoritma double dabbler dapat menerjemahkan 1011 menjadi 0001 0001 sehingga ketika input ini dimasukan kedalam 7segment decoder yang nantinya akan dilanjutkan kepada komponen 7segment, maka pengguna dapat melihat angka 11. Begitulah cara kerja dari komponen Binary to BCD converter yang digunakan pada digital clock ini.


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 6: Skematik Multiplexer 6 to 1 & Mod Conter Address

Komponen mux 6 to 1 yang digunakan pada digital clock ini karena 7segment pada FPGA Nexys A7 - 100T hanya bisa menerima 1 input dalam 1 waktu, sedangkan input yang ingin dimasukan ke dalam 7segment FPGA ada 6 buah. Maka dari itu fungsi komponen mux 6 to 1 memiliki fungsi untuk mengeluarkan 1 input dalam 1 waktu dan kemudian akan melakukan shift ke input berikutnya. Mux 6 to 1 yang digunakan pada digital clock ini dikendalikan oleh sebuah counter sebagai selector dari data yang ingin dilanjutkan ke 7segment.


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 7: Skematik 7segment Decoder

Komponen 7segment decoder digunakan untuk menerjemahkan dari input biner menjadi output berupa led mana saja yang harus dinyalakan pada 7segment. Biner yang dimasukan ke dalam 7segment hanya akan menyalakan bagian bagian segment saja sehingga input yang diberikan tidak bisa langsung berupa angka dalam bentuk biner.


Sebagai contoh ketika pengguna ingin menampilkan angka 1 pada 7segment, pengguna tidak dapat secara langsung memasukan input 0001 kedalam 7segment, namun melainkan harus diterjemahkan dulu sehingga bagian dari 7segment yang menyala membentuk angka 1. Sesuai dengan namanya, yaitu 7segment, terdapat 7 bagian yang dapat dinyalakan atau dimatikan oleh pengguna tergantung dari input yang diberikan. Disinilah peran dari decoder 7segment. Input biner 0001 dari pengguna akan diterjemahkan sebagai bagian mana saja yang harus dinyalakan oleh 7segment sehingga 7segment yang menyala dapat menunjukkan angka 1.


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 8: Skematik Ring 8-bit Counter

Komponen ring 8-bit counter memiliki fungsi untuk menerapkan sistem multiplexing pada 7segment FPGA Nexys A7 - 100T. Karena 7segment dari fpga ini dibuat sebagai satu buah komponen dan bukan 8 buah 7segment yang terpisah maka yang dapat dilakukan untuk menunjukkan angka yang berbeda adalah dengan menyalakan 1 buah 7segement dalam satu waktu dengan input tertentu kemudian dilanjutkan dengan menyalakan 7segment disebelahnya dan mematikan 7segment sebelumnya. Apabila hal ini dilakukan dalam kecepatan yang sangat tinggi maka akan menimbulkan ilusi bahwa semua 7segment menyala dalam waktu yang bersamaan namun dapat menampilkan angka yang berbeda beda.


Add Sources : https://drive.google.com/drive/folders/1IfhVIvF7-BT6D6ZHDzK23ixiBs24_-f2?usp=sharing

Step 9: Video Simulasi

Diatas merupakan video simulasi untuk Digital Clock yang telah kami rancang