Enkode Biner, Gray, dan One-Hot: Panduan Praktis untuk Mesin Status Finite FPGA
Tulisan ini menyediakan perbandingan rinci dari enkode biner, Gray, dan one-hot saat mengimplementasikan finite state machines (FSM) pada FPGA. Memahami bagaimana alat sintesis mengevaluasi dan mungkin mentransformasi enkode ini esensial untuk mencapai performa dan efisiensi daya yang optimal.
Finite state machines adalah hal yang everywhere dalam desain digital. Alat sintesis secara rutin menganalisis RTL Anda untuk mendeteksi FSM dan dapat menulis ulang state encodings untuk memenuhi tujuan timing, area, atau daya. Bahkan jika Anda secara manual menetapkan state codes, alat dapat mengganti nilai yang berbeda—kadang dengan lebar bit yang berbeda—berdasarkan strategi optimasi-nya.
Untuk refresher tentang membangun FSM dalam Verilog, lihat artikel saya Creating Finite State Machines in Verilog.
Opsi Enkode: Biner, Gray, dan One-Hot
Tiga enkode FSM paling umum adalah biner, Gray, dan one-hot. Setiapnya menawarkan trade-off yang berbeda.
Enkode Biner
Enkode biner menetapkan jumlah bit paling sedikit untuk mewakili semua state. Ini adalah pilihan paling hemat ruang, tetapi transisi state dapat melibatkan perubahan bit yang banyak, yang dapat meningkatkan daya dinamis.

Contoh enkode biner. Gambar oleh Steve Arar
Enkode Gray
Kode Gray memastikan hanya satu bit yang berubah antara state yang berurutan. Ketika FSM mengikuti urutan yang dapat diprediksi, enkode Gray dapat mengurangi aktivitas switching dan menurunkan daya dinamis.

Rodakode Gray. Gambar dari Marie Christiano
Enkode One-Hot
Enkode one-hot mewakili setiap state dengan bit flip-flop yang khusus. Sementara itu mengonsumsi lebih banyak sumber daya logika dan memperkenalkan banyak kombinasi tidak valid, ini menghilangkan kebutuhan untuk state decoding, menyederhanakan logika kombinatorial dan seringkali meningkatkan timing pada frekuensi clock tinggi.

Contoh enkode one-hot. Gambar oleh Steve Arar
Untuk wawasan lebih dalam tentang state encoding dalam VHDL, konsultasikan Encoding the States of a Finite State Machine in VHDL oleh Steve Arar.
Memilih Enkode yang Tepat
Menentukan enkode optimal tergantung pada konteks dan melibatkan menyeimbangkan area, timing, dan daya. Pedoman umum meliputi:
- Jika desain Anda kecil dan perbedaan performa tidak signifikan, pertahankan enkode asli yang Anda tentukan.
- Untuk FSM yang melintasi state dalam urutan yang tetap dan berurutan—seperti counter—kode Gray sering menguntungkan.
- Saat FSM memiliki transisi arbitrer atau harus beroperasi pada frekuensi tinggi, enkode one-hot dapat memberikan timing closure terbaik.
Karena trade-off-nya halus, saya merekomendasikan untuk membiarkan alat sintesis memilih enkode. Meskipun demikian, saya telah melakukan eksperimen komparatif di tiga alat pengembangan utama dan tiga mesin state berbeda untuk mengilustrasikan bagaimana setiap enkode berperforma dalam praktik. Hasilnya dibahas dalam artikel saya selanjutnya.