# VHDL (Very High Speed Integrated Circuit Hardware Description Language)
**VHDL (Very High Speed Integrated Circuit Hardware Description Language)**, karmaşık dijital sistemlerin modellenmesi, tasarlanması ve simülasyonu için kullanılan bir donanım tanımlama dilidir (HDL). VHDL, özellikle [FPGA](https://www.nedemek.page/kavramlar/fpga) (Field-Programmable Gate Array) ve [ASIC](https://www.nedemek.page/kavramlar/asic) (Application-Specific Integrated Circuit) gibi programlanabilir lojik cihazların tasarımında yaygın olarak kullanılır.
## Tarihçe
VHDL, 1980'lerin başında, Amerikan Savunma Bakanlığı'nın (DoD) sponsorluğunda, karmaşık entegre devrelerin (IC'ler) dokümantasyonunu standartlaştırmak ve tedarik süreçlerini iyileştirmek amacıyla geliştirilmiştir. İlk standart versiyonu 1987'de [IEEE](https://www.nedemek.page/kavramlar/ieee) (Institute of Electrical and Electronics Engineers) tarafından yayınlanmıştır (IEEE 1076-1987). Daha sonraki yıllarda, dilin yeteneklerini geliştirmek ve yeni tasarım ihtiyaçlarına cevap verebilmek için çeşitli revizyonlar yapılmıştır:
* **IEEE 1076-1993:** Önemli dil iyileştirmeleri ve yeni özellikler eklenmiştir.
* **IEEE 1076-2002:** Nesne yönelimli programlama yetenekleri eklenmiştir.
* **IEEE 1076-2008:** Daha fazla dil iyileştirmesi ve doğrulama yetenekleri eklenmiştir.
VHDL'nin gelişimi, donanım tasarımındaki karmaşıklığın artmasıyla paralel olarak devam etmektedir.
## Temel Kavramlar
VHDL, bir donanım sistemini matematiksel olarak tanımlamak için kullanılan bir dildir. VHDL'de bir tasarım, aşağıdaki temel yapı taşlarından oluşur:
* **Entity (Varlık):** Bir tasarımın dış dünyayla olan arayüzünü (giriş ve çıkış portları) tanımlar. Örneğin, bir [toplayıcı](https://www.nedemek.page/kavramlar/toplayıcı) entitesinin iki giriş ve bir çıkışı olabilir.
* **Architecture (Mimari):** Bir entitenin nasıl çalıştığını (işlevselliğini) tanımlar. Mimari, bir entitenin davranışını, veri akışını veya yapısını tanımlayabilir. Birden fazla mimari bir entite için tanımlanabilir.
* **Configuration (Yapılandırma):** Bir entite ve mimari çiftini bir araya getirerek, simülasyon veya sentez için kullanılacak belirli bir tasarımı oluşturur. Büyük projelerde, farklı entitelerin ve mimarilerin kombinasyonlarını yönetmek için kullanılır.
* **Package (Paket):** Tekrar kullanılabilir tür tanımlamaları, alt programlar (fonksiyonlar ve prosedürler) ve sabitler gibi öğeleri içeren bir kütüphane birimidir. Kodun modülerliğini ve tekrar kullanılabilirliğini artırır.
* **Library (Kütüphane):** Önceden derlenmiş paketleri ve entiteleri içeren bir depolama alanıdır. Standart VHDL kütüphaneleri (örneğin, `ieee.std_logic_1164`) sıklıkla kullanılır.
## Veri Türleri
VHDL, farklı donanım sinyallerini ve verilerini temsil etmek için çeşitli veri türlerini destekler:
* **`std_logic` ve `std_ulogic`:** Dijital sinyalleri temsil etmek için en yaygın olarak kullanılan veri türleridir. `std_logic`, dokuz farklı durumu temsil edebilir (0, 1, Z (yüksek empedans), X (belirsiz), U (başlatılmamış), W (zayıf bilinmeyen), L (zayıf 0), H (zayıf 1), - (umursama)).
* **`integer`:** Tamsayı değerlerini temsil eder.
* **`real`:** Kayan noktalı sayı değerlerini temsil eder.
* **`boolean`:** Mantıksal değerleri (TRUE veya FALSE) temsil eder.
* **`bit`:** 0 veya 1 değerini temsil eder.
* **`bit_vector` ve `std_logic_vector`:** Bit veya std_logic değerlerinden oluşan dizileri temsil eder.
* **`signed` ve `unsigned`:** İşaretli veya işaretsiz tamsayıları temsil eder (IEEE numeric_std kütüphanesinde tanımlanmıştır).
## Dil Yapısı
VHDL, hem davranışsal hem de yapısal tasarım yaklaşımlarını destekler.
* **Davranışsal Modelleme:** Bir tasarımın işlevselliğini, sinyallerin zamanla nasıl değiştiğini tanımlayarak açıklar. `process` ifadeleri, `if`, `case`, `loop` gibi kontrol yapıları ve sinyal atamaları bu yaklaşımın temelini oluşturur.
* **Veri Akışı Modelleme:** Bir tasarımın verilerin nasıl işlendiğini ve aktarıldığını tanımlar. `concurrent signal assignment` (eşzamanlı sinyal ataması) ve `generate` ifadeleri bu yaklaşımda kullanılır.
* **Yapısal Modelleme:** Bir tasarımın, alt bileşenlerinin (entitelerin) birbirine nasıl bağlandığını tanımlar. Bir tasarım, önceden tanımlanmış entitelerin örneklenmesi (instantiation) yoluyla oluşturulur.
## Tasarım Akışı
VHDL ile donanım tasarımı genellikle aşağıdaki adımları içerir:
1. **Spesifikasyon (Tanımlama):** Tasarımı yapılacak sistemin gereksinimlerinin belirlenmesi.
2. **Modelleme:** VHDL kullanarak sistemin modellenmesi (entite ve mimarilerin tanımlanması).
3. **Simülasyon:** Modelin doğrulanması ve hataların giderilmesi. [ModelSim](https://www.nedemek.page/kavramlar/modelsim) gibi simülasyon araçları kullanılır.
4. **Sentez:** VHDL kodunun, belirli bir hedef teknolojiye (örneğin, [FPGA](https://www.nedemek.page/kavramlar/fpga) veya [ASIC](https://www.nedemek.page/kavramlar/asic)) uygun bir netlist'e (gate-level representation) dönüştürülmesi.
5. **Yerleştirme ve Yönlendirme (Place and Route):** Netlist'in, hedef cihaz üzerinde fiziksel olarak yerleştirilmesi ve bağlanması.
6. **Doğrulama (Verification):** Tasarlanan donanımın, belirtilen gereksinimleri karşıladığının doğrulanması.
## Avantajları
VHDL'nin donanım tasarımında kullanılmasının birçok avantajı vardır:
* **Standart Dil:** [IEEE](https://www.nedemek.page/kavramlar/ieee) tarafından standartlaştırılmış bir dil olması, farklı araçlar ve platformlar arasında taşınabilirliği sağlar.
* **Donanım Modelleme:** Donanımın hem davranışsal hem de yapısal olarak modellenmesine olanak tanır.
* **Simülasyon:** Tasarımların simülasyonunu kolaylaştırır, bu da hataların erken aşamalarda tespit edilmesine yardımcı olur.
* **Sentez:** VHDL kodunun otomatik olarak donanıma dönüştürülmesini (sentez) sağlar.
* **Tekrar Kullanılabilirlik:** Modüler tasarım yaklaşımını destekler, böylece kodun tekrar kullanılabilirliğini artırır.
* **Dokümantasyon:** Tasarımı net ve anlaşılır bir şekilde dokümante etme imkanı sunar.
## Dezavantajları
VHDL'nin bazı dezavantajları şunlardır:
* **Öğrenme Eğrisi:** Diğer programlama dillerine kıyasla öğrenme eğrisi daha dik olabilir.
* **Detaylı Kodlama:** Donanımın detaylı bir şekilde modellenmesini gerektirebilir, bu da kodlama süresini uzatabilir.
* **Sentez Kısıtlamaları:** Bazı VHDL yapılarının sentezlenmesi zor veya imkansız olabilir.
## Kullanım Alanları
VHDL, geniş bir uygulama yelpazesinde kullanılmaktadır:
* **Dijital Sistem Tasarımı:** [FPGA](https://www.nedemek.page/kavramlar/fpga) ve [ASIC](https://www.nedemek.page/kavramlar/asic) gibi programlanabilir lojik cihazların tasarımı.
* **Gömülü Sistemler:** Gömülü sistemlerde kullanılan donanımların modellenmesi ve tasarımı.
* **Haberleşme Sistemleri:** Haberleşme protokollerinin ve cihazlarının tasarımı.
* **Sinyal İşleme:** Dijital sinyal işleme (DSP) uygulamaları için donanım tasarımı.
* **Akademik Araştırma:** Donanım mimarileri ve algoritmaları üzerine yapılan araştırmalarda modelleme ve simülasyon aracı olarak.
## Örnek VHDL Kodu
Aşağıda, basit bir [AND kapısı](https://www.nedemek.page/kavramlar/and%20kapısı)'nın VHDL kodu verilmiştir:
```vhdl
library ieee;
use ieee.std_logic_1164.all;
entity and_gate is
port (
a : in std_logic;
b : in std_logic;
y : out std_logic
);
end entity and_gate;
architecture behavioral of and_gate is
begin
y <= a and b;
end architecture behavioral;
Bu kod, and_gate
adında bir entite tanımlar. Bu entitenin a
ve b
adında iki girişi ve y
adında bir çıkışı vardır. behavioral
mimarisi, çıkışın girişlerin AND işlemine eşit olduğunu belirtir.
VHDL'ye alternatif olarak kullanılan diğer donanım tanımlama dilleri şunlardır:
VHDL, modern dijital sistem tasarımında önemli bir rol oynamaktadır. Karmaşık donanımların modellenmesi, simülasyonu ve sentezi için güçlü bir araçtır. Sürekli gelişen yapısı ve geniş kullanım alanları sayesinde, gelecekte de donanım tasarımcılarının vazgeçilmez araçlarından biri olmaya devam edecektir.