Menu
CoddyTech

Penugasan Blocking

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 49 dari 90.

Verilog memiliki dua jenis penugasan prosedural: blocking (=) dan non-blocking (<=). Dalam pelajaran ini, kita berfokus pada penugasan blocking.

Assignment blocking menggunakan operator =. Disebut "blocking" karena menghalangi eksekusi pernyataan berikutnya hingga assignment saat ini selesai. Kode berjalan langkah demi langkah, sesuai urutan.

Sintaks:

variable = expression;

Kapan Menggunakan Assignment Blocking

Assignment blocking (=) digunakan untuk logika kombinasional: sirkuit yang output-nya langsung berubah saat input berubah, tanpa clock dan tanpa memori.

Contoh logika kombinasi:

  • Gerbang AND / OR / XOR
  • Penjumlah dan pengurang
  • Multiplekser
  • Dekoder

Contoh Verilog:

always @(*) begin
  sum = a + b;      // Penugasan blocking
  carry = a & b;    // Penugasan blocking
end

Blocking dalam Blok always (Logika Kombinasional)

always @(*) begin
  temp = a & b;    // Langkah 1
  out = temp | c;  // Langkah 2 (menggunakan temp dari langkah 1)
end

Urutannya penting. Ini tidak masalah untuk logika kombinasional.

Blocking vs Non-blocking

 Blocking (=)Non-blocking (<=)
EksekusiSatu demi satuSemuanya sekaligus
Baris berikutnya menunggu?YaTidak
PenggunaanLogika kombinatorialLogika sekuensial (flip-flop)

Penting: Jangan Gunakan Blocking untuk Flip-Flop

challenge icon

Tantangan

Tambahkan assignment blocking yang hilang untuk menukar nilai x dan y menggunakan variabel sementara.

Yang harus dilakukan:

  1. Tetapkan nilai x ke temp (simpan x di temp)
  2. Tetapkan nilai y ke x (pindahkan y ke x)
  3. Tetapkan nilai temp ke y (pindahkan x yang tersimpan ke y)

Coba sendiri

module swap;
  reg x, y;
  reg temp;
  
  initial begin
    x = 1;
    y = 0;
    
    $display("Before swap: x=%d, y=%d", x, y);
    
    // TODO: Langkah 1: Tetapkan nilai x ke temp
    
    // TODO: Langkah 2: Tetapkan nilai y ke x
    
    // TODO: Langkah 3: Tetapkan nilai temp ke y
    
    $display("After swap: x=%d, y=%d", x, y);
    $finish;
  end
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online