Verilog pertama kali dikembangkan sebagai HDL (hardware description language) berlisensi kepemilikan untuk spesifikasi dan simulasi sistem digital oleh Gateway Design Automation Inc. sekitar 1984. Ada rumor bahwa versi awal dari bahasa ini didesain dengan mengambil fitur-fitur dari bahasa HDL yang paling popular pada waktu itu yang disebut HiLo, seperti halnya dari bahasa komputer tradisional seperti C. Pada waktu itu, Verilog tidak distandarisasi dan bahasanya dimodifikasi di hampir semua revisinya yang keluar antara 1984 sampai 1990.
Di akhir 1990, Cadence Design System, memutuskan untuk membeli Gateway Automation System. Cadence sekarang menjadi pemilik dari bahasa Verilog dan produk Gateway lainnya, dan melanjutkan untuk memasarkan Verilog sebagai sebuah bahasa sekaligus simulator. Pada saat yang bersamaan, Synopsys memasarkan metodologi desain top-down, menggunakan Verilog. Ini merupakan sebuah kombinasi yang mantap.
Pada 1990, Cadence mempublikasikan bahwa jika Verilog tetap menjadi bahasa yang tertutup, tekanan akan standarisasi akan mengakibatkan industri beralih ke VHDL. Akibatnya, Cadence membentuk Open Verilog International (OVI), dan pada 1991 memberikan dokumentasi untuk Verilog Hardware Description Language. Inilah titik baliknya Verilog menjadi bahasa yang “open“.
Lambat laun disadari bahwa jika ada terlalu banyak perusahaan di dalam pasar untuk Verilog, setiap orang akan mengubah bahasa tersebut untuk kepentingan mereka sendiri. Ini akan bertentangan dengan tujuan utama dari melepas bahasa ini ke domain publik. Alhasil pada 1994, IEEE 1364 working group dibentuk untuk mengubah OVI LRM (Language Reference Manual) ke standar IEEE. Kemudian Verilog menjadi sebuah standar IEEE pada Desember 1995.
Ketika Cadence memberikan LRM kepada OVI, beberapa perusahaan mulai bekerja pada Verilog simulator. Pada 1992, Verilog simulator pertama diumumkan. Yang paling berhasil dari semua simulator ini adalah VCS (Verilog Compiled Simulator), dari Chronologic Simulation. Ini merupakan compiler yang sesungguhnya, bukan sebuah interpreter, layaknya Verilog-XL. Alhasil, kecepatan eksekusi simulasi menjadi lebih cepat.
Popularitas dari Verilog dan PLI meningkat secara exponensial. Verilog sebagai sebuah HDL lebih digemari daripada VHDL yang strukturnya lebih baik. Hanya masalah waktu sebelum orang-orang di OVI menyadari kebutuhan akan sebuah standar yang lebih bisa diterima secara universal. Kemudian OVI meminta IEEE untuk membentuk sebuah komite kerja untuk mempersiapkan Verilog sebagai sebuah standar IEEE. Komite kerja 1364 dibentuk di pertengahan 1993 dan pada 14 Oktober 1993, pertemuan pertama dimulai.
Standarnya, yang mengombinasikan sintaks bahasa Verilog dan PLI di dalam sebuah single volume, dikeluarkan pada May 1995 dan sekarang dikenal sebagai IEEE Std. 1364-1995.
Setelah beberapa tahun, fitur-fitur baru ditambahkan ke Verilog, dan versi barunya disebut Verilog 2001. Versi ini telah memperbaiki banyak masalah yang Verilog 1995 miliki. Versi ini disebut 1364-2001.
Design flow menggunakan Verilog ditunjukkan pada gambar berikut :
gambar 1 : design flow menggunakan Verilog
Deskripsi Verilog dapat terdiri dari beragam level abstraksi dan dapat digunakan untuk tujuan berbeda pada beragam tahap pada proses mendesain seperti gambar berikut ini :
gambar 2 : level abstraksi dari Verilog
Diagram di bawah ini menunjukkan sebuah pandangan yang sudah sangat disederhanakan dari proses mendesain system elektronik dengan menggunakan Verilog.
gambar 3 : proses mendesain dengan menggunakan Verilog
Verilog mempunyai beberapa kegunaan bagi desainer, salah satunya adalah Verilog mendukung hierarki struktural dengan memperbolehkan sebuah system untuk dispesifikasikan sebagai sebuah hierarki dari modul-modul yang terinterkoneksi. Setiap modul dapat dideskripsikan dalam satu dari dua cara, yaitu dengan menggunakan modul-modul lain yang levelnya lebih rendah, atau dengan menspesifikasikan pola tingkah lakunya sebagai sebuah program.
Hierarki behavioral juga didukung oleh Verilog. Sebuah proses dari level hierarki apapun dapat membuat subproses-subproses yang berjalan bersamaan, atau dengan memecahnya menjadi sekumpulan prosedur.
Komunikasi diimplementasikan di Verilog dengan pendefinisian model memori yang di-shared, menggunakan kabel yang menghubungkan port-port pada modul, register, dan memori untuk membangun komunikasi antara proses. Verilog juga dapat mendukung sinkronisasi dalam beberapa cara, sinkronisasi dapat diimplementasikan menggunakan konstruksi percabangan dan join, dan dengan melihat perubahan nilai dari event juga dapat digunakan untuk sinkronisasi komputasi pada proses-proses yang berbeda. Contohnya :
@(negedge) clock #10 q=d;
gambar 4 : Contoh sintaks untuk sinkronisasi pada Verilog
Pernyataan di atas bermakna bahwa nilai q akan diperbarui dengan nilai d pada 10 unit waktu setelah negative edge dari clock. Pernyataan tersebut dapat juga dinyatakan sebagai berikut :
Wait (clock=0);
#10 q=d;
gambar 5 : Bentuk lain dari sinkronisasi pada Verilog
Spesifikasi pewaktuan (timing) didukung oleh Verilog dengan pemodelan delay dari gerbang dan jaringan. Ini bermakna untuk setiap kenaikan, penurunan dan peniadaan delay, Verilog mengizinkan desainer untuk menspesifikasikan nilai maksimum, minimum atau nilai tertentu. Sebagai tambahan, Verilog memperbolehkan desainer untuk menspesifikasikan delay yang menunjukkan kapan nilai dalam pernyataan assignment akan diperbarui. Contohnya saja dalam pernyataan #10 q = d, nilai q akan diperbarui pada 10 satuan waktu setelah negative edge dari clock.
Verilog juga dapat menangani exception dengan menggunakan pernyataan disable yang akan menonaktifkan blok dari sequential statement yang disebutkan dan mentransfer kontrol ke pernyataan yang mengikuti blok yang disebutkan sebelumnya.
Sumber :
- http://www.doulos.com/knowhow/verilog_designers_guide
- Vahid, Frank, Daniel D. Gajski, Sanjiv Narayan & Jie Gong. 1994. Specification and Design of Embedded Systems.Upper Saddle River : Prentice Hall
6 responses to “verilog”
ameenaelbadr
January 11th, 2010 at 12:40
semakin penasaran aja ne..makin asyik dan menantang…maw nanya lagi, untuk membuat timing diagram dengan bahasa verilog pake apa ya/, saya dah coba make tbw yang ada di xilinx, cuma bingung juga maw ngeset clock dan time yang dipakai, maksih maw share ilmunya..^_^..
janita kinsi
January 12th, 2010 at 20:49
kalo timing diagram sih ga bisa otomatis digenerate.. yang adanya juga keluaran program di-dump dulu ke sebuah file, biasanya sih formatnya “.vcd”. trus ntar “.vcd” ini dilihat pake vcd viewer. cara nge-dump-nya pada module top, setelah monitor ditambahkan :
$dumpfile("nama_file");
$dumpvars(n, module_yang_di-dump);
note : n menyatakan jumlah variabel yang di dump ke file, modul_yang_di-dump bisa apa aja, bisa module top itu sendiri, ato bisa juga module2 yang digunakan oleh top. terserah kita tergantung nilai variabel mana yang ingin kita bandingkan ato kita teliti. kalo tbw, saya blm pernah menggunakan.
kalo mo ngeset clock ato variablenya bisa kita set manual ato diatur biar berubah setiap rentang waktu tertentu. contohnya kyk di bawah ini
module register(in, out, clk, ld);
output [2:0] out;
input [2:0] in;
input clk, ld;
reg [2:0] out;
initial begin
out = 3'd0;
end
always @(posedge clk)
begin
if (ld==1)
begin
out inisialisasi awal
ld = 1'b1;
end
always begin
#10; --> pengesetan clock otomatis berubah setiap 10 satuan waktu
clk = ~clk;
end
always begin
#5;
ld = ~ld;
end
initial begin
in = 3'd1; --> contoh pengesetan variabel manual, kita tentukan sendiri nilainya setelah rentang waktu yang kita tentukan sendiri
#5;
in = 3'd2;
#5
in = 3'd3;
#5;
in = 3'd4;
#5;
in = 3'd5;
#5;
in = 3'd6;
#5;
in = 3'd7;
$finish;
end // initial begin
initial begin
$monitor("in=%d, clk=%d, ld=%b, out=%d, time=%t\n", in, clk, ld, out, $time);
$dumpfile("reg.vcd");
$dumpvars(14, top);
end
endmodule // top
ameenaelbadr
December 15th, 2009 at 23:56
maw nanya:
kalo’ syntax #100 y…tanda # itu artinya apa?, trus assign juga maksudnya apa?..
janita kinsi
December 16th, 2009 at 14:52
#100 itu maksudnya system akan menunggu selama 100 time unit sebelum melakukan task yang didefinisikan selanjutnya.. kalo assign, kalo yang sepemahaman saya, digunakan untuk memberikan nilai keluaran pada variabel bertipe output. namun pada kasus penggunaan nama variabel yang sama untuk tipe output dan reg (pada Verilog, hal ini dimungkinkan), kata assign tidak perlu dibubuhkan. contoh :
module slt(x_i, y_i, x_i_lt_y_i);
input [2:0] x_i, y_i;
output x_i_lt_y_i;
reg x_i_lt_y_i;
always @(x_i or y_i)
begin
if(x_i < y_i)
begin
assign x_i_lt_y_i = 1;
end
else
begin
assign x_i_lt_y_i = 0;
end
end
endmodule // slt
karena x_i_lt_y_i bertipe reg sekaligus output, maka kata "assign" boleh tidak dibubuhkan,, CMIIW 😀
Baskoro
November 23rd, 2009 at 20:59
wew,,belajar bahasa pemrograman.. ketemunya dengan flow diagram…
hehe.. bingung
janita kinsi
December 2nd, 2009 at 09:16
hehe.. itu kan cuma overviewnya aja mas.. jadi ga ada syntax2an..