Memilih Enkode FPGA yang Tepat: Studi Praktis dengan Conway’s Game of Life
Ikuti tiga eksperimen yang menggambarkan cara memilih enkode yang paling sesuai untuk desain FPGA.
Saat merancang logika FPGA, alat sintesis biasanya memilih enkode; secara umum paling baik untuk mempercayai keputusan itu. Namun, memahami nuansa representasi biner, Gray, dan one-hot dapat membantu Anda memprediksi kapan compiler mungkin memilih satu di atas yang lainnya.
Tulisan ini memandu Anda melalui eksperimen praktis yang menggunakan Conway’s Game of Life sebagai testbench, menyoroti trade-off yang muncul saat setiap enkode diterapkan pada array besar dari mesin status finite.
Dalam seri ini kita telah membahas konstruksi FSM dalam Verilog, dampak dari initial state dan memori pada enkode, dan perbandingan tingkat tinggi dari skema biner, one-hot, dan Gray.
Sistem yang Diuji
Untuk memperbesar perbedaan hardware, saya membuat instance state machine puluhan kali di seluruh grid 23×23, memungkinkan perbandingan langsung dari enkode biner, Gray, dan one-hot.
Conway’s Game of Life adalah selular automaton klasik yang memodelkan kelahiran, kelangsungan hidup, dan kematian sel pada lattice 2-D persegi panjang. Setiap sel mengikuti tiga aturan sederhana dalam setiap siklus:
- Sel hidup dengan dua atau tiga tetangga hidup bertahan.
- Sel mati dengan tiga tetangga hidup menjadi hidup.
- Semua sel lain mati atau tetap mati.
Aturan ini menghasilkan berbagai pola emergen yang kaya, dan menyediakan beban kerja yang bersih dan dipahami dengan baik untuk mengevaluasi strategi enkode.
Di bawah ini adalah GIF dari Bill Gosper’s Glider Gun, pola populer dalam Game of Life.

Variasi Conway’s Game of Life, dikenal sebagai Bill Gosper’s Glider Gun. Gif dibuat oleh Lucas Vieira [CC BY‑SA 3.0]
Kode Verilog
Logika sel dimodelkan sebagai FSM 8-state. Meskipun perhitungan per-sel Game of Life selesai dalam satu siklus, desain 8-state menciptakan perbedaan yang terlihat di seluruh enkode. Modul Verilog berikut menunjukkan enkode biner asli.
`define STATE_0 3'b000 `define STATE_1 3'b001 `define STATE_2 3'b010 `define STATE_3 3'b011 `define STATE_4 3'b100 `define STATE_5 3'b101 `define STATE_6 3'b110 `define STATE_7 3'b111
module LifeCell( input clk, input nrst, input seed, input [7:0] neighbors, output reg alive); reg [2:0] state; always @ (posedge clk) if (nrst == 0) state <= `STATE_0; else case(state) `STATE_0: begin // ... state <= `STATE_1; end `STATE_1: begin // ... state <= `STATE_2; end // ... `STATE_7: begin // ... state <= `STATE_1; end endcase endmodule Jika Anda ingin membahas lebih dalam tentang kode, proyek lengkap tersedia di GitHub.
Implementasi Enkode FPGA
Desain disintesis pada grid sel 23×23, menghasilkan 27 implementasi yang berbeda: tiga varian FSM, masing-masing dikompilasi dengan enkode biner, Gray, dan one-hot, di seluruh tiga target FPGA.
FSM #1: Model Asli
FSM ini menjalankan initial state sekali, kemudian melalui tujuh state yang tersisa—urutan yang menunjukkan bahwa enkode Gray mungkin menguntungkan.
FSM #2: Sebuah Urutan
Bertindak sebagai counter 3-bit sederhana, FSM ini memperkuat ekspektasi saya bahwa enkode Gray akan mendominasi.
FSM #3: Sebuah Tangle Arbitrer
Varian ini berbagi critical path dari FSM #1 tetapi mengambil rute non-linear ketika jumlah tetangga melebihi tiga. Enkode one-hot tampak cocok secara alami untuk transisi yang tidak teratur seperti ini.
Target Arsitektur
Implementasi dibangun dengan toolchain vendor untuk perangkat berikut:
- Xilinx Vivado Suite pada FPGA Artix-7
- Intel Quartus Prime pada FPGA Cyclone-V
- Lattice Diamond pada FPGA LatticeXP2
Membandingkan Hasil
Benchmarking desain FPGA secara inherent didorong oleh metrik. Saya memilih empat indikator kunci—penggunaan sumber daya logika, jumlah register, estimasi frekuensi maksimum, dan daya on-chip—dan memberikan skor bobot pada masing-masing. Performer terbaik dalam setiap metrik mendapat +1 (atau +2 untuk metrik bobot), yang terburik menerima –1 (atau –2), dan yang tengah menerima 0.
- Logic Units: LUTs (Xilinx/Lattice) atau ALMs (Intel). Bobot 1.
- Registers: Bobot 1.
- Maximum Frequency: Bobot 2.
- On-Chip Power: Bobot 2.
Skor kumulatif untuk masing-masing dari 27 implementasi ditunjukkan di bawah ini.

Tabel hasil untuk semua 27 implementasi. Hijau menyoroti enkode terbaik, merah yang terburik, dan kuning median (tidak ada ties).
Seluruhnya, enkode one-hot muncul di dua baris bawah, dengan hanya dua instance dari paritas dengan skema lain. Sebaliknya, enkode Gray konsisten muncul sebagai performer terbaik, terutama ketika frekuensi dan daya diberi bobot lebih besar.
Untuk menyoroti pemenang, tabel di bawah ini mengisolasi enkode terkemuka untuk setiap varian.

Veredikt
Sementara data cenderung mengarah ke enkode Gray untuk beban kerja Game-of-Life ini, hasilnya tergantung pada metrik mana yang Anda prioritas. Jika Anda menghargai penggunaan sumber daya lebih dari performa, peringkat yang berbeda mungkin muncul. Tujuan saya di sini bukan untuk meresepi aturan seragam tetapi untuk mengilustrasikan bagaimana bukti empiris dapat memandu pilihan enkode.
Silakan jelajahi kode sumber, 27 implementasi yang disintesis, atau simulasi Game-of-Life langsung di repositori GitHub proyek.