Mendesain logika kustom yang bisa diubah-ubah: memahami FPGA, menulis hardware deskripsi dengan HDL, serta praktik membangun proyek FPGA pertama yang menghubungkan custom logic dengan dunia nyata.

Setelah di episode 21 kalian memilih prosesor untuk edge AI, pada episode ini kita membuka alat yang berbeda filosofinya: FPGA (Field-Programmable Gate Array). Jika MCU menjalankan instruksi secara berurutan, FPGA membangun rangkaian yang bekerja paralel — kalian "mendesain hardware" bukan "menulis software".
Mengapa FPGA penting? Karena FPGA mengisi celah yang tidak bisa dijangkau MCU dan ASIC: dibutuhkan saat latensi sangat rendah, paralelisme tinggi, atau protokol yang terus berubah. Dari mesin trading frekuensi tinggi, pemrosesan video, hingga hardware accelerator, FPGA adalah senjata engineer yang ingin logika kustom tanpa menunggu fabrikasi ASIC selama bertahun-tahun.
FPGA terdiri dari kumpulan blok logika yang bisa diprogram ulang — seperti satu set LEGO yang bisa diubah-ubah susunannya setelah jadi. Struktur intinya:
| Blok | Fungsi |
|---|---|
| CLB (Configurable Logic Block) | Gerbang logika + flip-flop yang bisa dikonfigurasi |
| Routing fabric | Jaringan koneksi antar blok (bisa diprogram) |
| BRAM | Memori blok untuk buffer data |
| DSP slice | Unit aritmetika untuk perkalian/filter |
| I/O block | Antarmuka ke dunia luar (pin) |
| Clock network | Distribusi clock yang presisi ke semua blok |
Konsep kunci: hardware description — kalian menggambarkan rangkaian, bukan menulis urutan instruksi. Program kalian menjadi diagram sirkuit nyata di dalam chip.
| Aspek | MCU | FPGA | ASIC |
|---|---|---|---|
| Eksekusi | Instruksi berurutan | Rangkaian paralel | Rangkaian paralel |
| Ubah desain | Ya (flash) | Ya (reprogram) | Tidak (fabrikasi sekali) |
| Latensi | µs-ms | ns | ns |
| Biaya NRE | 0 | 0 | Jutaan $ |
| Biaya per unit | Rendah | Sedang | Terendah (volume besar) |
| Cocok untuk | Kontrol, logika | Prototipe, paralel, custom | Produksi volume raksasa |
Aturan praktis: MCU untuk logika, FPGA saat butuh paralelisme/latensi ns, ASIC hanya jika volume jutaan unit per tahun.
FPGA diprogram dengan HDL (Hardware Description Language). Dua yang paling umum:
| HDL | Asal | Gaya | Pemula |
|---|---|---|---|
| Verilog | AS (1980s) | Lebih ringkas, mirip C | Sering jadi pintu masuk |
| VHDL | Eropa/DoD (1980s) | Verbose, strict | Kurva lebih curam |
Verilog adalah pilihan paling umum untuk memulai. Berikut blok paling sederhana — counter yang menghitung dan mengeluarkan sinyal:
module counter(
input wire clk,
input wire rst_n,
output reg led
);
reg [23:0] count;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
count <= 24'd0;
led <= 1'b0;
end else begin
count <= count + 1'b1;
if (count == 24'd1_000_000) begin
led <= ~led;
count <= 24'd0;
end
end
end
endmodulePerhatikan perbedaan fundamental dari software: always block mengeksekusi secara paralel, tidak ada urutan baris seperti C. posedge clk berarti blok ini dijalankan setiap detak clock naik — inilah inti clocked logic. Blok ini mendeskripsikan rangkaian yang berdetak sinkron dengan clock, bukan prosedur yang dijalankan urut.
Tip
Kesalahan mindset paling umum di pemula: menulis HDL seperti C (berpikir urut, memakai loop untuk "memproses"). Latihlah berpikir dalam hardware: signal, register, dan koneksi yang bekerja paralel. Simulasi dan timing diagram adalah teman terbaik untuk membangun mental model ini.
"1. RTL Design : tulis HDL (Verilog/VHDL) -> file .v/.vhd
2. Simulation : verifikasi logika di testbench (iverilog/ModelSim)
3. Synthesis : ubah HDL menjadi netlist gerbang (tool vendor)
4. Implementation : place & route ke blok fisik FPGA
5. Timing Analysis : pastikan semua jalur memenuhi setup/hold time
6. Bitstream : hasil akhir -> download ke FPGA
7. On-board : verifikasi di hardware nyataSebelum menyentuh board, desain diuji dengan testbench — "papan uji virtual" yang memberi stimulus dan memeriksa output. Contoh testbench sederhana:
module counter_tb;
reg clk = 0;
reg rst_n = 0;
wire led;
counter dut(
.clk(clk),
.rst_n(rst_n),
.led(led)
);
always #5 clk = ~clk; // clock 100MHz
initial begin
#10 rst_n = 1'b1;
#1000;
$finish;
end
endmoduleiverilog -o sim counter.v counter_tb.v
vvp sim
gtkwave sim.vcd # lihat timing diagramSimulasi menangkap mayoritas bug logika tanpa biaya hardware — lebih murah daripada membakar bitstream lalu debugging dengan logic analyzer.
Untuk praktik nyata, pilih board FPGA yang murah dan ramah pemula (misal yang berbasis ICE40/Lattice atau keluarga Cyclone kecil), lalu ikuti alur:
FPGA jarang berdiri sendiri — ia hidup dalam sistem yang lebih besar:
" SPI config
MCU <===========> FPGA <===> sensor/ADC paralel
| |
|--- UART -----> |---- custom protocol ke dunia luarWarning
Dua masalah yang paling sering membakar proyek FPGA: unsynchronized input (sinyal eksternal masuk ke clock domain tanpa sinkronisasi → metastability) dan timing closure gagal (jalur terlalu lambat untuk clock yang dipilih → perilaku acak). Sinkronkan semua input eksternal dengan dua flip-flop, dan hormati hasil timing analysis — jangan coba-coba menurunkan clock "biar jalan".
Pada episode 22 ini, kalian telah memahami FPGA sebagai hardware yang bisa didesain ulang — logika kustom yang bekerja paralel dan bisa diubah kapan saja.
Inti yang harus dibawa pulang:
always block bekerja paralel, clocked logic adalah intinya.Di episode 23 selanjutnya kita membahas topik yang menjadi jiwa perangkat bertenaga baterai: low power hardware — power budget, sleep modes, dan perhitungan umur baterai. Sampai jumpa di episode 23!