Menu
CoddyTech

Blok always

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

Blok prosedural adalah blok kode tempat pernyataan dijalankan satu per satu, secara berurutan, seperti dalam bahasa pemrograman perangkat lunak seperti C atau Python. Verilog memiliki dua blok prosedural: initial (dijalankan satu kali) dan always (dijalankan terus-menerus). Mari mulai dengan blok always.

Blok always berjalan terus-menerus. Blok ini berulang selamanya setelah simulasi dimulai. Blok ini digunakan untuk mendeskripsikan perangkat keras yang perlu terus berjalan, seperti flip-flop, pencacah, dan logika kombinasional.

Sintaks dasar:

always @(sensitivity_list) begin
  // Kode yang dijalankan berulang kali
end

@(sensitivity_list) memberi tahu blok kapan harus dijalankan. Tanpanya (dan tanpa penundaan seperti #5 di dalamnya), blok akan melakukan perulangan tanpa henti dan membuat simulasi macet.

Contoh Blok Always: Counter

Berikut contoh cara kita menggunakan blok always untuk membuat counter.

module counter (
  input clk,
  output reg [3:0] count
);
  always @(posedge clk) count <= count + 1;
endmodule

Cara Kerja Kode Ini

BagianArti
alwaysJalankan kode ini berulang kali, selamanya
@(posedge clk)Tunggu clock berubah dari 0 menjadi 1 (tepi naik)
count <= count + 1Ambil nilai count saat ini, tambahkan 1, lalu simpan kembali

Blok ini berjalan pada setiap tepi naik clock. Setiap kali, count bertambah 1.

Daftar sensitivitas @(posedge clk) memberi tahu agar kode dijalankan hanya pada tepi clock, bukan secara terus-menerus. Tanpa ini, perulangan akan berjalan selamanya tanpa jeda.

Blok always dengan Beberapa Sinyal

Kamu bisa mencantumkan sinyal tertentu:

always @(a or b) begin
  out = a & b;
end

Ini dijalankan saat a atau b berubah.

challenge icon

Tantangan

Tambahkan blok always yang hilang agar module ini berfungsi.

Cara kerjanya:

  • Pada setiap tepi naik clock, out1 berganti nilai dari 0 ke 1 atau dari 1 ke 0
  • out2 mengikuti out1 (nilainya sama dengan out1)

Yang perlu kamu lakukan:

  1. Tambahkan blok always @(posedge clk)
  2. Di dalamnya, buat out1 berganti nilai (gunakan out1 = ~out1)
  3. Buat out2 sama dengan out1

Coba sendiri

module toggler (
  input clk,
  output reg out1,
  output reg out2
);

  initial begin
    out1 = 0;
    out2 = 0;
  end

  // TODO: Tambahkan blok always dengan posedge clk
  // out1 berganti nilai setiap siklus clock
  // out2 mengikuti out1

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