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;
endmoduleCara Kerja Kode Ini
| Bagian | Arti |
|---|---|
always | Jalankan kode ini berulang kali, selamanya |
@(posedge clk) | Tunggu clock berubah dari 0 menjadi 1 (tepi naik) |
count <= count + 1 | Ambil 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;
endIni dijalankan saat a atau b berubah.
Tantangan
Tambahkan blok always yang hilang agar module ini berfungsi.
Cara kerjanya:
- Pada setiap tepi naik clock,
out1berganti nilai dari 0 ke 1 atau dari 1 ke 0 out2mengikutiout1(nilainya sama denganout1)
Yang perlu kamu lakukan:
- Tambahkan blok
always @(posedge clk) - Di dalamnya, buat
out1berganti nilai (gunakanout1 = ~out1) - Buat
out2sama denganout1
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
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online