Cheat Sheet Verilog
Terakhir diperbarui
Struktur module & port
Module adalah komponen dasar: punya nama dan daftar port.
| Sintaks | Arti |
|---|---|
module adder(...); ... endmodule | Mendefinisikan module beserta isinya |
input clk; | Port input |
output q; | Port output |
output reg q; | Output yang dikendalikan dari blok always |
input [7:0] data; | Bus input 8 bit (vector) |
inout sda; | Port dua arah |
adder u1 (.a(x), .b(y), .sum(s)); | Membuat instance module dengan port bernama |
Tipe data
wire memodelkan sambungan; reg menyimpan nilai yang diberikan oleh kode prosedural.
| Elemen | Kegunaan |
|---|---|
wire w; | Net yang dikendalikan oleh assign atau output module |
reg r; | Menyimpan nilai yang diberikan di dalam blok always/initial |
wire [3:0] bus; | Vector 4 bit (bit 3 turun ke 0) |
reg [7:0] count; | Register 8 bit |
bus[2] | Memilih satu bit |
bus[3:1] | Memilih sebagian bit (part-select) |
reg mem [0:255]; | Memori: array berisi register |
parameter WIDTH = 8; | Konstanta bernama untuk module |
Literal angka
Formatnya <size>'<base><value>: size dalam bit, base berupa b/o/d/h.
| Sintaks | Arti |
|---|---|
4'b1010 | Biner 4 bit, nilai 10 |
8'hFF | Hex 8 bit, nilai 255 |
8'hff | Sama saja: digit hex tidak membedakan huruf besar dan kecil |
16'd255 | Desimal 16 bit, nilai 255 |
3'o7 | Oktal 3 bit, nilai 7 |
8'b1010_1100 | Garis bawah mengelompokkan digit agar mudah dibaca |
1'bx | Nilai bit yang tidak diketahui (x) |
1'bz | Nilai bit high-impedance (z) |
Operator
Operator bitwise, logika, perbandingan, dan reduksi.
| Operator | Kegunaan |
|---|---|
& | ^ ~ | Bitwise AND, OR, XOR, NOT |
&& || ! | Logika AND, OR, NOT (menghasilkan 1 bit) |
== != < > <= >= | Operator perbandingan |
<< >> | Geser kiri dan kanan |
+ - * / % | Operator aritmetika |
&bus | Reduksi AND (AND dari semua bit) |
|bus | Reduksi OR (OR dari semua bit) |
^bus | Reduksi XOR (paritas dari semua bit) |
{a, b} | Penggabungan; {4{1'b1}} direplikasi menjadi 4'b1111 |
Continuous assignment
assign mengendalikan wire secara terus-menerus: pakai untuk logika kombinasional.
| Sintaks | Arti |
|---|---|
assign y = a & b; | Mengisi y dengan AND dari a dan b |
assign sum = a + b; | Menghitung penjumlahan secara terus-menerus |
assign y = sel ? a : b; | Ternary: multiplexer 2-ke-1 |
assign {c, s} = a + b; | Menangkap carry dan sum sekaligus |
assign y = ~en; | Mengendalikan wire dari sinyal yang dibalik |
Blok prosedural
always dan initial menjalankan pernyataan; sensitivity list menentukan kapan.
| Sintaks | Arti |
|---|---|
always @(*) begin ... end | Logika kombinasional (setiap perubahan input) |
always @(posedge clk) | Berjalan di setiap sisi naik clock (sekuensial) |
always @(negedge clk) | Berjalan di setiap sisi turun clock |
always @(posedge clk or posedge rst) | Blok dengan clock dan reset asinkron |
initial begin ... end | Berjalan sekali di waktu 0 (testbench, hanya simulasi) |
begin ... end | Mengelompokkan beberapa pernyataan |
#10 | Tunda 10 satuan waktu (hanya simulasi) |
Blocking vs non-blocking
Pakai = untuk logika kombinasional, <= untuk logika sekuensial dengan clock.
| Sintaks | Arti |
|---|---|
a = b; | Blocking: dijalankan berurutan, langsung |
a <= b; | Non-blocking: semua RHS dibaca dulu, baru nilainya diberikan |
always @(*) y = a & b; | Kombinasional: pakai blocking = |
always @(posedge clk) q <= d; | Flip-flop: pakai non-blocking <= |
Mencampur = dan <= dalam satu blok | Hindari: sumber bug yang umum |
Alur kontrol
Percabangan dan cabang banyak arah di dalam blok prosedural.
| Sintaks | Arti |
|---|---|
if (cond) ... else ... | Pernyataan kondisional |
if (a) x = 1; else x = 0; | If/else satu baris |
case (sel) ... endcase | Cabang banyak arah berdasarkan nilai |
2'b00: y = a; | Sebuah item case |
default: y = 0; | Item case cadangan |
for (i = 0; i < 8; i = i + 1) | Perulangan (sering di dalam generate atau simulasi) |
repeat (4) @(posedge clk); | Mengulang pernyataan sebanyak N kali |
Pola umum
Komponen yang kamu tulis berulang kali, ditambah task untuk testbench.
| Pola | Sintaks |
|---|---|
| D flip-flop | always @(posedge clk) q <= d; |
| Register dengan reset | always @(posedge clk) if (rst) q <= 0; else q <= d; |
| Counter | always @(posedge clk) count <= count + 1; |
| Register state FSM | always @(posedge clk) state <= next_state; |
| Logika next-state FSM | always @(*) case (state) ... endcase |
| Mencetak nilai | $display("q = %b", q); |
| Mencetak saat berubah | $monitor("t=%0t q=%b", $time, q); |
| Mengakhiri simulasi | $finish; |
Semua sintaks Verilog yang sering kamu pakai, dalam satu halaman. Cheat sheet Verilog ini adalah referensi cepat untuk bahasa deskripsi hardware ini: mendeklarasikan module dan port, memilih tipe data, menulis logika kombinasional dan sekuensial, serta pola blok always yang menggambarkan rangkaian sungguhan.
Sintaks di sini adalah Verilog standar (IEEE 1364) dan berjalan di simulator umum seperti Icarus Verilog dan Verilator. Salin yang kamu butuhkan, atau coba langsung di playground Verilog: tulis module, simulasikan, dan lihat output-nya di browsermu.
FAQ cheat sheet Verilog
Apakah cheat sheet Verilog ini gratis?
Ya. Cheat sheet Verilog ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark dan kembali kapan pun kamu perlu mencari sintaks, operator, atau pola blok always.
Apa perbedaan wire dan reg?
wire memodelkan sambungan fisik dan harus dikendalikan terus-menerus, oleh pernyataan assign atau output module, jadi kamu memakainya untuk net kombinasional. reg menyimpan nilainya sampai kode prosedural mengubahnya, jadi kamu memakainya untuk apa pun yang diberi nilai di dalam blok always atau initial. Meskipun namanya begitu, reg tidak selalu menjadi register di hardware; artinya hanya bahwa nilainya diatur secara prosedural.Apa perbedaan blocking assignment dan non-blocking assignment?
=) langsung dijalankan secara berurutan, seperti pernyataan pemrograman biasa, jadi pakai untuk logika kombinasional di blok always @(*). Non-blocking assignment (<=) mengevaluasi semua sisi kanan terlebih dahulu, lalu memperbarui semua sisi kiri bersamaan, sehingga memodelkan flip-flop dengan benar. Jadi pakai di blok dengan clock always @(posedge clk). Mencampur keduanya dalam satu blok adalah sumber bug simulasi yang klasik.Bisakah saya berlatih Verilog secara online?
Bisa. Buka playground Verilog untuk menulis module, menyimulasikannya, dan melihat output-nya di browsermu, tanpa perlu instalasi. Kalau kamu ingin belajar terarah, kursus Verilog interaktif gratis dari Coddy membawamu dari module dan tipe data sampai blok always dan finite state machine, langkah demi langkah.
Apakah cheat sheet ini cocok untuk pemula?
Cocok. Isinya disusun mulai dari fondasinya (module, port, dan tipe data) sampai logika sekuensial dan pola FSM, jadi kamu bisa mulai dari bagian atas lalu pelan-pelan belajar menggambarkan rangkaian sungguhan.