Sekilas Tentang FPGA
Field Programmable Gate Array (FPGA) merupakan sebuah IC digital yang sering digunakan untuk mengimplementasikan rangkaian digital. Bila dilihat dari segi namanya, 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 “hardwire” oleh pabrik piranti. Bayangkan, bila kita hendak memprogram chip yang isinya dapat kita tentukan sendiri dan tidak perlu susah payah memesan dari pabrik. Cukup mudah dan mengasyikan bukan??? Sedangkan Gate Array artinya bahwa FPGA ini terdiri atas gerbang-gerbang digital dimana interkoneksi masing-masing gerbang tersebut dapat dikonfigurasikan antara satu sama lainnya.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.
Perlu diingat bahwa FPGA merupakan sebuah IC digital yang bersifat programmable. User/pemakai dapat memakai IC digital ini secara berulang-ulang untuk menyesuaikan program apa yang akan didownload ke dalam FPGA ini. Program tersebut nantinya akan dibuat oleh user menggunakan software yang ada untuk kemudian disimulasikan. Setelah simulasi berjalan lancar dan berhasil, program tersebut siap untuk didownload ke dalam FPGA, begitu mudah, efisien dan sederhana. Lalu bagaimana ketika program tersebut gagal untuk disimulasikan??? Mudah saja, user/pemakai hanya perlu menyusun ulang program dalam komputer sesuai yang dibutuhkan dan ketika siap, download lagi program tersebut ke FPGA, begitu untuk seterusnya.
Selain itu, perlu diingat juga bahwa FPGA ini bersifat volatile, yang artinya ketika sumber daya yang menyuplainya dicabut maka secara otomatis FPGA akan kehilangan fungsinya. Jadi FPGA ini tidak mampu menyimpan program ketika supply tenaganya dicabut. User/pemakai harus mendownload ulang program ke dalam FPGA lagi untuk mengimplementasikan program tersebut.
ISI FPGA
Seperti yang diketahui, Field Programmable Gate Array atau yang lebih dikenal dengan FPGA merupakan sebuah IC digital yang dapat diprogram sesuai dengan kehendak pemakainya. FPGA berkembang sejak sekitar tahun 1980-an. 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.
Gambar FPGA
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.
Sebagian besar FPGA memiliki arsitektur seperti di atas. Entah itu FPGA produksi Xilinx ataupun dari Altera. Bila berbeda pun tak akan sampai menimbulkan perbedaan yang terlalu signifikan.
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 :
- 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.
- Pemakai dapat menggunakan microkontroller pada board yang ada, dengan firmware yang cukup guna mengirimkan data ke dalam FPGA.
- 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).
Proses download ke FPGA
Proses konfigurasi FPGA untuk buatan Xilinx maupun Altera hampir sama. Perbedaanya, hanya masalah pemberian nama pada pin-pin FPGA tersebut (nama pin dan jenis operasinya berbeda) . Namun, sebagian besar fungsi dan kegunaannya sama.
Bagaimana cara kerja FPGA??
FPGA (Field Programmable Gate Array) merupakan sebuah IC digital sering digunakan untuk implementasi rangkaian digital. IC digital ini pada umumnya terdiri atas 3 bagian yaitu configure logic blocks (CLB), I/O Blocks, dan Programmable Interconnect. Baik FPGA buatan Xilinx maupun Altera memiliki 3 bagian seperti yang disebutkan di atas.Gambar Isi FPGA buatan Xilinx
Gambar Isi Logic Cell
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
Gambar Logic Cell yang Terhubung satu sama lain denga cary chains
FPGA Pins
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.
Detak (clock) Pada FPGA
Sebuah detak (clock) FPGA biasanya dibuat secara serentak atau sinkron. Artinya bahwa tiap detak (clock) yang dihasilkan di dalam sebuah FPGA terjadi serentak akan mempengaruhi semua kondisi yang ada. Termasuk juga akan mempengaruhi D-flip flop yang merupakan salah satu bagian atau isi FPGA. Jika terjadi clock yang serentak maka akan membuat kondisi D-flip flop menjadi berubah ke kondisi yang lain.
Skema Clock FPGA
Dalam sebuah desain rangkaian yang detaknya terjadi secara serentak, maka sebuah detak saja akan mampu mengendalikan keseluruhan flip flop yang ada. Dan ini terjadi secara serentak pula. Namun hal ini akan mengakibatkan masalah pada waktu (timing) dan sinyal elektrik yang terjadi di dalam FPGA. Misalnya saja akan timbul waktu tunda (delay) atau terjadi glitch dalam rangkaian sinkron tersebut. Untuk menyelesaikan masalah ini, vendor pembuat FPGA menyediakan jalur internal khusus yang disebut “global routing” atau “global lines”. Tujuannya adalah untuk mendistribusikan sinyal-sinyal clock ke semua area FPGA dengan delay yang singkat dan glitch yang rendah sehingga sinyal clock akan terlihat sama dan serentak sampai pada semua flip flop yang ada.
Pada umumnya, sebuah pin untuk sebuah sinyal detak dalam FPGA merupakan jenis “dedicated input pin”. Artinya, pin untuk sinyal detak ini telah ditentukan oleh vendor pembuat FPGA. Biasanya untuk setiap FPGA hanya memiliki satu pin untuk sinyal detak. Sebuah sinyal detak ini yang nantinya akan mengendalikan semua proses detak yang terjadi di dalam FPGA. Untuk mengetahui pin mana dalam sebuah FPGA yang bertindak sebgai pin sinyal detak maka dapat dicek pada datasheet FPGA tersebut.
Domain Detak
Sebuah FPGA dapat menggunakan bermacam-macam detak. Caranya adalah dengan menggunakan bermacam-macam global lines dan dedicated input pins. Setiap bentuk detak yang terjadi di dalam FPGA disebut sebagai domain detak (clock domain). Untuk setiap flip flop di dalam FPGA, domain detak sangatlah mudah untuk ditentukan. Hal ini bisa dicermati dengan melihat input detak pada flip flop tersebut. Namun, bagaimana dengan jika ada logika kombinasional yang ada diantara flip flop? Seperti yang diketahui bahwa dalam logika kombinasional, sinyal detak yang masuk akan langsung dikeluarkan serta tidak terjadi penundaan. Berbeda dengan flip flop yang akan menunda luaran sinyal detaknya. Kedua hal yang sangat berbeda ini dapat diselesaikan dengan cara sebagai berikut :
· Jika ada beberapa logika kombinasional diantara flip flop yang memiliki domain detak sama maka logika kombinasional tersebut akan mengikuti domain clock yang sama juga.
· Jika ada beberapa kombinasional logika diantara flip flop yang memiliki clock domain berbeda, maka logika kombinasional tersebut tidak mengikuti domain detak manapun. Namun untuk ciri khas desain tiap FPGA yang ada maka hal ini tak pernah terjadi. Yang ada hanya jalur domain detak yang berbeda yang kemudian nanti akan disinkronkan.
Kecepatan Domain Detak
Setiap domain detak di dalam FPGA, software yang ada akan menganalisa semua jalur flip flop. Selain itu, software tersebut juga akan memberikan data tentang berapa frekuensi maksimum yang diperbolehkan. Biasanya software hanya akan menganalisa satu jalur dari setiap domain detak saja. Sedangka untuk sinkronisasi jalur biasanya tidak menjadi masalah dan tidak akan dianalisis.
Sebuah domain detak untuk sebuah FPGA besarnya mencapai 10 MHz, atau lebih besar yaitu 100 MHz. Sepanjang clock yang digunakan adalah global lines serta menggunakan kecepatan detak yang lebih rendah dari data yang ada, maka tidak perlu khawatir mengenai pewaktuan internal. Hal ini disebabkan karena telah terbukti akan efektif dan efisien nantinya.
Sinyal di antara Domain Detak
Jika sebuah data perlu dikirimkan melewati domain detak yang berbeda, pertimbangan khusus perlu diperhatikan. Secara sederhananya yaitu sebuah detak hanya akan cocok dan sinkron dengan domain detak yang sama. Jika detak dan domain detaknya berbeda maka hal ini sulit dilakukan dan bisa menyebabkan sistem pewaktuan kacau dan menyebabkan ketidakstabilan pada flip flop. Namun, ada tekhnik dan cara untuk mengatasinya misalnya menggunakan sinkronisasi atau dengan menggunakan FIFO.
Kristal dan Oscilator Pada FPGA
Pada umumnya, sebuah FPGA memerlukan sinyal detak (clock) yang stabil dan tidak berubah-ubah. Detak (clock) ini pada umumnya dihasilkan oleh kristal atau oleh oscillator. Kristal berisi sebuah resonator (sering disebut Quartz). Resonator ini bukanlah alat (device) elektronik dan biasanya tidak mampu melakukan osilasi sendiri. Sedangkan sebuah oscillator terdiri resonator dan amplifier. Kedua komponen tersebut diperlukan oscillator untuk mampu melakukan osilasi.
Sebuah kristal atau pun oscilator memiliki parameter tersendiri yakni frekuensi resonansi. Biasanya suatu FPGA memiliki ukuran frekuensi resonansi tersendiri yang telah ditetapkan oleh vendor pembuatnya. Jadi jika ingin membuat sebuah rangkaian elektronika dengan frekuensi resonansi tertentu maka otomatis akan menyesuaikan dengan FPGA yang hendak dipakai.Keterangan :
- Gambar Kristal (2 pin)
1. Kristal jenis HC-49/SD
2. Kristal jenis HC-49/US
3. Kristal jenis HC-49/U
- Gambar Oscilator (4 pin)
4. Oscilator jenis DIL-14 berukuran penuh dan bungkus (bagian luarnya) terbuat dari logam. Biasa disebut “canned oscillator”
5. Oscilator jenis DIL-8 berukuran setengah dan bungkus (bagian luarnya) terbuat dari logam.
6. Oscilator jenis DIL-8 berukuran setengah dan bungkus (bagian luarnya) terbuat dari plastik
7. Oscilator berukuran 5x7mm dan bungkus (bagian luarnya) terbuat dari logam.
Kristal ini biasanya memiliki 2 buah kaki (pin). Kedua pin tersebut simetris dan letaknya dapat dipasang secara bolak balik. Kristal ini memerlukan rangkaian elektronik dari luar untuk melakukan osilasi. Selain itu, kristal lebih dikenal sebagai komponen ”analog” dibandingkan “digital”. Sebuah kristal memerlukan amplifier analog guna menghasilkan osilasi yang terus menerus. Seringkali, sebuah kristal memiliki 3 buah pin. Namun biasanya selain kedua pin yang telah ada, sisa pin tersebut hanyalah pin ground.
Oscilator
Saat ini, kebanyakan pengembang papan (development board) FPGA menggunakan oscillator guna menghasilkan detak (clock). Sebuah oscillator biasanya memiliki 4 kaki (pin) dan membutuhkan sinyal elektrik untuk melakukan osilasi. Jadi sebuah oscillator mampu menghasilkan sebuah detak (clock) sendiri ketika dihidupkan/diberikan tegangan. Pin yang dimiliki oleh oscillator terdiri sebagai berikut :
- Pin Enable
- Pin Groun (GND)
- Pin Output
- Pin VCC (biasanya berupa 3,3V atau 5V)
Sebuah oscilator dibuat untuk bekerja pada tegangan tertentu. Biasanya antara 3,3V s/d 5V. Terkadang, bila sebuah oscilator yang memiliki spesifikasi tegangan 5V akan dipasang pada tegangan 3,3V tidak akan menjadi masalah. Kecepatan osilasi sebuah oscilator akan berbanding lurus terhadap arus listrik yang dibutuhkan. Misalkan, sebuah oscilator akan berosilasi 25 MHz hanya akan membutuhkan arus 10 mA . Sedangkan jika melakukan osilasi 50 MHz maka arus yang dibutuhkan adalah sekitar 20 mA.
Ketelitian Kristal dan Oscilator
Sebuah resonator (Quartz) biasanya menghasilkan frekuensi yang stabil serta tepat dan akurat. Ketepatan dan ketelitian sebuah kristal mampu mencapai 0,0001%. Hal tersebut akan berpengaruh juga pada ketelitian dan ketepatan kristal maupun oscilator. Nilai ketepatan dan ketelitian paling tinggi untuk keduanya mampu mencapai plus minus 0,0001 %. Sedangkan pada umumnya, nilai ketepatan dan keakuratan kristal maupun oscilator adalah plus minus 0.005% s/d plus minus 0.001%.
Clock synthesizer sebagai penghasil detak (clock)
Sebuah sinyal detak (clock) dapat dihasilkan dari komponen yang disebut clock synthesizer. Hal ini sangatlah bermanfaat karena komponen ini mampu diprogram untuk menghasilkan sejumlah frekuensi yang diharapkan. Alat clock synthesizer ini didasarkan atas program PLL. Selain itu, program PLL memiliki beberapa aplikasi seperti proses sinkroniasai, regenerasai detak (clock), dsb. Salah satu hal yang menarik ketika menggunakan komponen (synthesizer clock) adalah bahwa komponen ini akan cenderung menghasilkan sinyal dengan jitter yang besar dan kemudian akan menetapkan frekuensi osilator yang akan diinginkan. Jitter adalah ukuran sebuah detak tersebut dihasilkan/ditetapkan. Sebuah jitter yang berukuran kecil akan sangat menguntungkan. Hal tersebut disebabkan karena jitter memerlukan pengurangan dari selisih waktu yang ada. Jadi, untuk mendesain jitter ini tidak boleh sembarangan. Selain itu, jitter yang sedikit juga dibutuhkan dalam beberapa aplikasi komunikasi.