Pengikut

© Abikindo | Design by Kannan | ^TOP^

New post

TEMPLATE MATCHING

Pengertian

Template matching adalah sebuah teknik dalam pengolahan citra digital untuk menemukan bagian-bagian kecil dari gambar yang cocok dengan template gambar. Template matching merupakan salah satu ide yang digunakan untuk menjelaskan bagaimana otak kita mengenali kembali bentuk-bentuk atau pola-pola. Template dalam konteks rekognisi pola menunjuk pada konstruk internal yang jika cocok (match ) dengan stimulus penginderaan mengantar pada rekognisi suatu objek. Atau pengenalan pola terjadi jika terjadi kesesuaian antara stimulus indera dengan bentuk mental internal. Gagasan ini mendukung bahwa sejumlah besar template telah tercipta melalui pengalaman hidup kita. Tiap-tiap template berhubungan dengan suatu makna tertentu.
Contoh proses identifikasi bentuk geometri :
Energi cahaya yang terpancar dari suatu bentuk mengena pada retina mata dan diubah menjadi energi neural yang kemudian dikirim ke otak. Selanjutnya terjadi pencarian di antara templatetemplate yang ada. Jika sebuah template ditemukan sesuai (match ) dengan pola tadi, maka subjek dapat mengenal bentuk tersebut. Setelah kecocokan antara objek dan template terjadi, proses lebih lanjut dan interpretasi terhadap objek bisa terjadi.
Teori Template matching memiliki keunggulan dan kelemahan, yaitu :
Keunggulan :
(1) Jelas bahwa untuk mengenal bentuk, huruf atau bentuk-bentuk visual lainnya diperlukan kontak dengan bentuk-bentuk internal.
(2) Template matching adalah prosedur pengenalan pola yang sederhana yang didasarkan pada ketepatan konfigurasi informasi penginderaan dengan “konfigurasi” pada otak. (Contohnya : barcode)
Kelemahan :
Jika perbandingan eksternal objek dgn internal objek 1:1, maka objek yang berbeda sedikit saja dengan template tidak akan dikenali. Oleh karena itu, jutaan template yang spesifik perlu dibuat agar cocok dengan berbagai bentuk geometri yang kita lihat dan kenal. Jika memang penyimpanan memori di otak seperti ini, otak tentu seharusnya sangat kewalahan dan pencarian informasi akan memakan waktu, padahal pada kenyataannya tidak demikian.
    Template Matching dapat dibagi antara dua pendekatan, yaitu : pendekatan berbasis fitur dan pendekatan berbasis template. Pendekatan berbasis fitur menggunakan fitur pencarian dan template gambar seperti tepi atau sudut, sebagai pembanding pengukuran matrik untuk menemukan lokasi template matching yang terbagus di sumber gambar.

Pendekatan Berbasis Fitur

Sebuah pendekatan berbasis fitur dapat dianggap; pendekatan dapat membuktikan lebih berguna, jika template gambar memiliki fitur yang kuat jika pencocokan di pencarian gambar bisa diubah dengan cara tertentu. Karena pendekatan ini tidak mempertimbangkan keseluruhan dari template gambar, komputasi dapat lebih efisien ketika bekerja dengan sumber gambar beresolusi lebih besar, sebagai pendekatan alternatif, berbasis template, mungkin memerlukan pencarian titik – titik yang berpotensi untuk menentukan lokasi pencocokan yang terbaik.

Pendekatan Berbasis Template

    Untuk template tanpa fitur yang kuat, atau ketika sebagian besar template gambar merupakan gambar yang cocok, sebuah pendekatan berbasis template mungkin efektif. Seperti disebutkan di atas, karena berbasis template, template matching berpotensi memerlukan sampling dari sejumlah besar poin, untuk mengurangi jumlah sampling poin dengan mengurangi resolusi pencarian dan template gambar oleh faktor yang sama dan melakukan operasi pada perampingan gambar yang dihasilkan (multiresolusi, atau piramida, pengolahan citra), menyediakan pencarian titik data dalam pencarian gambar sehingga template tidak harus mempunyai pencarian titik data, atau kombinasi keduanya.

Motion dan Oklusi

    Dalam kasus di mana template tidak dapat memberikan pencocokan langsung, mungkin lebih cocok untuk menerapkan penggunaan eigenspaces – template objek yang lebih detail yang sesuai dengan sejumlah kondisi yang berbeda, seperti berbagai perspektif, iluminasi, warna kontras, atau objek yang cocok diterima "pose". Misalnya, jika pengguna mencari seraut wajah, eigenspaces dapat terdiri dari gambar (template) wajah dalam posisi yang berbeda ke kamera, dalam kondisi pencahayaan yang berbeda, atau dengan ekspresi yang berbeda.
Hal ini juga memungkinkan gambar yang cocok untuk menjadi dikaburkan, atau oklusi oleh obyek, dalam kasus ini, memungkinkan untuk menyediakan banyak template untuk menutupi kemungkinan setiap oklusi. Dalam kasus di mana objek lunak atau poseable, motion juga menjadi masalah, dan masalah yang melibatkan motion dan oklusi menjadi ambigu. Dalam kasus ini, salah satu solusi yang mungkin adalah membagi template gambar ke dalam beberapa sub-foto dan melakukan pencocokan pada setiap subdivisi.

Pencocokan berbasis Template dan konvolusi

    Sebuah metode dasar template matching menggunakan konvolusi bayangan (template), disesuaikan dengan fitur tertentu dari template matching, yang ingin kita deteksi. Teknik ini dapat dengan mudah dilakukan pada gambar abu-abu atau tepi gambar. Hasil konvolusi akan di tempat tertinggi di mana struktur gambar sesuai dengan struktur bayangan, di mana nilai-nilai gambar besar dapat dikalikan dengan nilai-nilai bayangan besar.
Metode ini biasanya diimplementasi dengan terlebih dahulu memilih sebuah bagian dari pencarian gambar untuk digunakan sebagai template: Kita akan memanggil pencarian gambar S (x, y), dimana (x, y) mewakili koordinat setiap pixel dalam pencarian gambar. Kita akan memanggil template T (x t, y t,), dimana (x t, t y) merupakan koordinat dari setiap pixel dalam template. Kemudian kita hanya memindahkan pusat (atau asal) dari template T (x t, x t,) atas setiap titik (x, y) dalam pencarian gambar dan menghitung jumlah produk antara koefisien dalam S (x, y) dan T (x t, y t,) atas seluruh wilayah dari template. Karena semua kemungkinan posisi dari template yang berkenaan dengan pencarian gambar dianggap posisi terbaik. Metode ini kadang-kadang disebut sebagai 'Linear Spasial Filtering' dan template disebut masker penyaring.

Mempercepat Proses

Di masa lalu, tipe spasial filtering biasanya hanya digunakan dalam solusi hardware khusus karena kompleksitas komputasi operasi, namun kita dapat mengurangi kompleksitas ini dengan penyaringan dalam domain frekuensi dari gambar itu, disebut sebagai ' frekuensi domain filtering', hal ini dilakukan melalui penggunaan teorema konvolusi.
Cara lain untuk mempercepat proses pencocokan adalah melalui penggunaan dari suatu gambar piramida. Ini adalah serangkaian gambar, pada skala yang berbeda, yang terbentuk dengan berulang kali menyaring dan subsampling gambar asli agar menghasilkan gambar resolusi berkurang berurutan. Gambar resolusi lebih rendah dapat dicari untuk template (dengan mengurangi resolusi yang sama), untuk menghasilkan posisi semula yang memungkinkan untuk mencari pada skala yang lebih besar. Foto yang lebih besar kemudian dapat dicari dalam jendela kecil di sekitar posisi mulai menemukan lokasi template terbaik. Metode lain yang dapat menangani masalah seperti ini antara lain terjemahan, skala dan rotasi gambar.

Implementasi

Dalam implementasi sederhana ini, diasumsikan bahwa metode yang dijelaskan di atas diterapkan pada gambar abu-abu: karena abu-abu digunakan sebagai intensitas piksel.

minSAD = VALUE_MAX;

// loop through the search image
for ( int x = 0; x <= S_rows - T_rows; x++ ) {
    for ( int y = 0; y <= S_cols - T_cols; y++ ) {
        SAD = 0.0;

    // loop through the template image
    for ( int i = 0; i < T_rows; i++ )
        for ( int j = 0; j < T_cols; j++ ) {

                pixel p_SearchIMG = S[x+i][y+j];

                pixel p_TemplateIMG = T[i][j];

                SAD += abs( p_SearchIMG.Grey - p_TemplateIMG.Grey );
            }
    }

        // save the best found position
    if ( minSAD > SAD ) {
        minSAD = SAD;
            // give me VALUE_MAX
        position.bestRow = x;
        position.bestCol = y;
        position.bestSAD = SAD;
    }
}

Salah satu cara untuk melakukan template matching pada gambar warna adalah dengan menguraikan piksel ke dalam komponen warna mereka dan mengukur kualitas pertandingan antara warna template dan pencarian gambar dengan menggunakan jumlah SAD dihitung secara terpisah untuk setiap warna.

Contoh Aplikasi
“PENGGUNAAN METODE TEMPLETE MATCHING UNTUK IDENTIFIKASI KECACATAN PADA PCB”

Penerapan metode template matching pada identifikasi kecacatan PCB dapat dilakukan dengan langkah utama sbb:
1. Pengepasan posisi: Dilakukan dengan mencuplik 80% area citra untuk mendapatkan posisi ideal.
2. Hitung nilai korelasi silang : Untuk mengklasifikasikan suatu citra PCB adalah baik dan tanpa cacat sedikitpun, maka nilai korelasi adalah 1 dan cacat total maka nilai korelasinya adalah -1. Rumus yang digunakan adalah :

Dengan :

3. Deteksi akhir : Dari nilai korelasi yang didapat, nilai tersebut kemudian di konversikan dalam rentang 0 sampai 255 pada channel red untuk digambarkan dalam bentuk segiempat pada titik koordinat citra PCB yang mengalami cacat.
Prinsip metode ini adalah membandingkan antara image objek yang akan dikenali dengan image template yang ada. Image objek yang akan dikenali mempunyai tingkat kemiripan sendiri terhadap masing-masing image template.
Pengenalan dilakukan dengan melihat nilai tingkatkemiripan tertinggi dan nilai batas ambang pengenalan dari image objek tersebut. Bila nilai tingkat kemiripan berada di bawah nilai batas ambang maka image objek tersebut dikategorikan sebagai objek tidak dikenal.
Selanjutnya untuk dapat mengimplementasikan metode templete matching maka perlu dilakukan sejumlah operasi pengolahan citra digital, antara lain:
•    Penapisan Citra (Filtering) : dilakukan bila citra yang akan dianalisis memiliki derau sehingga perlu dihaluskan dengan tapis citra. Perancangan tapis dengan memanipulasi piksel-piksel tetangga membuat citra lebih halus, bentuk sudut, dan tepi citra tetap terjaga. Pada proses perekaman citra digital dapat terjadi gangguan yang bersifat frekuensi rendah, dimana terjadi proses pemerataan intensitas cahaya pada suatu titik sampel dengan titik-titik tetangganya. Gangguan lain yang sering terjadi pada proses perekaman citra digital adalah terjadinya gangguan berbentuk garis-garis akibat adanya kerusakan pada sebagian detektor sensor. Juga sering dijumpai gangguan lain dalam bentuk bercak hitam yang acak.
•    Pengambangan (Tresholding) : digunakan untuk mengubah citra dengan format keabuan yang mempunyai nilai lebih dari dua ke format citra biner yang hanya memiliki dua nilai (0 atau 1). Dalam hal ini titik dengan rentang nilai keabuan tertentu diubah menjadi warna hitam dan sisanya menjadi warna putih atau sebaliknya.
Aplikasi yang akan dibangun adalah sebuah simulasi sederhana untuk proses AOI (Automated Optical Inspection), dalam hal ini diasumsikan PCB master dan PCB input deteksi telah tersedia dalam bentuk file bitmap.
Secara umum implementasi dari identifikasi kecacatan PCB dengan menggunakan metode Templete Matching ini dapat digambarkan sebagaimana pada Gambar 1. Pada Gambar 1 tersebut :
• Grayscale digunakan untuk merubah citra warna menjadi citra keabuan.
• Median Filter : Digunakan untuk melakukan proses penapisan jika citra dianggap masih mengandung derau.
• Batas Ambang : Digunakan untuk mengatur tingkat proses pengambangan pada citra


Gambar 1 Penerapan Templete Matching pada Identifikasi Cacat PCB
Pada penelitian sejenis, umumnya output dari penggunaan templete matching adalah berupa prosentase kemiripan antara image master dengan image input. Untuk permasalahan identifikasi kecacatan pada PCB ini, maka outputnya adalah posisi blok pada PCB input yang tidak sesuaidengan PCB master. Posisi blok itulah yang diidentifikasi terdapat kecacatan.
Pada penelitian ini dilakukan upaya untuk mendeteksi kecacatan pada PCB RAM. Dalam hal ini digunakan dua buah model PCB, yaitu PCB acuan (master) dan PCB RAM yang cacat. Aplikasi akan berusaha untuk mendeteksi kecacatan yang terjadi dalam bentuk output yang menunjukkan letak titik kecacatan pada PCB RAM tersebut. Masing-masing PCB yang digunakan adalah sebuah citra berkarakteristik bitmap.
Sebelum digunakan sebagai acuan pada pada proses templete matching ini,maka PCB master terlebih dahulu dibuatkan model grayscalenya. Pembentukan model grayscale ini dilakukan setelah sebelumnya menerapkan pemrosesan penapisan dan pengambangan citra. Gambar 2 menunjukkan pola grayscale dari PCB master.
Hal yang serupa juga dilakukan pada model PCB yang akan diidentifikasi. Gambar 3 menunjukkan pola PCB masukan yang siap diidentifikasi. Terlihat secara sekilas antara dua pola gambar tersebut tidak nampak perbedaan. Dengan demikian apabila inspeksi kecacatan dilakukan secara manual maka tidak akan mudah terdeteksi.
Setelah dua buah citra tersebut diproses dengan menggunakan aplikasi templete matching, maka terlihat hasil identifikasinya berupa lokasi dimana terdapat ketidak cocokan pola dan diasumsikan bahwa pada lokasi tersebut terdapat kecacatan PCB.Dalam hal ini titik-titik yang dianggap cacat karena tidak sesuai dengan citra pada master akan ditandai dengan blok korelasi berwarna merah dimana ukuran blok korelasi tersebut telah ditentukan sebelumnya oleh user. Gambar 4 menunjukkan output hasil template matching pada PCB input. Pada Gambar 4 tersebut terlihat adanya blok korelasi pada titik yang dianggap cacat karena memiliki kesalahan berupa putusnya jalur sirkuit PCB.


Gambar 2 Pola Grayscale PCB Master












Gambar 3 Pola PCB Yang siap diidentifikasi











Gambar 4 Hasil Identifikasi Kecacatan Pada PCB

Dalam penelitian ini PCB master dan PCB input diasumsikan telah tersedia dalam bentuk file bitmap. Proses penting untuk mendapatkan kedua jenis file tersebut adalah tahap pemindaian / scanning. Bila proses ini tidak dilakukan dengan teliti akan berakibat pada proses deteksi kecacatan yang tidak akurat.

FPGA dan CPLD

Pengertian FPGA



Field-Programmable Gate Array (FPGA) adalah komponen elektronika dan semikonduktor yang mempunyai komponen gerbang terprogram (programmable logic) dan sambungan terprogram. Komponen gerbang terprogram yang dimiliki meliputi jenis gerbang logika biasa (AND, OR, XOR, NOT) maupun jenis fungsi matematis dan kombinatorik yang lebih kompleks (decoder, adder, subtractor, multiplier, dll). Blok-blok komponen di dalam FPGA bisa juga mengandung elemen memori (register) mulai dari flip-flop sampai pada RAM (Random Access Memory).
Field Programmable dapat diartikan bahwa FPGA ini bersifat dapat dirancang sesuai dengan keinginan dan kebutuhan user/pemakai tanpa melalui tahap “burn” di laboratoruim atau di “hardware” oleh pabrik piranti. Sedangkan Gate Array artinya bahwa FPGA ini terdiri atas gerbang-gerbang digital dimana interkoneksi masing-masing gerbang tersebut dapat dikonfigurasikan antara satu sama lainnya.
Secara umum FPGA akan lebih lambat jika dibandingkan dengan jenis chip yang lain seperti pada chip Application-Specific Integrated Circuit (ASIC). Hal ini karena FPGA menggunakan power/daya yang besar bentuk desain yang kompleks.
                                


                                                                    Gambar FPGA

Sejarah FPGA

FPGA ini dikembangkan sejak tahun 1984 oleh perusahaan Xilinc yang berbasis di San Jose, CA. Perkembangan selanjutnya, FPGA ini mulai diproduksi oleh beberapa perusahaan misalnya, Altera, Lattice, dan Quicklogic. Diantara perusahaan-perusahaan tersebut, terdapat 2 perusahaan yang mendominasi produksi FPGA di seluruh dunia yaitu Xilinx dan Altera. Altera merupakan pemain kedua terkenal di dunia FPGA, terkenal dengan namanya. Sementara itu Lattice, Actel, dan Quicklogic merupakan perusahaan-perusahaan yang lebih kecil dan punya “pasar khusus”.
Awal mula dari adanya FPGA ini tidak lepas dari adanya alat elektronik, yaitu transistor. Transistor merupakan alat semikonduktor yang dipakai sebagai penguat, sebagai komponen pemutus dan penyambung(switching), dan stabilisasi tegangan. Pada umumnya, transistor ini berfungsi sebagai saklar arus listrik yang hendak masuk ke suatu rangkaian elektronik.
Perkembangan selanjutnya, adalah munculnya IC (Integrated Circuit) sekitar tahun 1950-an. Komponen elektronik ini lebih dikenal sebagai otak dari sebuah peralatan elektronika seperti televisi, handphone, computer, dsb. Kemudian berturut-turut muncul komponen lain, seperti DRAM, SRAM, microprocessor, ASIC hingga sampai pada FPGA.

Cara kerja FPGA

Bila dilihat dari segi bentuknya, FPGA tak berbeda jauh dengan bentuk IC-IC lainnya. Hanya saja, bila dilihat dari isinya FPGA memiliki bagian yang berbeda dengan komponen IC pada umumnya. Berikut isi dari FPGA pada umumnya:
1.    Configure Logic Blocks (CLB). Bisa dikatakan, bagian inilah yang akan          memproses segala bentuk rangkaian logika yang dibuat oleh user/pemakai.
2.    I/O Blocks. Sebagai interface antara external pin dari device dan internal user logic
3.    Programmable Interconnect. Bagian ini berisi wire segments dan programmable switches, selain itu bagian ini juga akan menghubungkan antara CLB satu dengan CLB lainnya.



                                                      Gambar isi FPGA buatan xilinx

Sebuah FPGA tersusun dari sebuah bagian yang bernama “logic-cell” (Logic Blocks), yang kemudian pada perkembangannya saling terhubung satu sama lain. Kumpulan-kumpulan dari logic cell ini berjumlah ratusan bahkan ribuan dan membentuk sauatu fungsi yang kompleks. Sebuah logic cell pada dasarnya terdiri atas sebuah lookup table(LUT), D flip-flop, dan sebuah multiplekser 2 ke 1.


                                                                  Gambar Isi Logic Cell

1.    Look Up Table (LUT) merupakan sejenis RAM (Random Acces Memory) yang berkapasitas kecil. Di dalam FPGA, LUT ini memegang peranan penting dalam proses implementasi fungsi-fungsi logika. Selain itu, LUT ini berciri khas memiliki input sejumlah 4 buah.
2.    D Flip Flop. Seperti yang diketahui, flip-flop (Bistable Multivibrator) dalah suatu rangkaian sel biner yang memiliki dua buah output yang saling berkebalikan keadaannya (0 atau 1). Di dalam FPGA, terdapat sebuah jenis flip-flop yaitu D flip-flop atau Data flip flop. Rangkaian D flip-flop ini berfungsi sebagai rangkaian logika sekuensial dimana di dalamnya terdapat peralatan memori dan pewaktu.
3.    Multiplekser 2 ke 1. Sebuah multipleser adalah piranti digital yang bekerja sebagai switch (saklar) yang menghubungkan data dari n masukkan ke sebuah keluaran. Multiplekser berfungsi untuk memilih beberapa input untuk hanya menjadi 1 output saja. Di dalam FPGA, terdapat rangkaian multiplekser 2 ke 1 yang artinya, multiplekser tersebut memiliki 2 buah input dan 1 buah output.

Setiap logic cell tersebut dapat dihubungkan dengan logic cell lainnya melalui jalur/koneksi yang ada. Setiap cell hanya mampu bekerja secara sederhana dan ringkas, Namun bila antara satu cell saling terhubung satu sama lain sebuah fungsi-fungsi logika yang kompleks pun dapat terbentuk.



                                            Gambar Logic Cell yang Terhubung satu sama lain

Suatu ketika ingin mengimplementasikan rangkaian sederhana, misalnya rangkaian Full Adder ke dalam FPGA. Seperti yang diketahui, rangkaian full adder biasanya terdiri atas gerbang logika AND, gerbang logika OR dan gerbang logika XOR. Lalu bagaimana proses implementasinya ke dalam FPGA? Bahwa telah disebutkan bahwa setiap FPGA terdiri atas ratusan bahkan ribuan logic cell. Rangkaian Full Adder tadi akan didownload ke dalam FPGA untuk menempatkan masing-masing bagian dari Full Adder ke dalam logic cell. Kemudian antara satu logic cell yang satu dengan yang lain saling terhubung melalui jalur interkoneksi membentuk fungsi logika layaknya seperti rangkaian full adder.

                                            Gambar Logic Cell yang Terhubung satu sama lain

Hal yang sama juga terjadi pada rangkaian-rangkaian rumit lainnya seperti rangkaian jam digital, scan key, dsb. Sebagai tambahan untuk tujuan jalur interkoneksi antar cell, FPGA memiliki jalur penghubung singkat diantara cell-cell yang saling berdekatan. Tipe jalur interkoneksi ini sering disebut “carry chains”. Carry chains berfungsi dalam pembuatan fungsi-fungsi logika agar dapat berjalan dengan efisien (minim penggunaan dan tingkat operasi yang tinggi).


                               Gambar Logic Cell yang Terhubung satu sama lain denga cary chains

Dengan demikian, dalam menggunakan cary chains apabila rangkaian yang hendak diimplementasikan ke dalam FPGA adalah rangkaian digital yang sederhana, maka logic cell yang digunakan pun akan minimun dan memiliki lokasi yang saling berdekatan satu sama lain. Hal yang sebaliknya pun berlaku. Sehingga penggunaan logic cell di dalam FPGA akan efektif dan efisien.

Konfigurasi FPGA

Sebuah FPGA (Field Programmable Gate Array) dapat terbagi atas dua kondisi yaitu kondisi awal (configuration mode) dan kondisi pemakai (user mode). Ketika pertama kali FPGA dihidupkan, maka otomatis keadaan FPGA ini berada dalam kondisi awal. Hal ini disebabkan karena FPGA masih dalam keadaan awal, fresh dan belum terdapat suatu program apa pun di dalamnya. Untuk menggunakan FPGA tersebut maka perlu adanya proses download program oleh pemakainya (user). Proses mendownload program ke dalam FPGA bertujuan untuk mengirimkan berkas-berkas bilangan biner (0 dan 1) melalui beberapa pin khusus. Setelah proses download dilakukan dan FPGA kemudian telah siap digunakan, maka inilah yang sering disebut kondisi pemakai. Pada kondisi ini FPGA telah aktif dan program yang didownload ke dalamnya dapat digunakan. Inilah yang dinamakan konfigurasi atau pengaturan pada FPGA.
Bila pada kondisi pemakai, maka otomatis di dalam FPGA telah terdapat program. Program tersebut dibuat, diuji dan disimulasikan dahulu menggunakan PC (komputer). Setelah itu baru proses download program dilakukan. Pada umumnya terdapat 3 cara yang biasa digunakan untuk mendownload program ke dalam FPGA yaitu :
1.    Pemakai dapat mendownload langsung program ke dalam FPGA menggunakan kabel yang disambungkan ke PC. Program tersebut dibuat dan diolah menggunakan PC (komputer) dan ketika siap digunakan, baru didownload ke FPGA melalui kabel.
2.    Pemakai dapat menggunakan microkontroller pada board yang ada, dengan firmware yang cukup guna mengirimkan data ke dalam FPGA.
3.    Pemakai dapat menggunakan “boot-PROM” pada board yang ada, yang dihubungkan ke FPGA, dan mengatur FPGA tersebut supaya secara otomatis bekerja tanpa proses download dulu ke dalamnya (Perusahaan-perusahaan FPGA pada umumnya memiliki spesifikasi khusus untuk tambahan boot-PROMS).

Dari ketiga cara di atas, cara pertama adalah yang paling sering dan banyak digunakan. Selain itu, cara pertama cukup mudah dan efisien untuk dilakukan. Jadi, ketika pemakai telah mendownload program ke dalam FPGA maka tidak lagi diperlukan PC (komputer). FPGA akan bekerja sesua dengan program yang telah didownload ke dalamnya tanpa perlu lagi terhubung dengan PC (komputer).

Pin FPGA

Pada umumnya, bentuk sebuah FPGA tergantung pada vendor pembuatnya. Masing-masing vendor memiliki ciri khas untuk setiap FPGA ciptaannya. Misalkan saja vendor Xilinx dengan produknya yang terkenal yaitu Spartan dan Virtex. Atau vendor Altera dengan FPGA buatannya yakni Cyclone dan Stratix. Masing-masing dari jenis FPGA tersebut memiliki ciri khas dan keistimewaan tersendiri. Hal tersebut juga nampak pada jumlah pin/kaki yang pada masing-masing FPGA tersebut.
Secara umum, pin FPGA terbagi atas 2 jenis yaitu : pin asli (dedicated pins) dan pin untuk pengguna (user pins). Dari kedua jenis pin. Tersebut, hampir sekitar 20% s/d 30% pin pada FPGA termasuk jenis pin asli (dedicated pins). Jenis dedicated pins ini mengandung arti bahwa pin ini memang sengaja diciptakan vendor pembuat FPGA dengan tujuan tertentu. Selain itu, jenis pin ini dapat dikategorikan menjadi beberapa golongan :
•    Power pins, Pin untuk daya atau pin untuk ground
•    Configuration pins, Pin yang digunakan untuk download FPGA
•    Clock pins, Pin ini digunakan untuk menghasilkan sinyal detak (clock) yang nantinya akan mengendalikan keseluruhan proses yang terjadi dalam FPGA.
User Pins
Sebagian besar pin yang ada dalam FPGA adalah jenis user pins. Jenis pin ini diciptakan vendor dengan tujuan menciptakan keleluasaan atau kebebasan bagi para pengguna FPGA untuk menentukan sendiri mana pin yang hendak dipakai. Nama yang lazim atau sering digunakan untuk pin jenis ini adalah pin I/O, yang artinya pin output-input. Jenis pin ini nantinya bisa diatur oleh pengguna sesuai keingginan dan kepentingannya. Selain itu, jenis pin juga bisa dijadikan input dan output untuk rangkaian yang dibuat oleh pengguna FPGA tersebut. Nantinya, jenis pin ini akan terhubung dengan IO cell di dalam FPGA. Perlu diketahui, IO cell ini diberi daya tegangan oleh pin VCCIO (termasuk jenis power pins). Seperti yang telah dijelaskan, isi FPGA terdiri atas 3 bagian yaitu Configure Logic Blocks (CLB), I/O Blocks, dan Programmable Interconnect. Jenis User pins ini akan terhubung pada I/O Blocks.
IO Banks
Salah satu jenis dedicated pins pada FPGA adalah power pins. Pada umumnya, sebuah FPGA memiliki beberapa pin yang sering dinamakan VCCIO (termasuk jenis power pins) yang semuanya tersebut, terhubung ke sebuah sumber teganan yang sama. Namun, hal tersebut tidak berlaku untuk untuk FPGA generasi yang baru. FPGA jenis ini memiliki sebuah konsep yang dinamakan “user IO banks”. Dalam konsep “user IO banks” pengguna FPGA dapat membagi IO menjadi beberapa kelompok yang masing-masing kelompok memiliki tegangan VCCIO tersendiri. Hal ini menjadikan FPGA dapat berperan sebagai pengubah dan penyalur tegangan. Misalkan saja jika sebuah bagian pada FPGA membutuhkan tegangan 3,3V dan bagian yang lain membutuhkan 2,5V maka dengan konsep “user IO bank” ini, FPGA dapat melakukannya.
FPGA Power
Sebuah FPGA pada umumnya membutuhkan 2 tegangan untuk beroperasi yaitu : tegangan inti (core voltage) dan tegangan IO (IO voltage). Tiap tegangan ini masing-masing memiliki pin yang berbeda satu sama lain.
•    Tegangan inti internal (sering disebut internal core voltage atau VCCINT).
Tegangan ini digunakan sebagai sumber daya pada gerbang-gerbang logika dan flip-flop di dalam FPGA. Besarnya tegangan antara 5V (untuk jenis FPGA lama) s/d 3,3V, 2,5V, 1,8V, 1,5V (untuk jenis FPGA baru). Bahkan tegangannya bisa semakin rendah untuk produk FPGA terbaru. Dengan kata lain, tegangan jenis ini berbeda-beda tergantung FPGA yang digunakan.
•    Tegangan IO (sering disebut IO voltage atau VCCIO)
Tegangan ini digunakan sebagai sumber daya untuk blok-blok IO pada FPGA. Tegangan jenis ini haruslah cocok dan tepat dengan peralatan yang nantinya akan dihubungkan dengan FPGA. Misalkan FPGA akan dihubungkan dengan motor stepper. Dalam hal ini tegangan antara FPGA dengan motor stepper haruslah cocok dan tepat. Inilah yang sering disebut tegangan IO.

Sebenarnya, FPGA sendiri memperbolehkan tegangan yang sama untuk VCCINT dan VCCIO (misalkan, pin untuk VCCINT dan VCCIO dapat saling terhubung bersama). Namun, kemudian cenderung dipisahkan yaitu tegangan rendah untuk inti (core voltage) dan tegangan tinggi untuk IO (IO voltage).
Perlu diingat bahwa penamaan jenis tegangan untuk FPGA masing-masing vendor berbeda. Misalkan saja, tegangan internal sering dinamakan VCC untuk Xilinx dan VCCINT untuk Altera. Sedangkan tegangan IO sering dinamakan VCCO untuk Xilinx dan VCCIO untuk Altera.

CPLD

Arsitektur dasar dari pembuatan CPLD dapat dilihat pada gambar CPLD. Seperti yang terlihat, CPLD terdiri atas beberapa PLD(pada umumnya bertipe GAL) yang dibuat sebagai sebuah kesatuan chip. CPLD juga memiliki matriks pengubah yang berifat programmable yang berfungsi untuk menghubungkan PLD satu sama lain dan juga menghubungkannya dengan pin I/O. Selain itu, CPLD juga memiliki beberapa ciri khas tambahan, seperti:dukungan JTAG, antar muka(interface) untuk daya standar logika yang lain (1,8 V, 2,5 V, 5 V, dsb).
 

                  Gambar Arsitektur  CPLD

Salah satu contoh CPLD adalah XC9500 buatan Xilinx. CPLD jenis ini mengandung n PLD di mana n = 2,4,6,8,12,16.Ttiap-tiap PLD tersebut memiliki arsitektur mirip dengan GAL seri 36V18(mirip seperti arsitektur GAL 16V8, gambar tulisan yang lalu) memiliki 36 input dan 18 output, termasuk 16 input dan 8 output sehingga masing-masing terdapat 18 macrocell.
Beberapa perusahaan pembuat CPLD adalah Altera, Xilinx, Lattice, Atmel, Cypress, dsb. Contoh CPLD buatan dua perusahaan besar, Xilinx dan Altera ditunjukkan pada tabel berikut. Seperti yang terlihat, lebih dari 500 macrocell dan 10.000 gerbang dapat ditemukan pada masing-masing CPLD.

                                                      Tabel spesifikasi CPLD buatan Altera

                                                      Tabel spesifikasi CPLD buatan Xilinx

Perbedaan FPGA dengan CPLD

FPGA berbeda dengan CPLD dari segi arsitektur, teknologi penempatan ruang, dan segi biaya. Selain itu, FPGA lebih ditekankan untuk implementasi sirkuit besar yang kompleks serta memiliki tingkat kegunaan dan kerumitan tinggi.
Arsitektur dasar sebuah FPGA ditunjukkan pada gambar 1. Seperti terlihat, gambar 1 terdiri atas susunan CLB (Configure Logic Blocks) yang saling terhubung dengan susunan switch matrix.


                                                            Gambar 1 Arsitektur FPGA

Arsitektur internal dari CLB FPGA berbeda dengan arsitektur yang terdapat pada PLD. Apa bedanya? Pertama, sebagai ganti dari implementasi ekspresi SOP dengan gerbang AND yang diikuti gerbang OR (seperti terdapat pada SPLD), maka digunakanlah sebuah LUT (lookup table). Kedua, jumlah flip-flop di dalam FPGA lebih banyak daripada di dalam CPLD. Selain itu, FPGA memiliki bentuk sirkuit lebih canggih. Akibatnya, FPGA memungkinkan adanya fungsi sekuensial yang lebih baik dibanding CPLD. Tambahan lagi, FPGA memiliki dukungan JTAG dan antarmuka untuk berbagai tingkat logika yang berbeda. Selain itu, di dalam chip FPGA juga terdapat memori berupa SRAM, beberapa detak (PLL atau DLL), serta antarmuka untuk PCI. Beberapa chip FPGA juga menyertakan tambahan blok, seperti multipliers, DSP, dan microprocessors.
Perbedaan penting lain yang membedakan FPGA dengan CPLD adalah pada ruang penyimpanan interkoneksi. Jika CPLD bersifat non-volatile dan menggunkan antifuse, EEPROM, flash, dsb. maka FPGA menggunakan SRAM, dan itu bersifat volatile. Pendekatan ini mampu menyimpan ruang dan biaya yang lebih rendah dari sebuah chip biasa karena FPGA mampu memberikan interkoneksi bersifat programmable tapi masih membutuhkan ROM eksternal. Namun ada FPGA yang non volatile (dengan menggunakan antifuse) dan lebih menguntungkan ketika pemrograman ulang (reprogrammable) tidaklah dibutuhkan.

Object Oriented-Programming (OOP)

Pengertian

Pemrograman berorientasi obyek atau biasa dikenal dengan sebutan "OOP" merupakan suatu metode pemrograman berdasarkan hirearki kelas yang saling berkaitan. OOP mengikuti model yang sudah ada sesuai dengan kehidupan nyata. Dengan mengikuti paradigma ini jadi suatu entitas atau bagian dari suatu permasalahan merupakan suatu obyek yang didalamnya terdapat gabungan obyek-obyek yang lebih kecil. Sebagai contoh, rumah merupakan sebuah obyek dalam kehidupan nyata. Rumah tersebut juga terbentuk dari beberapa obyek penyusunnya misal lantai, dinding, atap, dll. Jadi rumah merupakan obyek yang tersusun dari obyek-obyek yang lebih kecil yang saling berkaitan satu sama lain.

Kelas

Kelas merupakan suatu struktur atau metode yang mendefinisikan suatu data yang hanya bekerja pada data tersebut. Ketika program ditulis, semua data program dibungkus dalam kelas. Sebagai contoh kelas dari kucing merupakan kelas yang mendefinisikan semua peilaku atau karakteristik dari kucing tersebut. Berikut ini contoh penerapan kelas dalam pemrograman java.

class Coba {
  public static void main(String[] args){
    System.out.println("Ini adalah program halo");
 }
}

Hasil dari program diatas :
Ini adalah program halo

Obyek

Pada dasarnya obyek merupakan dasar dari modularitas dan struktur dalam sebuah program yang berorientasi obyek. Sama seperti hal diatas yang telah disinggung sebelumnya, terdapat obyek utama dalam permasalahannya yang didalamnya terdapat obyek-obyek kecil sebagai penyusunnya. Dalam kehidupan nyata, obyek dapat dilihat dari keadaan dan kelakuan atau karakteristik obyek tersebut. Hal tersebut sama seperti pada bahasa pemrograman. Kita ambil contoh obyek event, obyek ini mewakili peristiwa ketika tombol di-klik atau ditekan.

Polimorfisme

Polimorfisme bisa dikatakan sebagai objek-objek yang bekerja sama membentuk suatu sistem yang saling berkomunikasi untuk menjalankan sistem tersebut. Dalam sebuah program, objek-objek berkomunikasi satu sama lain dengan mengirimkan pesan. Sebagai contoh, jika sebuah objek ingin memanggil metode dari objek lain, maka objek ini akan mengirimkan sebuah pesan yang meminta objek tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan permintaan tadi. Sebagai contoh, ketika kita menentukan metode yang membutuhkan obyek sebagai parameter, kita dapat mempergunakan obyek dalam platform seluruh bahasa pemrograman tersebut dan jika kita mendefinisikan sebuah metode dengan mengambil komponen sebagai parameter, kita dapat mempergunakan obyek komponen.

Inheritance

Inheritance atau pewarisan berarti sebuah kelas mewarisi state dan behaviour dari kelas lain. Misalnya, sebuah kelas mobil akan mewarisi state dan behaviour ke mobil balap, mobil relly, mobil kota, dll. Kelas mobil merupakan superkelas atau kelas induk dan mobil balap, mobil relly, dan mobil kota merupakan subkelas atau kelas anak dari kelas mobil. Semua subkelas dari superkelas yang sama akan memiliki state dan behaviour yang sama. Namun, masing-masing subkelas bisa menambah sendiri state atau behaviournya. Dalam kasus tertentu subkelas memiliki implementasi state dan behaviour yang berbeda dengan superkelasnya. Contohnya pada subkelas mobil balap terdapat implementasi ubah gigi yang tidak terdapat pada implementasi superkelas mobil. Dengan menggunakan inheritance kita dapat mempergunakan kelas-kelas yang kita dan dapat juga menambahkan kelas berdasarkan superkelas dengan karakteristik behaviour yang sama atau bisa juga menambahkan behaviour yang baru.

Interface

Interface atau antarmuka merupakan alat untuk saling berinteraksi. Dalam bahasa pemrograman, interface digunakan oleh obyek-obyek yang tidak terhubung untuk saling berinteraksi. Sebagai contoh interface sebuah mobil akan muncul ubah gigi, injak pedal rem, naikkan kecapatan, dan yang lain yang dapat berinteraksi dengan sopir sebagai pengguna mobil.