Donanım tanımlama dili

**Donanım tanımlama dili** veya **DTD**, elektronik devrelerin tanımlanması amacıyla kullanılan herhangi bir bilgisayar dilinin sınıfına verilen addır. Donanım tanımlama dili, devrenin yürüttüğü işlemi, tasarımını ve benzetim (simülasyon) yoluyla doğrulamasını gerçekleştirebilir.

Yazılım programlama dilinden farklı olarak, DTD'nin sözdizimi ve semantiği donanımın birinci özelliği olan zaman ve uyumluluk açısından açık ifadelere yer vermektedir. Sadece devre bağlantılarını ifade etmeye yarayan ve bloklar arasındaki hiyerarşiyi tanımlamaya yarayan dillere netlist denmektedir.

DTD önceleri herhangi bir donanım için çalıştırılabilir özelliklerin benzetimini yapmak amacıyla kullanılıyordu. Zamana bağlı işlem yapan benzetim programları sayesinde bir donanım parçası fiziksel olarak üretilmeden önce tasarımcı tarafından test edilebiliyordu. Bu çalıştırılabilirlik DTD'nin bir programlama dili olduğu hissini vermiştir.

Donanım anlamı C++ gibi geleneksel programlama dilleri ile kazanılabilir; fakat, C++ dilinde zamanı açık bir şekilde ifade etmek mümkün olmadığından düzgün bir donanım tanımlama dili değildir.

Herhangi uygun bir donanım tanımlama dili ile yazılmış kod, sentezleyici adı verilen bir yazılım tarafından işlenir. Bu işlem koddan mantıksal işlemlerin çıkarılması ve buna eş değer bir netlist yaratılarak donanımın taslağının oluşturulması işlemidir. Bu işlem koddaki herhangi bir zaman yapısının ihmal edilmesi ile elde edilir. Bir dilin bir altkümesinin sentezlenebilir olması o dilin bir DTD olduğunu temin etmez.

Bir sistemi DTD kullanarak tasarlamak, bir programlama dili ile yapmaktan çoğu zaman daha zor ve daha çok zaman gerektiren bir Çişlemdir. Bu sebeple C programlama dili kodunu otomatik olarak DTD'ye çevrilmesi üzerinde birçok uğraş verilmiştir fakat 2004 yılı itibarıyla bu işlemin yüksek bir ticari başarıya ve kullanıma ulaştığı söylenemez.

## Donanım tanımlama dillerinin tarihçesi
İlk donanım tanımlama dilleri olan ISP (Carnegie Mellon üniversitesi) ve KARL (Kaiserslautern Üniversitesi) 1977 yılı civarında bulunmuştur. Bu diller daha çok tasarımın giriş ve çıkışı arasındaki bağlantıları tanımlayan yazılım programlama dilleri gibiydi. Bu sebeple tasarım benzetimi için kullanılabilirken, sentezlenemezlerdi.(kitap bölümü)

İlk modern DTD, Verilog 1985 yılında Gateway Design Automation tarafından bulunmuştur. Daha sonraları Cadence Design Systems gelecek on senenin DTD benzetim standardı haline gelecek olan Verilog-XL'nin haklarını aldı. 1987 yılında Amerika Savunma Dairesi tarafından yapılan bir istek ile VHDL (Very High Speed Integrated Circuit Hardware Description Language) doğdu. DTD benzetimleri mühendislere şematik seviyesinden daha ileri bir seviyede çalışma imkânı vermiş ve tasarım sığasını yüzlerce transistörden binlerceye yükseltmiştir.

Donanım tanımlama dillerinin mantık kapıları seviyesinde sentezlenebilmesi sayısal tasarım alanında DTD'leri ön plana çıkarmıştır. Sentezleme araçları DTD kaynak dosyalarını (yazmaç aktarımı seviyesi adı verilen bir biçimde yazılmış olan) derleyerek kapı/transistor seviyesinde üretime hazır netlist tanımlamaları yaratmaktadır.

Verilog ve VHDL senelerdir sayısal tasarımın en önde gelen iki donanım tanımlama dilidir fakat ikisi de hemen hemen aynı sınırlamalara sahiptir. Örneğin iki DTD analog veya karışık-sinyal devrelerinin benzetimleri için uygun değillerdir. Özyinelemeli kurulan mantık yapıları için gerekli tanımlamalara sahip değillerdir. Bu amaçla ortaya çıkan özelleşmiş DTD'ler olsa dahi hiçbiri VHDL/Verilog'un yerini tutamamıştır.

Uzun bir süredir DTD'leri geliştirmek için büyük bir emek harcanmaktadır. Verilog'un IEEE 1800-2005 Systemverilog olarak bilenen son sürümü daha iyi rastgele hale getirilmiş test, tasarım hiyerarşisi ve tekrar kullanım adına birçok yenilik (sınıflar, rastgele değişkenler vs.) içermektedir. Böylece hem VHDL hem de Verilog sahip oldukları yeniliklerle gelecek senelerde de aktif olarak kullanılacaktır.

## DTD kullanarak tasarım
Modern sayısal devre tasarımlarının büyük çoğunluğu istenilen devrenin, aygıtın ve sistemin donanım tanımlama dili ile gerçekleştirilmiş hali ile yürümektedir.

Çoğu tasarıma geleneksel olarak kâğıt ve kalem ile istenilenlerin bir özeti ve mimari düzeyinde şemalarla başlanır. Donanım tanımlama dili ile tanımlama işlemi genel olarak devrenin yapısına ve kodu yazanın geçmişine bağlıdır. Kontrol ve karar verme yapıları genel olarak akış diyagramları veya durum diyagramları ile modellenir. Tasarımcılar kendi kendini otomatik olarak tekrarlayan devre yapıları için DTD içerisinde komut dizisi dillerini (PERL gibi) dahi kullanabilir.

Tasarımın ana hatları gerçekleşmeye başlayınca, yazılan kod bir gözden geçirmeye tabi tutmalıdır. Sentezlemeye hazırlanırken DTD otomatik kontrol edicilerden geçer. Bu kontrol ediciler genel olarak yapılan mantıksal hataları (kısa devre veya bağlanmamış bağlantı noktaları gibi) saptama amacıyla kullanılır.

Endüstriyel bir deyişle, DTD tasarımı sentezlemeden sonra sona erer. Sentezleme aracı DTD tanımlamasını kapıların netlisti şeklinde haritaladıktan sonra, netlist son kısma gönderilir. Fiziksel teknolojiye göre (FPGA veya çeşitli ASIC türleri olabilir) donanım tanımlama dilinin görevi devam edebilir veya etmeyebilir. Eğer sonuçta silikon bir yonga üretilecekse tasarım veritabanı daha çok üretim teknolojisi ile ilgili verilerle yüklü olur.

## DTD kodunun benzetimi ve hata ayıklaması
DTD kodunun benzetimi, tasarımın amacı ile ilgili doğrulamayı geçmesini sağlamasının yanında tasarımın gerekli işlemi doğru yaptığını gösteren önemli bir basamaktır. Aynı zamanda farklı tasarım seçenekleri bu basamakta denenerek mimari açısından da gelişmeyi sağlayabilecek yararlar edinilebilir. Bu sebeplerden dolayı benzetim basamağı başarılı bir DTD tasarımı için çok önemlidir.

Modern DTD benzeticilerinin birçok hata ayıklama aracıyla birlikte grafiksel arayüzü bulunmaktadır. Bu araçlar tasarımcıya benzetimi herhangi bir zamanda durdurup yeniden başlatma koddan bağımsız bir şekilde kesme noktası koyabilme gibi avantajlar sağlamaktadır.

Tasarım doğrulaması genelde tasarım işleminin en çok zaman alan kısmıdır. Bunun nedeni tasarımın işlevsel gerekliliğin tasarımcı tarafından farklı yorumlanması olabileceği gibi DTD dilinin net olmayan ifadelerinden de kaynaklanabilir. Bir DTD tanımlaması aynı zamanda bir donanımda da ilk örnek (prototip) haline getirilip test edilebilir. Programlanabilir mantık aygıtı ile gerçekleştirilen bu işlem benzetime göre pahalı olsa da, tasarımın gerçek çalışan halinin elde edilmesi daha tutarlı sonuçlar vermektedir. İlk örnekleme, eldeki tasarımı, yavaş çalışan FPGA'lerde gerçekleştirilse dahi, en hızlı test/benzetim şeklidir.

## Diller
### Sayısal Devre tasarımı

En çok bilinen, kullanılan ve desteklenen DTD dilleri:
* VHDL
* Verilog

Diğerleri:

* Advanced Boolean Expression Language (ABEL)
* AHDL (Altera HDL, Altera'nın tescilli dili)
* Atom  (Haskell üzerine kurulmuş yüksek seviyeli bir DTD)
* Bluespec (Haskell üzerine kurulmuş bir DTD. Şu anda SystemVerilog sözdizimine sahiptir.)
* Confluence  (Fonksiyonel bir DTD fakat devamı gelmemiştir.)
* CUPL (Logical Devices, Inc. firmasının tescilli dili)
* HDCaml  (Objective Caml temelli)
* Hardware Join Java(404 Error) (Join Java temelli)
* HML (SML temelli)
* Hydra  (Haskell temelli)
* JHDL (Java temelli)
* Lava  (Haskell temelli)
* Lola (eğitim amaçlı basit bir dil)
* MyHDL (Python temelli)
* PALASM (Programmable Array Logic (PAL) aygıtları için)
* Ruby (donanım tanımlama dili) 
* RHDL (Ruby programlama dili temelli)
* CoWareC, CoWare tarafından yaratılmış C-temelli DTD. SystemC kullanımı amacıyla kullanılmamaktadır.
* SystemVerilog, sistem seviyesi tasarım ve doğrulama iyileştirmeleriyle Verilog'un bir üst kümesi gibi görülmektedir.
* SystemC, C++ kütüphanelerinin bir sistem tanımlama dili şeklinde standartlaşmış hali.

## Dış bağlantılar
* Research labs değişik üniversitelerde.
* 
* Lava 
* Verilog-AMS Technical Subcommittee 

## Kaynakça