Verilog, dijital elektronik sistemlerin, özellikle entegre devrelerin (IC) tasarımı, simülasyonu ve doğrulanması için kullanılan bir donanım tanım dilidir (HDL). 1980'lerde geliştirilen Verilog, mühendislerin elektronik sistemlerin davranışını ve yapısını, yüksek seviyeli algoritmalardan kapı seviyesine kadar çeşitli soyutlama düzeylerinde tanımlamalarına olanak tanır. Temel rolü, dijital mantık devrelerinin simülasyonunu ve sentezini kolaylaştırmak, böylece CPU'lar, FPGA'lar (Alan Programlanabilir Kapı Dizileri) ve ASIC'ler (Uygulamaya Özel Entegre Devreler) gibi karmaşık donanım bileşenlerinin verimli tasarımını ve doğrulanmasını sağlamaktır.
Verilog, 1984 yılında Gateway Design Automation tarafından geliştirilen özel bir dil olarak ortaya çıkmıştır. İlk amacı, dijital sistemler için bir modelleme aracı sağlamaktı. 1990 yılında Cadence Design Systems tarafından satın alındı ve bu, dilin elektronik endüstrisinde daha geniş bir şekilde benimsenmesini sağladı.
1995 yılında Verilog, IEEE 1364 olarak standartlaştırıldı ve resmi bir HDL standardı haline geldi. Bu standartlaşma, Verilog'un popülaritesine önemli ölçüde katkıda bulunarak, 1980'lerde askeri ve havacılık uygulamalarında öne çıkan VHDL gibi diğer HDL'lerle rekabet etmesine olanak tanıdı.
Sonraki yıllarda, Verilog, hem Verilog hem de nesne yönelimli programlama paradigmasından özellikler içeren bir uzantı olan SystemVerilog gibi modern tasarım metodolojileri için yapılar içerecek şekilde evrim geçirdi. Şu anda, SystemVerilog hem bir doğrulama hem de bir tasarım aracı olarak Verilog'un yeteneklerini daha da artırmaktadır.
Günümüzde, Verilog ve uzantıları, elektronik tasarım otomasyonu (EDA) endüstrisinde temel bir dil olmaya devam etmekte ve Synopsys, Mentor Graphics ve Cadence gibi çeşitli büyük firmalar tarafından sağlanan sağlam bir araç ekosistemine sahiptir.
Verilog'daki temel yapı taşı modüldür. Modüller, girişler, çıkışlar ve iç mantık içerir.
module my_adder(input a, input b, output sum);
assign sum = a + b;
endmodule
Verilog, sıralı mantık ve başlatma için always
ve initial
gibi prosedürel blokları destekler.
always @(posedge clk) begin
q <= d; // clk'nin yükselen kenarında, d'yi q'ya ata
end
Sürekli atamalar, çıkışın girişlerdeki değişiklikleri hemen yansıtmasını sağlayan assign
ifadesi kullanılarak yapılabilir.
wire out;
assign out = a & b; // VE kapısı
Verilog, AND, OR ve NOT gibi yerleşik ilkelere dayalı doğrudan modelleme yapmaya olanak tanır.
and my_and(out, a, b); // Bir VE kapısı oluşturur
Test tezgahları, bir tasarımın işlevselliğini simüle etmek ve doğrulamak için Verilog'da kullanılır.
module tb_my_adder;
reg a, b;
wire sum;
my_adder dut (.a(a), .b(b), .sum(sum)); // Tasarımı oluştur
initial begin
a = 0; b = 0; #10; // Girişleri uygula ve bekle
a = 1; #10;
b = 1; #10;
end
endmodule
Verilog, prosedürel bloklarda karar verme için if
, case
gibi koşullu ifadeleri destekler.
if (sel) begin
out = a;
end else begin
out = b;
end
Verilog'da tekrarlayan atamalar ve işlemler için döngüler kullanılabilir.
for (i = 0; i < 8; i = i + 1) begin
// İşlemleri gerçekleştir
end
Verilog, farklı yapılandırmalarla yeniden kullanılabilir tasarımlar sağlamak için parametreli modüllere olanak tanır.
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, modüler kod tasarımı için görevler ve fonksiyonlar tanımlama yeteneği sağlar.
function [7:0] add(input [7:0] a, input [7:0] b);
add = a + b;
endfunction
<=
operatörü kullanarak yapılan engellemeyen atamalar, senkron tasarımların daha iyi modellenmesini sağlar.
always @(posedge clk) begin
q <= d; // Daha sonra yürütülmek üzere planlandı
end
Verilog geliştirme, çeşitli araçlar ve IDE'ler aracılığıyla kolaylaştırılmaktadır. Yaygın olarak kullanılan yazılımlar arasında ModelSim, Synopsys VCS ve Cadence Incisive bulunmaktadır; bu yazılımlar simülasyon, sentez ve hata ayıklama yetenekleri sunar.
Bir Verilog projesi oluşturmak için genellikle Verilog kodunuzu .v
dosyalarında yazarsınız. Daha sonra bir simülatör veya sentez aracını komut satırından veya bir IDE içinde çağırabilirsiniz. Örneğin, bir derleme komutu şu şekilde görünebilir:
vcs my_design.v -o my_sim
Derlemeden sonra simülasyonu şu şekilde çalıştırabilirsiniz:
./my_sim
Verilog, dijital devrelerin tasarımı ve doğrulanmasında yaygın olarak kullanılmaktadır, bunlar arasında:
Farklı soyutlama düzeylerinde donanımı modelleme yeteneği, onu elektronik endüstrisindeki birçok uygulama için çok yönlü hale getirir.
Verilog, genellikle VHDL gibi diğer HDL dilleriyle karşılaştırılmaktadır. Her ikisi de benzer amaçlara hizmet etse de, Verilog genellikle C programlama diline benzer basitleştirilmiş sözdizimi nedeniyle öğrenmesi daha kolay olarak kabul edilir. VHDL, güçlü tür kontrolü gerektiren daha ayrıntılı tasarımlar için tercih edilir ve genellikle hükümet ve havacılık uygulamalarında kullanılır.
C ve Java gibi yazılım programlama dilleriyle karşılaştırıldığında, Verilog donanım yapıları ve eşzamanlı süreçlere odaklanırken, yazılım dilleri sıralı ve prosedürel mantığı işler. Python, yüksek seviyeli test ve simülasyon verilerinin işlenmesi için kullanılabilir, ancak donanım tanımı için doğrudan bir yöntem sağlamaz.
Verilog tasarımlarını diğer HDL formatlarına çevirmek isteyenler için Calyx ve diğer açık kaynak yazılımlar gibi araçlar bu süreci kolaylaştırmak için mevcuttur. Ancak, Verilog'un belirli özellikleri, her dilin soyutlama ve niyetindeki içsel farklılıklar nedeniyle doğrudan çevirileri zorlaştırabilir.
Verilog kodunu çeşitli formatlara dönüştürmek veya optimize etmek için Verilator veya Yosys gibi araçlar geliştirilmiştir ve bu araçlar sentez ve simülasyon yetenekleri sunar. Bu araçlar, Verilog tasarımlarını akış odaklı ortamlara entegre etmek için özellikle faydalıdır.