Menguasai VHDL & Verilog: Menulis Logika Kombinasional dan Sekuensial yang Rapi
Menggunakan Blok Process atau Always
Dalam VHDL dan Verilog, blok Process (VHDL) dan Always (Verilog) adalah konstruksi inti untuk mendeskripsikan perilaku hardware. Digunakan untuk memodelkan dua tipe logika yang berbeda:
- Logika kombinasi – output hanya bergantung pada input saat ini.
- Logika sekuensial – output bergantung pada input saat ini dan status masa lalu, biasanya didorong oleh clock.
Sementara banyak buku teks mengilustrasikan contoh kombinasi yang sederhana, desain dunia nyata hampir eksklusif bergantung pada blok sekuensial untuk mengimplementasikan register, mesin status, dan tahap pipeline.
Mengapa D Flip-Flop Penting
Di jantung setiap sirkuit sekuensial adalah D flip-flop, elemen minimal yang menangkap dan menyimpan satu bit data pada tepi clock. Memahami timing dan batasan setup/hold-nya esensial sebelum menyelami kode HDL yang lebih tinggi.

Pembaca yang tidak akrab dengan dasar-dasar D flip-flop harus berhenti di sini untuk meninjau operasi flip-flop dasar.
Logika Kombinasi dalam Blok Process/Always
Meskipun memungkinkan, menggunakan blok Process atau Always hanya untuk penugasan kombinasi jarang direkomendasikan. Penugasan kontinu langsung lebih jelas dan kurang rentan kesalahan.
Contoh VHDL
process (input_1, input_2) begin and_gate <= input_1 and input_2; end process;
Contoh Verilog
always @ (input_1 or input_2) begin and_gate = input_1 & input_2; end
Daftar sensitivitas (misalnya, input_1, input_2) memastikan blok dieksekusi setiap kali sinyal yang terdaftar berubah. Namun, fungsionalitas yang sama dapat diekspresikan lebih ringkas dengan penugasan kontinu:
-- VHDL and_gate <= input_1 and input_2;
// Verilog assign and_gate = input_1 & input_2;
Pernyataan ini setara dalam efek tetapi penugasan kontinu lebih disukai untuk logika kombinasi murni.
Logika Sekuensial: Kasus Penggunaan Umum
Blok Process (VHDL) dan Always (Verilog) unggul saat memodelkan perilaku didorong clock. Pola typis termasuk daftar sensitivitas yang mencakup clock dan reset asinkron opsional:
Contoh Sekuensial VHDL
process (clk, rst_n) begin if rst_n = '0' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process;
Contoh Sekuensial Verilog
always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 1'b0; else q <= d; end
Cuplikan ini mengilustrasikan bagaimana D flip-flop diinstansiasi implisit oleh HDL. Desainer harus menggunakan pola ini kapan pun sinyal harus diregistrasi atau status harus dipertahankan.
Praktik Terbaik
- Gunakan penugasan kontinu untuk logika kombinasi murni.
- Cadangkan blok Process/Always untuk logika sekuensial yang memerlukan tepi clock atau kontrol asinkron.
- Selalu sertakan penanganan reset yang jelas untuk menghindari inferensi latches.
- Jaga daftar sensitivitas tetap eksplisit dan minimal untuk mencegah ketidakcocokan simulasi.
Dengan mengikuti pedoman ini, Anda akan menulis HDL yang efisien untuk disintesis dan mudah untuk diverifikasi.