Donanım tasarım dilleri, dijital devre tasarımı yapılırken istenilen boolean fonksiyon çıktısını en verimli şekilde verecek devrenin donanımsal yapısını hesaplamada kullanılır. Diğer bir deyişle devre içerisinde bulunması gereken bileşenlerin ve bu bileşenlerin birbirleri ile olan bağlantılarının ifade edildiği ağ-listesinin (netlist) oluşturulması için mantık sentez araçları (logic synthesis tools) tarafından kullanılır. Oluşturulan bu ağ-listesi ile transistor seviyesinde devre simülasyonu ve doğrulamaları yapılır. Bu işlemlerin sonucuna göre gerekli durumlarda tasarım aşamasına dönülerek bulunan hatalar giderilir.
Daha önceleri devre tasarımcıları, belli bir fonksiyonu dijital devreler üzerinde gerçeklerken bunu bir dizi mantık kapısıyla ifade etmek için boolean denklemlerini el ile çözmekteydi. Ancak bu hesaplamaların yoğun mesai gerektirmesi ve insanın hata yapma faktörüne bağlı olması bu işlemi pek verimli kılmıyordu. Ayrıca bu hesaplamaların yarı iletken seviyesinde kullanılan elektronik teknolojisine de bağlı olarak değişmesi farklı teknolojiye sahip devreler için tekrar hesaplama yapılmasını gerektiriyordu. Bu sebeplerden dolayı tasarımcılar, daha üst soyutlama katmanında çalışabilecekleri bir sistem geliştirmeye yönlendi. Donanım tanımlama dillerinin ilk örnekleri 1950 yıllarında kullanılmaya başlasa da 1980’lerin sonuna doğru özellikle Verilog ve VHDL (VSIC HDL) dillerinin gelişmesi ve standart haline gelmesiyle yaygınlaşmaya başladı.
VERİLOG
İngilizce “Verification” (doğrulama) ve “Logic” (mantık) kelimelerinin birleşiminden türetilmiştir. Verilog dili sentaks itibariyle C diline benzemekte ve VHDL’e göre daha sade bir yapıdadır. 1984 yılında Gateway Desing Automation’da tasarlanan ve sadece şirket özelinde kullanılan Verilog dili, 1989 yılında şirketin Cadence tarafından alınmasından sonra 1990 yılında herkese açık bir standart haline gelmiştir. 1995 yılında ise IEEE standardı olarak kabul edilmiştir.
Verilogda iki farklı veri tipi grubu vardır. Bunlar “net (ağ) veri tipi” ve “değişken (variable) veri tipi” dir. Net veri tip, temel anlamda devre bileşenlerini bağlayan “Tel” leri (wire) ifade etmek için kullanılır. Aslında kendi başlarına bir değer ifade etmezler bu yüzden sürücü tarafından bir değer atanması gerekir. Sürücünün değeri değiştiğinde net veri tipinin de değeri değişir. Değişken veri tipi ise barındırdığı değeri herhangi bir atama yapılana kadar koruyan, yapılan atamaya göre de değerini değiştiren veri tipidir. Bu veri tipi, geleneksel yazılım dillerindeki gibi ardışık olarak çalışan atamalarda kullanılır yani eş zamanlılık yoktur.
Verilogda bir değerin alabileceği değer kümesi aşağıda Tablo 1 ile gösterilmiştir.
Değer | Açıklama |
‘0’ | Sayısal sıfır, mantıksal sıfır, mantıksal yanlış |
‘1’ | Sayısal bir, mantıksal bir, mantıksal doğru |
‘X’ | Bilinmeyen bir mantıksal değer |
‘Z’ | Yüksek empedans |
Verilogda Kullanılan Değerler Kümesi
Verilogda yapılan değer atamalarının ardışık ya da eş zamanlı olarak yapılmasını kontrol amaçlı 'Blocking' ve 'Non-Blocking' yapısı mevcuttur. 'Blocking' yapısı ile atamaların birbirinden bağımsız ve ardışık sırada yapılacağı belirtilir. 'Non-Blocking' yapısı ise atamalar arasında bir zaman farklı olmadığını ve atamaların eş zamanlı olarak değerlendirileceğini belirtir. Bu iki yapının çıktı olarak ürettiği devre birbirinden çok farklı olabilmektedir.
'Non-Blocking' yapısına örnek bir kod parçası aşağıda yer almaktadır. Bu kod ile oluşturulan devre şeması Şekil 1 ile gösterilmiştir.
always @(posedge clk) begin a1 <= b; a2 <= a1; a3 <= a2; end
Non-Blocking Yapısıyla Oluşturulan Devre Şeması (Şekil yazar tarafından oluşturulmuştur.)
Yukarıdaki koda eşdeğer 'Blocking' yapısında oluşturulmuş örnek kod parçası aşağıda verilmiştir. Bu kod ile oluşturulan devre şeması Şekil 2 ile gösterilmiştir.
always @(posedge clk) begin a1 = b; a2 = a1; a3 = a2; end
Blocking Yapısıyla Oluşturulan Devre Şeması (Şekil yazar tarafından oluşturulmuştur.)
VHDL
Açılımları “Very High Speed Integrated Circuit” (çok yüksek hızlı entegre devre) ve “Hardware Description Language” (donanım tanımlama dili) olan VSIC ve HDL kelimelerinin birleşiminden oluşmaktadır. ADA diline benzeyen ayrıntılı bir sentaks yapısına sahiptir. VHDL ilk kez ABD savunma bakanlığı tarafından 1981 yılında geliştirilmiştir. 1987 yılında IEEE tarafında VHDL’in standart haline gelmesiyle beraber günümüze kadar dil üzerinde birçok güncelleme de yapılmıştır.
VHDL’de sıkça kullanılan veri tiplerinden ikisi “bit” ve “std_logic” veri tipleridir. Bit veri tipi sadece ‘0’ ve ‘1’ değerleri alabilirken, std_logic birçok farklı değer alabilir. Std_logic’in alabileceği değerler aşağıda Tablo 2 ile gösterilmiştir.
Değer | Açıklama |
‘U’ | Daha değeri girilmemiş sinyal |
‘X’ | Değeri bilinmeyen sinyal |
‘0’ | Mantıksal ‘sıfır’ değeri |
‘1’ | Mantıksal ‘bir’ değeri |
‘Z’ | Mantıksal ‘bir’ değeri |
‘W’ | Zayıf sinyal, mantıksal değer okuması yapmak mümkün değil |
‘H’ | Sinyal zayıf pull-down’a bağlı, değeri sıfıra gider |
‘L’ | Sinyal zayıf pull-down’a bağlı, değeri bire gider |
‘-’ | Önemsiz |
VHDL'de Kullanılan Değerler Kümesi