Memulai Modul Verilog

Sebelum membaca postingan saya kali ini, saya harap Anda telah membaca beberapa postingan saya terdahulu dengan label Verilog lainnya. Kali ini saya akan memposting tentang cara memulai menulis program dengan verilog. Perlu diketahui bahwa kode dalam verilog mulai dieksekusi dalam dua tempat, yaitu pada statement initial dan always.
Keyword initial
Verilog menginterpretasikan statement initial dengan "mulai di sini pada waktu ke 0". Sebagian orang mengira bahwa initial hanya berfungsi dalam proses inisialisasi, namun initial juga berfungsi untuk menandakan awal mulai berjalannya program. Setelah statement selesai, block initial telah selesai dikerjakan. 
Keyword always
Verilog juga mengeksekusi statement always pada waktu ke 0 seperti statement initial. Perbedaan antara keduanya adalah apa yang akan terjadi apabila keduanya telah selesai dikerjakan. Block always adalah block initial yang memiliki loop tidak terbatas. Artinya, program akan terus berjalan sampai kita menghentikan operasinya.
Delays
Setiap statement dalam verilog diperbolehkan memiliki delay. Karena tentu saja kita ingin membuat program berjalan tidak secara bersamaan, dalam hal ini delay diperlukan. Sebagai contoh akan saya tuliskan sebuah modul yang berisi statement initial dengan delay:
#########################
# module initial_dengan_delay     #
#                                               #
# initial #1 $display ("mulai 1");  #
# initial $display ("mulai 2");       #
# initial #2 $display ("mulai 3");  #
#                                               #
# endmodule                             #
#########################
Dari modul tersebut, yang dieksekusi terlebih dulu adalah "mulai 2" kemudian disusul dengan "mulai 1", dan "mulai 3". Mengapa demikian? Hal ini disebabkan karena tanda # merupakan tanda delay, dengan angka dibelakangnya menunjukkan delay yang dieksekusi terlebih dahulu.
Block begin-end
Baik statement initial maupun always hanya bisa memiliki satu statement, apabila kita memerlukan lebih dari satu statement, maka penggunaan begin-end diperlukan. Untuk lebih memahaminya, saya akan memberikan sebuah contoh modul:
##############################
# module initial_delay_dengan_begin   #
#                                                        #
# initial                                               #
#         begin                                      #
#                  #1 $display ("mulai 1");  #
#                  $display ("mulai 2");       #
#                  #2 $display ("mulai 3"); #
#         end                                        #
# endmodule                                     #
#############################              
Statement pertama yang akan dieksekusi adalah "mulai 1" dengan delay 1, kemudian pada saat bersamaan "mulai 2" dieksekusi, barulah pada waktu ketiga "mulai 3" yang dijalankan.Waktu ketiga diperoleh dari penjumlahan delay 1 dengan delay 2 (1+2=3).
Block fork-join
Block fork-join digunakan sama halnya dengan begin-end, yaitu digunakan untuk lebih dari satu statement, Namun, delay dari fork-join tidak dijumlahkan seperti pada delay begin-end. Begitu juga dengan sifat keperiodikannya. Begin-end  bersifat sekuensial sedagkan fork-join  bersifat independen dan konkurent.
Contoh:
###############################
# module intial_dengan_fork                 #
#                                                          #
# initial                                                 #
#         fork                                          #
#               #1 $display ("mulai 1");       #
#               $display ("mulai 2");            #
#               #2 $display ("mulai 3");       #
#        join                                            #
# initial                                                 #
#          fork                                         #
#                $display (c_mulai 1");        #
#                #2 $display (c_mulai 2");   #
#               #2 $display (c_mulai 3");    #
#         join                                          #
# endmodule                                      #
##############################
Maka dari module tersebut yang dieksekusi pertama kali adalah yang tidak ada delaynya, yaitu "mulai 2" bersamaan dengan itu, "c_mulai 1" dieksekusi. Pada waktu ke 1, "mulai 1" dijalankan, kemudian "mulai 3". Dialnjutkan dengan "c_mulai 2" dan "c_mulai 3".

Itu saja yang dapat saya sampaikan pada posting kali ini. Semoga bermanfaat.





Komentar

Postingan Populer