Bahasa Pemrograman Verilog

Bahasa Verilog

Ikhtisar Verilog

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).

Aspek Historis

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.

Fitur Sintaksis Verilog

Deklarasi Modul

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

Blok Prosedural

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

Pernyataan Assign

Penugasan kontinu dapat dilakukan menggunakan pernyataan assign, yang memastikan bahwa output mencerminkan perubahan input segera.

wire out;
assign out = a & b; // Gerbang AND

Pemodelan Tingkat Gerbang

Verilog memungkinkan pemodelan langsung menggunakan primitif bawaan seperti AND, OR, dan NOT.

and my_and(out, a, b); // Menginstansiasi gerbang AND

Testbenches

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

Pernyataan Kondisional

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

Loop dapat digunakan dalam Verilog untuk penugasan dan operasi berulang.

for (i = 0; i < 8; i = i + 1) begin
    // Lakukan operasi
end

Parameter

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

Tugas dan Fungsi

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

Penugasan non-blok menggunakan operator <= memungkinkan pemodelan yang lebih baik dari desain sinkron.

always @(posedge clk) begin
    q <= d; // Dijadwalkan untuk eksekusi nanti
end

Alat Pengembang, Runtime, dan IDE Populer

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.

Membangun Proyek

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

Aplikasi Verilog

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.

Perbandingan dengan Bahasa Terkait atau Serupa

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.

Tips Terjemahan Sumber ke Sumber

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.