Dokumentasi Verilog
Referensi Verilog yang ringkas dan penuh contoh. Baca konsepnya, lihat kodenya, lalu praktikkan di perjalanan Coddy.
Mulai kursusMemulai
- Apa Itu Verilog?Pengantar Verilog dengan bahasa sederhana: apa itu Verilog, dipakai untuk apa, apa bedanya dengan bahasa pemrograman biasa, dan kenapa para desainer digital masih memakainya setelah 40 tahun.
- Hardware vs SoftwareKenapa Verilog terasa membingungkan setelah bahasa software: semuanya berjalan bersamaan secara default, waktu adalah konsep utama, dan pernyataan tidak dijalankan berurutan.
- Instal VerilogInstal Icarus Verilog dan GTKWave untuk compile dan simulasi Verilog di komputermu sendiri. Atau lewati instalasinya dan pakai editor browser: keduanya bisa dipakai untuk dokumentasi ini.
- Module PertamamuTulis module Verilog lengkap pertamamu dari nol: deklarasi, port, sepotong logika kombinasional, dan testbench yang menggerakkannya. Bisa dijalankan di browser.
- KomentarCara menulis komentar satu baris dan banyak baris di Verilog, ditambah pola dokumentasi yang dipakai desainer digital agar module tetap mudah dibaca saat makin besar.
Tipe Data & Angka
- Wire dan RegDua tipe data utama di Verilog, yaitu `wire` untuk koneksi kontinu dan `reg` untuk penyimpanan prosedural, beserta aturan untuk memilih di antara keduanya setiap saat.
- Vektor dan ArrayCara mendeklarasikan sinyal multi-bit dengan `[7:0]`, memotongnya, menggabungkannya, dan perbedaan antara vektor packed dan array memori.
- ParameterCara memakai `parameter` dan `localparam` untuk mendefinisikan konstanta saat compile, membuat lebar dan kedalaman berparameter, dan menimpa nilainya saat membuat instance module.
- Literal AngkaCara Verilog menulis konstanta: berukuran vs tanpa ukuran, basis `'b` `'h` `'d` `'o`, angka signed, underscore agar mudah dibaca, dan jebakan yang sering mengenai pemula.
- Nilai X dan ZSinyal Verilog punya empat kemungkinan nilai, bukan dua. Inilah arti sebenarnya dari `x` (tidak diketahui) dan `z` (impedansi tinggi) di simulasi, dan cara melakukan debug pada keduanya.
Operator
- OperatorOperator inti di Verilog (aritmetika, perbandingan, logika, dan kondisional `?:`) beserta aturan dan jebakan seputar lebar yang berbeda-beda dan signedness.
- Bitwise & ReduksiOperator tingkat bit di Verilog: AND/OR/XOR bitwise, bentuk inversinya, dan operator reduksi yang meringkas seluruh vektor menjadi satu bit.
- Concatenation & ReplikasiCara menyambung sinyal dengan `{}` dan menyalin sebuah pola N kali dengan `{N{...}}`, dua operator Verilog yang wajib dikuasai untuk membangun bus yang lebih lebar dari potongan-potongan.
Modul & Struktur
- Port ModuleCara mendeklarasikan port module (input, output, dan inout), daftar port gaya ANSI, dan kapan sebuah output sebaiknya bertipe `wire` atau `reg`.
- Instantiasi ModuleCara membuat instance sebuah module di dalam module lain, perbedaan koneksi port bernama dan berdasarkan posisi, dan pola banyak instance yang akan kamu pakai untuk membangun desain sungguhan.
- Penugasan KontinuCara kerja `assign`: hubungan yang selalu berlaku yang digambarkannya, apa yang bisa dan tidak bisa digerakkannya, dan pola-pola di mana ia unggul dibandingkan kode prosedural.
Blok Prosedural
- Blok AlwaysCara kerja blok `always`, perbedaan antara `always @(*)` yang kombinasional dan `always @(posedge clk)` yang dikendalikan clock, serta aturan yang menentukan hardware apa yang dihasilkan masing-masing.
- Blok InitialApa bedanya blok `initial` dengan `always`, kenapa blok ini hanya ada di simulasi, dan pola-pola umum pemakaiannya: stimulus, persiapan waveform, header log.
- Blocking vs Non-blockingTopik yang paling sering membingungkan pemula Verilog. Arti sebenarnya dari `=` dan `<=` di dalam blok `always`, dan aturan yang mencegah sebagian besar race condition.
Alur Kontrol
- If-ElseCara kerja `if`/`else` di dalam blok `always`, jebakan latch yang sering menjerat pemula, dan hardware priority encoder yang dihasilkan rantai `else if`.
- Pernyataan CaseCara kerja `case` untuk dekode banyak arah yang rapi, `default` yang tidak boleh kamu lewatkan, dan perbedaan antara `case`, `casex`, dan `casez`.
- Loop ForApa bedanya loop `for` di Verilog dengan saudaranya di software: loop ini dibuka oleh synthesizer menjadi hardware paralel, bukan dijalankan berulang saat runtime.
Logika Sekuensial & FSM
- Logika ClockedCara membangun register, counter, shift register, dan pipeline dari blok `always` yang dikendalikan clock, pola andalan setiap desain digital sinkron.
- Finite State MachineCara menulis FSM Verilog seperti para profesional: register state yang dikendalikan clock, blok next-state yang kombinasional, dan pemisahan rapi yang mudah dibaca dan disintesis.
Testbench & Simulasi
- Dasar TestbenchCara menulis testbench Verilog: pembangkitan clock, urutan reset, stimulus, pengamatan, dan kerangka standar yang menggerakkan setiap simulasi yang akan kamu jalankan.
- Display & MonitorCara kerja `$display`, `$write`, dan `$monitor`: format specifier yang akan kamu pakai, perbedaan di antara ketiganya, dan kapan masing-masing menjadi alat yang tepat.
- Dumpfile & VCDCara menambahkan output waveform VCD ke testbench: `$dumpfile`, `$dumpvars`, pemilihan scope, dan cara melihat file hasilnya di GTKWave atau editor browser.
- Timescale & DelayCara direktif `` `timescale `` menentukan satuan `#delay`, aturan menggabungkan satuan yang berbeda di beberapa file, dan bagaimana delay berinteraksi dengan logika yang dikendalikan clock.