designing digital sequence project

12
MODUL VI PROYEK PERANCANGAN RANGKAIAN DIGITAL Reinhart Sahala Partogi (18011035) / Yogi Salomo (13511059) Asisten: Luqman Muh Z /13208032 Tanggal Percobaan: 6/12/2012 EL2195-Praktikum Rangkaian Sistem Digital Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB Abstrak Modul VI ini merupakan percobaan dimana praktikan merancang proyek sederhana rangkaian digital yang mengaplikasikan desain kode VHDL dan mengimplementasikannya melalui penggunaan FPGA dan display LCD. Proyek ini dapat berupa bermacam – macam rupa, pada percobaan ini, praktikan akan merancang suatu sistem permainan/game yang dapat diatur dengan input yang dapat dikontrol dari board evaluasi FPGA. Kata kunci: FPGA, display LCD, rancangan rangkaian digital. 1. PENDAHULUAN Percobaan modul VI ini terfokus kepada finishing desain VHDL pada praktikum modul 6 sebelumnya dan dilanjutkan dengan demo dan presentasi hasil rancangan yaitu dengan mengimplementasikan dan menampilkan pada display LCD. Pada percobaan ini, praktikan merancang suatu jenis permainan yang ditampilkan di display LCD. Permainan ini berupa suatu tantangan untuk menghindari rintangan – rintangan. Kotak ‘jagoan’ dan kotak ‘rintangan’ dibuat untuk bergerak, dan tujuan dari permainan ini adalah untuk menghindari terjadinya collision atau tabrakan antara kedua kotak tersebut 2. TEORI DASAR Proyek ini berupa sebuah game/permainan yang dirancang sebagai berikut : Sebuah kotak ‘jagoan’ dirancang dan ditampilkan pada sebuah layar LCD, kotak ini berukuran 50x50 pixel berwarna merah. Kotak ini dirancang untuk hanya dapat bergerak secara vertikal (melompat). Sebuah input disediakan dalam perancangan untuk mengontrol gerakan melompat ini. Gerakan melompat ini juga terbatas oleh suatu atap pada ketinggian tertentu dimana saat kotak jagoan menyentuh ketinggian tersebut, kotak ini akan kembali jatuh ke tempat asal. Gerakan melompat ini bertujuan untuk menghindari rintangan yang berupa kotak yang bergerak horizontal dari kanan ke kiri. Jika kotak rintangan dan jagoan mengalami kontak/collision, maka game akan tereset yaitu dengan menampilkan warna hitam pada layar. Pada game ini, praktikan merencanakan adanya level –level rintangan, dimana pada kenaikan level, rintangan akan memiliki kecepatan yang bertambah, dan juga memiliki gerakan acak. FSM yang dirancang antara lain : Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB 1

Upload: yogi-salomo-mangontang-pratama

Post on 06-Aug-2015

40 views

Category:

Documents


9 download

DESCRIPTION

The process of designing a digital project

TRANSCRIPT

Page 1: Designing Digital Sequence Project

MODUL VI

PROYEK PERANCANGAN RANGKAIAN DIGITAL

Reinhart Sahala Partogi (18011035) / Yogi Salomo (13511059)

Asisten: Luqman Muh Z /13208032Tanggal Percobaan: 6/12/2012

EL2195-Praktikum Rangkaian Sistem DigitalLaboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Modul VI ini merupakan percobaan dimana praktikan merancang proyek sederhana rangkaian digital yang mengaplikasikan desain kode VHDL dan mengimplementasikannya melalui penggunaan FPGA dan display LCD. Proyek ini dapat berupa bermacam – macam rupa, pada percobaan ini, praktikan akan merancang suatu sistem permainan/game yang dapat diatur dengan input yang dapat dikontrol dari board evaluasi FPGA.

Kata kunci: FPGA, display LCD, rancangan rangkaian digital.

1. PENDAHULUAN

Percobaan modul VI ini terfokus kepada finishing desain VHDL pada praktikum modul 6 sebelumnya dan dilanjutkan dengan demo dan presentasi hasil rancangan yaitu dengan mengimplementasikan dan menampilkan pada display LCD. Pada percobaan ini, praktikan merancang suatu jenis permainan yang ditampilkan di display LCD. Permainan ini berupa suatu tantangan untuk menghindari rintangan – rintangan. Kotak ‘jagoan’ dan kotak ‘rintangan’ dibuat untuk bergerak, dan tujuan dari permainan ini adalah untuk menghindari terjadinya collision atau tabrakan antara kedua kotak tersebut

2. TEORI DASAR

Proyek ini berupa sebuah game/permainan yang dirancang sebagai berikut :

Sebuah kotak ‘jagoan’ dirancang dan ditampilkan pada sebuah layar LCD, kotak ini berukuran 50x50 pixel berwarna merah. Kotak ini dirancang untuk hanya dapat bergerak secara vertikal (melompat). Sebuah

input disediakan dalam perancangan untuk mengontrol gerakan melompat ini. Gerakan melompat ini juga terbatas oleh suatu atap pada ketinggian tertentu dimana saat kotak jagoan menyentuh ketinggian tersebut, kotak ini akan kembali jatuh ke tempat asal. Gerakan melompat ini bertujuan untuk menghindari rintangan yang berupa kotak yang bergerak horizontal dari kanan ke kiri. Jika kotak rintangan dan jagoan mengalami kontak/collision, maka game akan tereset yaitu dengan menampilkan warna hitam pada layar. Pada game ini, praktikan merencanakan adanya level –level rintangan, dimana pada kenaikan level, rintangan akan memiliki kecepatan yang bertambah, dan juga memiliki gerakan acak.

FSM yang dirancang antara lain :

a. FSM jagoan

Gambar 2.1 State diagram kotak jagoan. Sumber : dokumentasi pribadi

b. FSM rintangan

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB1

Page 2: Designing Digital Sequence Project

Gambar 2.1 State diagram kotak musuh. Sumber : dokumentasi pribadi

3. METODOLOGI

Pada percobaan ini langkah – langkah yang dilakukan dalam perancangan proyek :

4. HASIL DAN ANALISIS

Gambar 4.1 Tampilan awal game pada layar Komputer. Sumber : Dokumentasi pribadi.

Hasil yang kami peroleh dari game yang kami rancang telah kami sertakan pada CD yang terlampir dalam laporan ini. Sesuai dengan penjelasan mengenai rancangan ide yang telah kami jelaskan pada laporan sebelumnya, kami berencana untuk membuat sebuah game dimana user bertugas untuk menghindarkan sebuah kotak berwarna merah dari kotak biru yang selalu bergerak secara horizontal ke arahnya. Kami telah berhasil membuat tampilan yang diharapkan. Tanah, kotak merah, dan kotak biru telah muncul dengan baik di layar tanpa adanya gangguan. Akan tetapi input dari user masih belum berhasil terbaca oleh program bahkan hingga laporan ini dikerjakan. Sehingga game yang kami buat belum selesai dengan sempurna sampai pada akhir praktikum 2195 ini. Untuk analisis mengenai output program yang demikian akan dijabarkan satu per satu untuk setiap bagian dari program.

4. 1. ANALISIS COLOR_ROM_VHD

Color_rom_vhd adalah bagian program yang berfungsi untuk mengeluarkan tampilan pada layar secara statik. Dengan batas yang berupa i_pixel_row dan i_pixel_column, bagian ini memberikan warna pada bagian tertentu pada layar. Adapun animasi yang kita lihat pada program adalah tampilan gambar statik yang batasnya berubah-ubah pada color_rom_vhd yang kecepatannya tak dapat tertangkap mata manusia, sehingga perpindahan gambar tidak terlihat dan gambar seperti bergerak.Adapun program yang kami buat tidak menggunakan FSM ( Finite State Machine ) sama sekali. Kami memutuskan untuk membuatnya demikian disebabkan oleh tidak begitu rumitnya state yang diperlukan oleh program ini, sehingga untuk kemudahan dan kesederhanaan program ini, seluruh keadaan program dikendalikan melalui color_rom_vhd yang akan kita bahas ini.

Pada bagian ini kami mendeklarasi entitas dari color_rom_vhd ini beserta seluruh input

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB2

Finishing desain VHDL

Pengimplementasian desain ke dalam FPGA

Penentuan pin planner

Tampilkan ke dalam layar LCD

Demo dan presentasi

proyek

Page 3: Designing Digital Sequence Project

dan output yang akan digunakan pada bagian ini. Tidak begitu banyak perubahan dari color_rom_vhd yang diberikan pada panduan praktikum. Dapat kita lihat bahwa ada input bernama clok. Clok ini adalah input yang kami buat untuk menampung waktu yang dihasilkan oleh file CLOCKDIV. Jadi dengan input clok inilah program dapat bergerak.Output x kami gunakan untuk menguji apakah input i_jump yang seharusnya diterima dari switch / push button terdeteksi oleh color_rom_vhd ini melalui tes waveform. Akan tetapi setelah dilakukan pengujian kami amati bahwa memang input i_jump ini tidak terbaca bahkan pada waveform. Dapat disimpulkan bahwa kesalahan input bukan terdapat pada kesalahan pemrograman di color_rom_vhd ini.Color_rom_vhd ini sendiri mengembalikan output berupa o_red, o_green, dan o_blue. Jadi secara singkat, semua pemrograman yang dilakukan pada bagian color_rom_vhd adalah untuk menghasilkan berupa berapa nilai dari output berwarna merah, hijau, dan biru yang dihasilkan pada bagian tertentu layar, untuk kemudian diteruskan kepada display_vhd yang akan dijelaskan berikutnya.

Dapat dilihat bahwa pendekatan perancangan yang kami gunakan adalah secara behavioral. Dan pada bagian ini, kami mendeklarasi berbagai sinyal yang nantinya akan digunakan pada program game kami ini. Sinyal MERAH, TANAH, BIRU, dan HITAM adalah sinyal yang digunakan untuk menandakan daerah-daerah tertentu yang harus diisi dengan warna yang sesuai dengan nama sinyal tersebut. Dapat kita lihat pada bagian lebih lanjut dari program ini, bahwa nantinya pada batas-batas tertentu yang juga telah dibuat, sinyal-sinyal ini akan bernilai satu dan pada saat itulah output dari

program ini diatur sesuai dengan komposisi untuk warna tersebut.Sinyal jagoan1, jagoan2, musuh1, dan musuh2 adalah sinyal yang digunakan sebagai batas dari kotak-kotak yang menjadi jagoan ataupun musuh dari game ini. Sinyal-sinyal tersebut dideklarasi dengan nilai tertentu, yang merupakan titik awal dari posisi kotak jagoan dan musuh tersebut. Kami membuat hanya ada 2 batas untuk masing-masing kotak karena gerakan masing-masing kotak yang terbatas, atas bawah untuk jagoan dan kiri kanan untuk musuh, membuat ada batas-batas yang bernilai tetap sehingga kami cukup memasukkan nilai batasnya saja, tanpa perlu dibuat sinyalnya. Sinyal ini berfungsi untuk nantinya berubah nilainya dari yang didefinisikan pada awal program, sesuai dengan kondisi pada saat game berlangsung.Sinyal divo berfungsi untuk menampung output DIVOUT dari komponen CLOCKDIV, sebelum nantinya diatur oleh clok pada tingkat top_level. Sama seperti sinyal divo, sinyal s juga merupakan sinyal untuk menampung sementara sinyal lainnya. Sinyal s ini kami gunakan untuk menampung sinyal mentok, yang tidak dapat langsung dimasukkan dalam program. Akan ada bagian tertentu yang menjelaskan tentang hal ini.Sementara Sinyal TABRAKAN dan mentok adalah sinyal keadaan yang memberitahu program akan kejadian tertentu yang terjadi dalam program. Agak mirip dengan sinyal-sinyal warna ( TANAH, MERAH, BIRU, dan HITAM) sinyal-sinyal ini hanya bernilai satu apabila terjadi suatu kondisi dalam program sehingga nantinya akan direspon program dengan aksi tertentu. Bedanya sinyal tabrakan dan mentok ini tidak direspon dengan memberikan warna tertentu, tapi direspon dengan perubahan perilaku pada program. Akan ada penjelasan lebih detail mengenai bagian ini.

Ada satu komponen yang ditambahkan pada bagian color_rom_vhd ini yaitu komponen CLOCKDIV. Komponen ini berguna untuk membuat program dapat bergerak, atau secara singkat dapat disebut sebagai waktu dari program. Dengan adanya komponen DIVOUT, maka keadaan program akan berubah setiap saat DIVOUT ini berubah nilainya baik menjadi satu ataupun nol sesuai

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB3

Page 4: Designing Digital Sequence Project

dengan program. Dan karena kita mengharapkan program yang berupa animasi sederhana, komponen ini harus selalu ada. Dan karena pemrograman animasi itu kita lakukan pada color_rom_vhd ( program ini tidak menggunakan FSM) maka CLOCKDIV inpun disertakan disini.

Pada Port Map bagian color_rom_vhd kami meng-assign bagian dari komponen CLOCKDIV ke dalam sinyal dan input yang terdapat pada bagian ini. Dapat diamati pada potongan program di atas bahwa CLK dari CLOCKDIV dimasukkan pada input clok, dan DIVOUT-nya dimasukkan pada sinyal divo. Port Map yang dilakukan hanya sekali karena komponen yang ada hanya satu, yaitu CLOCKDIV.

Bagian Process dituliskan dengan semua sinyal yang terlibat di dalamnya. Semua sinyal tersebut akan dijelaskan pada bagian lain dari laporan ini.Pada bagian ini dapat diamati bahwa program akan berulang setiap kali divo atau yang merupakan DIVOUT dari komponen CLOCKDIV berubah dan bernilai satu. Ini berarti program ini bersifat active high. Sementara kondisi IF yang terdapat di bawah adalah keadaan saat kedua kotak bertabrakan. Logika yang kami gunakan adalah ketika bagian kiri dari kotak musuh bernilai 149 ( yang merupakan batas kanan dari kotak jagoan ) dan di saat yang bersamaan, batas bawah kotak jagoan berada pada rentang 401 -450, atau saat bagian bawah kotak jagoan bernilai 401 ( yang merupakan batas atas dari kotak musuh ) dan batas kiri kotak musuh berada pada rentang 100 – 149, maka sinyal tabrakan akan menyala, yang pada akhirnya nanti akan membangkitkan sinyal warna hitam. Demikianlah kami membuat keadaan kedua kotak bertabrakan.

Sementara pada saat sinyal TABRAKAN masih bernilai 0, ada beberapa kondisi yang harus diperhatikan. Pada bagian ini kami membuat keadaan saat kotak jagoan menyentuh tanah atau batas bawahnya sama dengan 450. Nilai s yang menyimpan keadaan sudah mentok atau belum, kami masukkan dengan 0 karena mentok disini maksudnya adalah mentok dengan batas atas. Selain itu kami juga mengurangi batas bawah dan atas dari kotak jagoan ini senilai 1. Hal ini bermaksud agar setelah pengulangan nanti, kondisi kotak tidak kembali kepada kondisi ini. Karena input yang tidak dapat terbaca, kami membuat kotak jagoan ini jadi bergerak secara otomatis ke atas dan ke bawah. Oleh karena itulah kami harus mengurangi batas kotak ini dan tidak membuatnya dalam kondisi diam.

Kondisi yang kedua ini adalah keadaan pada saat batas atas kotak jagoan bersentuhan dengan atap ( dalam hal ini, sebuah konstanta bernilai 241 ). Apabila batas atas kotak telah menyentuh nilai tersebut, maka sinyal s akan diisi dengan nilai 1. Hal ini berfungsi untuk membedakan kondisi saat kotak naik dengan kondisi kotak turun. Dan batas kotak pun kami tambahkan sejumlah 1 seperti pada kondisi sebelumnya serta dengan tujuan yang sama, agar kotak tidak kembali ke dalam keadaan ini pada saat program berulang.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB4

Page 5: Designing Digital Sequence Project

Kondisi yang ketiga ini adalah keadaan dimana kotak jagoan bergerak ke atas. Batas 240 digunakan karena tepat pada saat 241 nanti kotak akan masuk ke kondisi sebelumnya yaitu kondisi kotak mentok dan kembali bergerak ke bawah, sementara s = 0 adalah yang membedakan saat kotak bergerak ke atas atau ke bawah. Saat s = 0 artinya kotak baru saja bergerak dari batas paling bawah, sehingga gerakannya adalah naik. Batas atas dan bawah kotak jagoan berkurang satu setiap perulangan yang masuk ke dalam kondisi ini, karena nilai 0 dari pixel berada di atas dan kiri layar.

Kondisi ini cukup mirip dengan kondisi sebelumnya. Bedanya adalah pada kondisi ini sinyal s harus bernilai 1. Artinya adalah kotak telah mencapai batas paling atas sehingga pada keadaan ini kotak harus turun. Karena syarat pertama sama dengan kondisi sebelumnya, diperlukan sebuah sinyal penanda lainnya yang menandakan apakah kotak masih harus bergerak naik atau telah sampai batas atas dan harus bergerak ke bawah.

Berikut adalah kondisi untuk pergerakan kotak musuh. Kondisi yang dibuat tidak terlalu rumit karena kami membuat kotak musuhnya hanya satu jenis saja, dan pergerakannya juga tidak bervariasi. Sehingga kondisi yang diperlukan hanya ada dua, yaitu saat batas kiri dari musuh masih lebih besar dari nol ( kotak musuh masih terlihat di layar) dan saat kotak musuh sudah keluar. Apabila kotak musuh masih berada dalam batasan layar, maka batas kiri dan kanan dari kotak musuh akan dikurangi satu setiap pengulangan sehingga kotak akan selalu bergerak ke kiri. Dan apabila batas kiri kotak telah menyentuh nilai nol, maka kotak musuh akan dikembalikan ke posisi awal dan kemudian akan berulang kembali sampai program dihentikan.

Selain kondisi yang mengatur pergerakan kotak, ada juga kondisi untuk memberi sinyal warna pada batas-batas tertentu yang akan dijelaskan kemudian pada bagian berikut ini.

Bagian ini mengatur untuk memasukkan nilai sinyal MERAH menjadi ‘1’ apabila i_pixel_row berada pada rentang antara batas atas dan bawah jagoan ( jagoan1 dan jagoan2 ) sementara untuk i_pixel_column sebagai batas kiri dan kanan diberikan konstanta senilai 100 dan 149, karena kotak hanya bergerak ke atas dan bawah sehingga batas kanan dan kiri tidak akan berubah. Nilai jagoan1 dan jagoan2 akan berubah setiap pengulangan program oleh karena itulah lokasi sinyal MERAH menyala berubah terus menerus dan kotak terlihat seperti bergerak.

Bagian ini mengatur untuk menampilkan tanah, sehingga sinyal yang diaktifkan juga sinyal tanah. Karena tanahnya berada penuh dari kiri sampai kanan layar, maka batas yang dimasukkan hanya i_pixel_row saja, yaitu selama i_pixel_row bernilai lebih besar dari 449, maka sinyal TANAH akan diberikan nilai ‘1’. Cara kerja sinyal ini kurang lebih sama dengan cara kerja kotak merah.

Bagian ini mengatur penampilan dari kotak biru yang merupakan musuh dari permainan ini. Cara kerjanya kurang lebih sama dengan kotak merah, akan tetapi ada sedikit perbedaan pada batas yang diberikan. Pada kotak ini, batas yang berupa variabel yang berubah terdapat pada batas kiri dan kanannya ( musuh1 dan musuh2 ) karena kotak bergerak secara horizontal, maka variabel yang berubah adalah batas kiri dan kanan. Sementara batas atas dan bawah dibuat konstan yaitu pada 401 dan 450.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB5

Page 6: Designing Digital Sequence Project

Apabila kita amati, pada bagian-bagian sebelumnya terdapat syarat yang tidak dibahas, yaitu Sinyal TABRAKAN harus bernilai ‘0’. Syarat itu harus ditambahkan karena semua warna yang telah disebutkan sebelumnya, hanya muncul apabila kotak belum bertabrakan ( apabila Sinyal TABRAKAN bernilai nol ). Apabila nilai TABRAKAN menjadi ‘1’, kami membuat agar layar berubah menjadi berwarna hitam, oleh karena itu, dibuat untuk batas seluruh layar, output warna dibuat menjadi hitam.Akan tetapi ada bagian yang terlewatkan, yaitu karena bahasa VHDL berjalan secara paralel, setelah sinyal TABRAKAN menjadi satu setelah terjadi tabrakan ( lihat kondisi sebelumnya ), kondisi tidak tepat demikian karena pada kondisi pergerakan tidak terjadi perubahan, sehingga setelah kondisi tabrakan terjadi pengulangan akan berlanjut sehingga posisi kedua kotak langsung keluar dari kondisi tabrakan.

Bagian yang terakhir dari file color_rom_vhd sekaligus juga yang menjadi inti dari file ini. Pada bagian ini dimasukkan nilai-nilai untuk output o_red, o_green, serta o_blue yang akan dikirim ke bagian display_vhd sebagai output. Nilai yang dimasukkan ke masing-masing output adalah kode Hexadesimal warna yang dimaksud. Dapat dilihat bahwa warna-warna tersebut muncul apabila sinyal warna yang bersangkutan menyala. Berikut adalah daftar warna sesuai dengan kode hexadesimalnya :

Warna O_red O_green

O_blue

merah FF 00 00biru 00 00 FFhijau 00 FF 00

hitam 00 00 00putih FF FF FFTabel 4.1.1 Tabel komposisi warna dan kode hexadesimalnya

Setelah color_rom_vhd mengeluarkan output, langsung diterima oleh bagian display_vhd untuk kemudian ditampilkan pada layar, akan tetapi sebelum membahasnya akan dibahas terlebih dahulu mengenai bagian CLOCKDIV.

4.2. ANALISIS CLOCKDIV

CLOCKDIV adalah bagian dari program yang berfungsi untuk menggantikan waktu. Oleh karena tidak ada timer untuk program, maka kita membuat suatu bagian yang dapat menggantikannya. Clockdiv akan berubah-ubah nilainya sebanyak frekeuensi yang kita masukkan. Apabila telah berubah sebanyak frekuensi tersebut, maka nilai countnya akan bertambah, itulah hitungan satu waktu untuk sebuah program VHDL.

Tidak ada perubahan yang signifikan pada bagian CLOCKDIV dibandingkan dengan file yang sama pada percobaan-percobaan sebelumnya. Akan tetapi yang harus kita amati adalah bahwa kami menggunakan frekuensi yang cukup kecil yaitu 500000Hz. Pertimbangan dalam menggunakan frekuensi ini adalah karena kami harus membuat tampilan yang perubahannya cukup cepat, akan tetapi counter pada pergerakan benda harus bertambah hanya satu nilai setiap perpindahannya. Hal ini disebabkan karena adanya suatu nilai yang harus dicapai dalam setiap perulangan sehingga apabila digunakan penjumlahan yang lebih dari satu, akan terbuka kemungkinan pengurangannya akan melewati batas yang diberikan sehingga kejadian tidak sesuai dengan yang diharapkan. Oleh karena itu, untuk keamanan counternya dipastikan hanya berubah sebesar satu nilai setiap waktunya. Agar perubahan tidak terlalu lambat dan membosankan, kami memutuskan untuk memperkecil frekuensi dari CLOCKDIV kami.

Setelah dari CLOCKDIV, masuk ke color_rom_vhd yang telah kita bahas sebelumnya, dan dari color_rom_vhd tersebut, masuk ke bagian display_vhd.

4.3. ANALISIS DISPLAY_VHD

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB6

Page 7: Designing Digital Sequence Project

Display_vhd adalah jembatan yang menghubungkan color_rom_vhd dengan modul VGA pada FPGA. Bagian ini mengubah output red, green, dan blue yang dihasilkan pada color_rom_vhd menjadi sebuah sinyal, dan kemudian memasukkannya kepada VGA sebagai array yang memiliki nilai sesuai dengan warna tersebut, sehingga warna yang dimaksud dalam color_rom_vhd dapat ditampilkan pada layar.

Bagian ini adalah pendeklarasian entitas dari display_vhd itu sendiri. Dapat kita lihat seluruh output dari bagian ini berfungsi untuk dimasukkan pada VGA, sebagai input warna merah, hijau dan biru untuk VGA. Namun yang harus diamati dari bagian ini adalah keberadaan i_clk dan i_jump. Keduanya adalah input yang dibutuhkan pada tingkat color_rom_vhd. Akan tetapi karena display_vhd adalah yang menghubungkan color_rom_vhd dengan top_level entity, maka input tersebut harus juga ada pada display_vhd agar input tersebut bisa dibaca oleh top_level dan juga dapat mempengaruhi sikap color_rom_vhd.

Ini adalah bagian yang mendeklarasikan semua sinyal yang digunakan pada bagian ini. Hampir semua dari sinyal ini adalah penampung sementara nilai dari color_rom_vhd yang diperlukan baik dalam top_level maupun pada modul VGA. Karena

nilainya tidak dapat dimasukkan secara langsung, maka harus ada variabel penampung pada display_vhd ini sehingga banyak sinyal yang harus dideklarasikan.

VGA harus dimasukkan sebagai komponen dari display_vhd ini, karena semua input VGA ini berasal dari display_vhd. Oleh karena itu VGA harus dijadikan komponen dari display_vhd, yang bagian-bagiannya telah ditentukan sejak awal ( diberikan pada panduan praktikum ) yang setiap bagiannya berfungsi untuk memberikan tampilan pada layar, sesuai dengan sinyal warna yang diberikan pada color_rom_vhd.

Kemudian dilakukan Port Map untuk modul vga. Disini semua input dan output dari vga di assign sementara ke dalam sinyal perantara. Dan satu hal yang perlu diperhatikan adalah bahwa o_red, o_green, dan o_blue adalah hal yang berbeda dengan yang ada pada color_rom_vhd karena ini adalah port map untuk vga. Sementara untuk yang dari color_rom_vhd akan di assign pada bagian berikutnya.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB7

Page 8: Designing Digital Sequence Project

Ini adalah bagian Port Map dari color_rom_vhd. Dapat dilihat bahwa output red, green, dan blue dari color_rom_vhd ini di assign ke dalam sinyal lain yang nantinya akan digunakan pada bagian display_vhd ini.

Variabel red, green, dan blue_color yang nilainya didapat dari bagian color_rom_vhd kemudian di assign ke dalam sinyal sementara bernama red, green, dan blue untuk mempermudah proses pengeluaran warna yang akan diatur pada bagian berikutnya dari program ini.

Bagian Process ini mengatur pewarnaan layar. Dimana pada saat sinyal untuk masing-masing warna menyala atau bernilai ‘1’, maka nilai VGA dari masing-masing warna akan di assign dengan kode biner dari warna tersebut, yang nilainya telah ditetapkan pada bagian sebelumnya. Jadi secara singkat, kerja dari display_vhd ini adalah menyambungkan output warna yang dihasilkan oleh color_rom_vhd untuk ditampilkan pada modul VGA.Untuk modul VGA tidak akan dijelaskan terlalu jauh karena secara keseluruhan file vga.vhd masih persis sama dengan yang diberikan pada panduan praktikum. Modul VGA ini adalah yang bertugas untuk merealisasikan output warna yang diatur dalam color_rom_vhd ke dalam layar.

Berikutnya akan dijelaskan mengenai bagian yang menjadi bagian utama sekaligus menyatukan semua bagian dari program ini menjadi satu, yaitu top_level_vhd. Bagian ini layaknya sebuah main dari suatu program dimana semua elemen yang terkandung dalam program tersebut, dideklarasikan kembali pada bagian ini. Adapun penjelasannya akan dijelaskan setelah ini.

4.4. ANALISIS TOP_LEVEL_VHD

Pada bagian sebelumnya telah diulas sedikit mengenai fungsi dari bagian top_level_vhd. Oleh karena itu akan langsung dianalisis satu per satu mengenai bagian top_level_vhd ini.

Ini adalah bagian pendeklarasian entitas dari top_level_vhd itu sendiri. Secara umum bagian-bagiannya adalah yang digunakan untuk menampilkan sesuatu pada layar. Akan tetapi ada yang ditambahkan yaitu i_jump. I_jump sendiri adalah suatu input yang diharapkan dapat memberikan masukan kepada color_rom_vhd yang nantinya akan menyebabkan kotak merah melompat. Oleh karena i_jump berhubungan langsung dengan hardware ( tombol switch ataupun push) maka harus dideklarasi pada bagian top_level_vhd.

Oleh karena pemrograman pada top_level_vhd membutuhkan bagian-bagian dari display_vhd, maka display_vhd itu

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB8

Page 9: Designing Digital Sequence Project

sendiri dijadikan komponen pada top_level_vhd. Yang perlu ditambahkan cukup display_vhd saja karena color_rom_vhd dan modul vga telah ditambahkan kepada display_vhd ini, sehingga tidak perlu lagi menambahkan keduanya. Kurang lebih demikianlah tugas dari display_vhd ini. Akan tetapi dapat dilihat bahwa input i_jump masih tetap disertakan karena nantinya akan ditransfer melalui display_vhd kepada color_rom_vhd.

Pada bagian ini bagian dari display_vhd di assign kepada bagian-bagian output dari top_level_vhd ini yang nantinya akan disambungkan dengan pin planner, yang assignmentnya telah disediakan oleh panduan praktikum. Dapat dilihat bahwa terdapat dua buah i_jump pada bagian ini. Agar tidak terjadi kebingungan, i_jump yang awal adalah bagian dari komponen display_vhd, yang akan di assign ke dalam input dari top_level_vhd yang kebetulan bernama sama yaitu i_jump.Demikian adalah penjelasan analisis per bagian dari program kami, berikut akan dijabarkan analisis secara menyeluruh dari program ini.

4.5. ANALISIS MENYELURUH

Secara umum proses mengalirnya data serta perintah pada program ini adalah sebagai berikut :

Gambar 4.5.1 Diagram alur proses transfer data dalam program secara umum. Sumber : dokumentasi pribadi

Berhubunga kami tidak menggunakan FSM, maka CLOCKDIV hanya menjadi bagian dari color_rom_vhd karena hanya disanalah terjadi suatu pengulangan ataupun perilaku sekuensial yang nantinya akan menghasilkan animasi. CLOCKDIV akan menjadi ‘waktu’ bagi pengulangan yang terjadi pada color_rom_vhd. Kemudian output yang dihasilkan oleh color_rom_vhd akan diintegrasikan dengan modul vga oleh display_vhd, kemudian display_vhd akan menjadi komponen dari top_level_vhd yang akan berhubungan langsung dengan pin planner ke FPGA yang digunakan.Demikian adalah analisis dari alur perpindahan informasi dari tiap-tiap bagian dari program kami.Secara keseluruhan program kami telah berjalan dengan cukup baik. Adapun beberapa hal yang perlu diperhatikan antara lain :a. Masih belum memanfaatkan fungsi Finite State Machine sehingga dalam pengoperasian statenya masih dilakukan secara primitif sehingga sangat rentan.b. Untuk kondisi tabrakan, belum berhasil membuat game berhenti setelah kedua kotak tabrakan. Melewatkan sifat bahasa VHDL yang bekerja secara paralel sehingga kondisi tabrakan hanya terjadi sebentar dan sepersekian detik meskipun masih dapat diamati oleh mata.c. Sehubungan dengan keadaan yang sebelumnya, reset dari program ini juga belum berjalan sehingga jika FPGA tidak dimatikan, program akan terus berjalan.d. Input yang sangat dibutuhkan untuk membuat game ini menjadi interaktif belum berhasil dimasukkan.

Adapun analisis yang lebih lanjut mengenai ketidakmasukan input untuk lompat pada program ini membawa kami ke dalam beberapa hipotesis yang mungkin menjadi penyebab tidak masuknya input :

1. Kesalahan pada logika jump pada color_rom_vhdAkan tetapi hipotesis ini terbukti tidak benar karena kami telah mencobanya dengan membuat waveform dalam logika yang

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB9

CLOCKDIV VGA

COLOR_ROM

DISPLAY

TOP_LEVEL

Page 10: Designing Digital Sequence Project

sederhana, sinyal jump tetap tidak terbaca. Jadi memang inputnya tidak masuk, akan tetapi tidak menutup kemungkinan bahwa memang kesalahan ada pada logika.

2. Kesalahan pada assignment pada Pin plannerPin planner dilakukan secara otomatis oleh file yang telah disediakan pada panduan praktikum. Ada kemungkinan assignment nya mengalami error sehingga ada pin yang tidak terhubung, ataupun salah pembuatan nama untuk memakai pin yang telah ada.

3. Terdapat kesalahan dalam sambung menyambung input i_jump.Dapat kita amati bahwa untuk memasukkan input i_jump ke color_rom_vhd, input tersebut harus disambung menyambung dari satu file ke file lain, sehingga tidak tertutup kemungkinan kami melakukan kesalahan pada saat berusaha menyambungkannya dari file display, ataupun dari top_level_vhd-nya.

5. KESIMPULAN

Ada banyak penerapan VHDL yang dapat kita gunakan dalam kehidupan sehari-hari. Salah satu diantaranya adalah game interaktif yang dapat menghibur manusia.Dalam membuat suatu proyek rangkaian digital yang baik diperlukan perencanaan yang matang dan juga eksekusi yang baik. Tidak cukup hanya bermodal niat tetapi juga harus disertai dengan kerja keras dan pengetahuan yang mumpuni.Secara keseluruhan kami telah menghasilkan karya yang cukup baik meskipun jauh dari sempurna. Akan tetapi setelah mengerjakan proyek ini kami telah lebih memahami mengenai proses pembuatan proyek maupun pola pikir dari perancangan digital dengan pendekatan sekuensial.

6. DAFTAR PUSTAKABrown, Steven dan Varesnic, Zvonko. 2005. Fundamental Of Digital Logic with VHDL Design.Hutabarat, Mervin, dkk, Modul Praktikum

Sistem Digital, Institut Teknologi Bandung, Bandung, 2012

Laporan Praktikum - Laboratorium Dasar Teknik Elektro – STEI ITB10