Blok Awal Verilog: Tujuan, Sintaks, dan Penggunaan yang Tidak Dapat Disintesis
Kumpulan pernyataan Verilog biasanya dieksekusi secara berurutan dalam simulasi. Pernyataan ini ditempatkan dalam blok prosedural. Terdapat terutama dua jenis blok prosedural dalam Verilog - initial dan always
Sintaks
initial [single statement] initial begin [multiple statements] end
Blok initial digunakan untuk apa?
Sebuah blok initial tidak dapat disintesis dan oleh karena itu tidak dapat dikonversi menjadi skema hardware dengan elemen digital. Oleh karena itu blok initial tidak memiliki kegunaan yang besar selain untuk digunakan dalam simulasi. Blok ini terutama digunakan untuk menginisialisasi variabel dan menggerakkan port desain dengan nilai tertentu.
Kapan blok initial dimulai dan berakhir?
Sebuah blok initial dimulai pada awal simulasi pada waktu 0 unit. Blok ini akan dieksekusi hanya sekali selama seluruh simulasi. Eksekusi blok initial selesai setelah semua pernyataan dalam blok dieksekusi.
Gambar yang ditampilkan di atas memiliki module bernama behave yang memiliki dua sinyal internal bernama a dan b. Blok initial hanya memiliki satu pernyataan dan oleh karena itu tidak perlu menempatkan pernyataan di dalam begin dan end. Pernyataan ini menugaskan nilai 2'b10 ke a saat blok initial dimulai pada waktu 0 unit.
Apa yang terjadi jika ada elemen keterlambatan?
Kode yang ditunjukkan di bawah ini memiliki pernyataan tambahan yang menugaskan beberapa nilai ke sinyal b. Namun ini hanya terjadi setelah 10 unit waktu dari eksekusi pernyataan sebelumnya. Ini berarti a ditugaskan pertama dengan nilai yang diberikan dan kemudian setelah 10 unit waktu, b ditugaskan ke 0.
Berapa banyak blok initial yang diizinkan dalam sebuah modul?
Tidak ada batasan pada jumlah blok initial yang dapat didefinisikan di dalam sebuah modul.
Kode yang ditunjukkan di bawah ini memiliki tiga blok initial semuanya dimulai pada waktu yang sama dan berjalan secara paralel. Namun, tergantung pada pernyataan dan keterlambatan di dalam setiap blok initial, waktu yang dibutuhkan untuk menyelesaikan blok dapat bervariasi.
Dalam contoh ini, blok pertama memiliki keterlambatan 20 unit, sementara blok kedua memiliki total keterlambatan 50 unit (10 + 40) dan blok terakhir memiliki keterlambatan 60 unit. Oleh karena itu simulasi memakan waktu 60 unit waktu untuk selesai karena setidaknya ada satu blok initial yang masih berjalan hingga 60 unit waktu.
$finish adalah tugas sistem Verilog yang memberitahu simulator untuk mengakhiri simulasi saat ini.
Jika blok terakhir memiliki keterlambatan 30 unit waktu seperti yang ditunjukkan di bawah ini, simulasi akan berakhir pada 30 unit waktu sehingga membunuh semua blok initial lain yang aktif pada waktu tersebut.
initial begin #30 $finish; end
Periksa contoh flash yang ditunjukkan di bawah ini untuk melihat bagaimana blok initial dieksekusi dalam simulasi.
Klik di sini untuk slideshow dengan contoh simulasi !