Verilog adalah bahasa deskripsi perangkat keras (HDL) yang digunakan untuk merancang, mensimulasikan, dan memverifikasi sistem elektronik digital, khususnya sirkuit terintegrasi (IC). Diciptakan pada tahun 1980-an, Verilog memungkinkan insinyur untuk menggambarkan perilaku dan struktur sistem elektronik pada berbagai tingkat abstraksi, dari algoritma tingkat tinggi hingga tingkat gerbang. Peran utamanya adalah untuk memfasilitasi simulasi dan sintesis sirkuit logika digital, memungkinkan desain dan verifikasi komponen perangkat keras yang kompleks seperti CPU, FPGA (Field-Programmable Gate Arrays), dan ASIC (Application-Specific Integrated Circuits).
Verilog berasal pada tahun 1984 sebagai bahasa kepemilikan yang dikembangkan oleh Gateway Design Automation. Tujuan awalnya adalah untuk menyediakan alat pemodelan untuk sistem digital. Pada tahun 1990, bahasa ini diakuisisi oleh Cadence Design Systems, yang memfasilitasi adopsi yang lebih luas dari bahasa ini di industri elektronik.
Pada tahun 1995, Verilog distandarisasi sebagai IEEE 1364, menandai sebagai standar HDL resmi. Standarisasi ini berkontribusi secara signifikan terhadap popularitas Verilog, memungkinkan bahasa ini bersaing dengan HDL lainnya, terutama VHDL, yang telah mendapatkan perhatian pada tahun 1980-an melalui penggunaannya dalam aplikasi militer dan dirgantara.
Dalam tahun-tahun berikutnya, Verilog telah berkembang untuk mencakup konstruksi untuk metodologi desain modern seperti SystemVerilog, sebuah ekstensi yang menggabungkan fitur dari Verilog dan paradigma pemrograman berorientasi objek. Sekarang, SystemVerilog mewakili alat verifikasi dan desain, lebih meningkatkan kemampuan Verilog.
Hingga saat ini, Verilog dan ekstensi-eksensinya terus menjadi bahasa dasar dalam industri otomasi desain elektronik (EDA), dengan ekosistem alat yang kuat yang disediakan oleh berbagai perusahaan besar seperti Synopsys, Mentor Graphics, dan Cadence.
Blok bangunan dasar dalam Verilog adalah modul. Modul berisi input, output, dan logika internal.
module my_adder(input a, input b, output sum);
assign sum = a + b;
endmodule
Verilog mendukung blok prosedural seperti always
dan initial
, yang memungkinkan logika berurutan dan inisialisasi.
always @(posedge clk) begin
q <= d; // Pada tepi naik clk, tetapkan d ke q
end
Penugasan kontinu dapat dilakukan menggunakan pernyataan assign
, yang memastikan bahwa output mencerminkan perubahan input segera.
wire out;
assign out = a & b; // Gerbang AND
Verilog memungkinkan pemodelan langsung menggunakan primitif bawaan seperti AND, OR, dan NOT.
and my_and(out, a, b); // Menginstansiasi gerbang AND
Testbenches digunakan dalam Verilog untuk mensimulasikan dan memverifikasi fungsionalitas desain.
module tb_my_adder;
reg a, b;
wire sum;
my_adder dut (.a(a), .b(b), .sum(sum)); // Menginstansiasi desain
initial begin
a = 0; b = 0; #10; // Terapkan input dan tunggu
a = 1; #10;
b = 1; #10;
end
endmodule
Verilog mendukung pernyataan kondisional seperti if
, case
untuk pengambilan keputusan dalam blok prosedural.
if (sel) begin
out = a;
end else begin
out = b;
end
Loop dapat digunakan dalam Verilog untuk penugasan dan operasi berulang.
for (i = 0; i < 8; i = i + 1) begin
// Lakukan operasi
end
Verilog memungkinkan modul yang diparameterisasi, memungkinkan desain untuk digunakan kembali dengan konfigurasi yang berbeda.
module my_multiplier #(parameter WIDTH = 8)(input [WIDTH-1:0] a, input [WIDTH-1:0] b, output [2*WIDTH-1:0] product);
assign product = a * b;
endmodule
Verilog menyediakan kemampuan untuk mendefinisikan tugas dan fungsi untuk desain kode modular.
function [7:0] add(input [7:0] a, input [7:0] b);
add = a + b;
endfunction
Penugasan non-blok menggunakan operator <=
memungkinkan pemodelan yang lebih baik dari desain sinkron.
always @(posedge clk) begin
q <= d; // Dijadwalkan untuk eksekusi nanti
end
Pengembangan Verilog difasilitasi melalui berbagai alat dan IDE. Perangkat lunak yang umum digunakan termasuk ModelSim, Synopsys VCS, dan Cadence Incisive, yang menyediakan kemampuan simulasi, sintesis, dan debugging.
Untuk membangun proyek Verilog, Anda biasanya menulis kode Verilog Anda dalam file .v
. Anda kemudian dapat memanggil simulator atau alat sintesis dari baris perintah atau dalam IDE. Misalnya, perintah kompilasi mungkin terlihat seperti ini:
vcs my_design.v -o my_sim
Setelah kompilasi, Anda dapat menjalankan simulasi dengan:
./my_sim
Verilog terutama digunakan dalam desain dan verifikasi sirkuit digital, termasuk:
Kemampuannya untuk memodelkan perangkat keras pada berbagai tingkat abstraksi membuatnya serbaguna untuk berbagai aplikasi di seluruh industri elektronik.
Verilog sering dibandingkan dengan bahasa HDL lainnya seperti VHDL. Meskipun keduanya memiliki tujuan yang sama, Verilog umumnya dianggap lebih mudah dipelajari karena sintaksisnya yang disederhanakan mirip dengan bahasa pemrograman C. VHDL lebih disukai untuk desain yang lebih verbose yang memerlukan pemeriksaan tipe yang kuat dan sering digunakan dalam aplikasi pemerintah dan dirgantara.
Ketika dibandingkan dengan bahasa pemrograman perangkat lunak seperti C dan Java, Verilog fokus pada struktur perangkat keras dan proses bersamaan, sementara bahasa perangkat lunak menangani logika berurutan dan prosedural. Python dapat digunakan untuk pengujian tingkat tinggi dan pemrosesan data simulasi tetapi tidak menyediakan metode langsung untuk deskripsi perangkat keras.
Bagi mereka yang ingin menerjemahkan desain Verilog ke format HDL lainnya, alat seperti Calyx dan perangkat lunak sumber terbuka lainnya ada untuk memfasilitasi proses ini. Namun, karakteristik spesifik Verilog dapat membuat terjemahan langsung menjadi tantangan karena perbedaan inheren dalam abstraksi dan maksud masing-masing bahasa.
Alat seperti Verilator atau Yosys telah dikembangkan untuk membantu mengonversi kode Verilog ke berbagai format atau mengoptimalkannya, dan mereka menawarkan kemampuan untuk sintesis dan simulasi. Alat-alat ini sangat berguna untuk mengintegrasikan desain Verilog ke dalam lingkungan yang berorientasi aliran.