# VHDL

VHDL staat voor VHSIC (Very High Speed Integrated Circuit) Hardware Description Language. Het is een hardwarebeschrijvingstaal waarmee digitale geïntegreerde schakelingen en programmeerbare logica in EPLDs (EPLD staat voor Erasable Programmable Logic, zoals onder andere CPLD's en FPGA's) kunnen worden beschreven en gemodelleerd. Vaak wordt de beschrijving ingevoerd in IDE-software, zodat naderhand het model van de digitale schakeling gesimuleerd en getest kan worden. Daarna kan overgaan worden naar de daadwerkelijke fysische realisatie van het ontwerp (voor ASIC designs), of in het geval van EPLDs, wordt het ontwerp gecompileerd.
Oorspronkelijk is de programmeertaal ontworpen door het Amerikaanse Ministerie van Defensie (Department of Defense), maar is inmiddels uitgegroeid tot een algemeen aanvaarde beschrijving van digitale schakelingen. Verilog is een andere veelgebruikte 'hardware description language' (HDL). De IEEE is de organisatie die standaardisatie van VHDL tot stand brengt (IEEE 1076).
Uitgaande van deze VHDL-beschrijving kan een hardwareontwerp gemaakt worden. De taal wordt gebruikt als beschrijving van elektronische chips. VHDL bestaat reeds langer dan de FPGA. Toen de FPGA's verschenen, is het gebruik van VHDL in een stroomversnelling gekomen, omdat de ontwerpcyclus vanaf de beschrijving tot aan de realisatie van een elektronisch circuit enkele grootte-orden sneller geworden is. Bij de beschrijving van een elektronisch circuit met VHDL moet met drie invalshoeken rekening worden gehouden:
* elektronisch;
* logisch;
* hiërarchisch.

## De elektronische invalshoek

Omdat VHDL een elektronisch circuit beschrijft dat nadien moet worden gerealiseerd, moet er rekening worden gehouden met de elementaire hardware-aspecten van het te ontwerpen schema.

### I/O Poorten

Een FPGA maakt contact met de buitenwereld via zijn pinnen, in VHDL poorten genoemd. Bij ontwerpbordjes zijn veel van deze pinnen verbonden met hardware op de kaart. Voorbeelden zijn: de klok, knopjes, schakelaars, een input/output connector. Op deze manier zijn deze randtoestellen beschikbaar voor de schakelingen binnen de FPGA. Beschikbaar wil zeggen dat zij niet zijn opgenomen in de schakeling. Om ze op te nemen moet een expliciete verbinding gemaakt worden met de pinnen op de FPGA. Op een typische FPGA zoals de Spartan 2 zijn er meer dan 200 pinnen (208 in de PQ208-behuizing, waarvan 140 I/O pinnen).
De fabrikant van het ontwikkelbord heeft dus vele mogelijkheden om zijn hardware aan te sluiten. Het is essentieel de lijst van verbindingen naar deze hardware te kennen. Deze staat in de handleiding van het bordje, en is typisch terug te vinden in een bestand met de extensie UCF (User Constraints File). De ontwerpsoftware maakt gebruik van het UCF bestand om de schakeling te verbinden met de buitenwereld. Een typische regel in deze ASCII file is NET "btn<0>" LOC = "P59";. Dit betekent dat de I/O pin btn(0) beschikbaar is op pin 59. Merk op dat alle verbindingen naar buiten in de UCF file moeten staan, dit kan je via de IDE (ISE) opgeven, de ASCII file hoef je niet handmatig in te vullen.

## De logische invalshoek

De programmeertaal VHDL laat toe individuele elektronische componenten te beschrijven, en deze hiërarchisch te verbinden. In die zin is VHDL vergelijkbaar met een gestructureerde programmeertaal, waarin het hoofdprogramma de globale schakeling voorstelt en de functies de beschrijving geven van de componenten. Een elektronische component is een entiteit met de volgende eigenschappen:
* input/output poorten, dit zijn de pinnen waarmee de component verbonden wordt met zijn omgeving;
* inwendige signalen, dit zijn de draden waarop logische elektrische signalen lopen.
* een architectuur, dit is de functionele beschrijving van component. Uitgaande van deze beschrijving wordt hardware gevormd die uit de input signalen de output signalen genereert.
De ontwerper kan gebruikmaken van drie elementen:
* elementaire operaties die binnen VHDL bekend zijn, zoals bitoperaties, logische functies, enzovoort
* bibliotheekfuncties die aangeboden worden door de constructeur. Sommige van deze componenten worden ook IPR (intellectual property rights) componenten genoemd. Dit gebeurt voornamelijk voor complexe schakelingen zoals een software processor (bv. MicroBlaze).
* zelfgemaakte componenten, die in een VHDL file staan, of in een bibliotheek.
Een prototype van een VHDL bestand voor een component staat hieronder.

### Sequentiële en combinatorische functies

Het bovenstaande prototype van een VHDL-component bestaat uit twee delen: processen en combinatorische functies of CSA's (concurrent signal assignments).

### Proces

De processen dienen een sequentiële functie te beschrijven, en hebben een sensitiviteitslijst. De sensitiviteitslijst bevat één of meerdere signalen die het proces in gang zetten. Het proces bevat een reeks sequentiële statements, die aangestuurd worden door een verandering van een signaal in de sensitiviteitslijst. Dit signaal kan een klok of een gewoon signaal zijn. Als voorbeeld beschouwen we een eenvoudige flipflop:

### Combinatorische functie

De architectuur van een component kan ook een eenvoudige combinatorische functie beschrijven. Deze component berekent onmiddellijk en op elk moment de uitgang op basis van de ingang. Een voorbeeld is de comparator:
Zoals eerder gezegd is het mogelijk sequentiële functies en combinatorische functies in een component op te nemen.

### Het langste pad en de klokperiode

Een combinatorische functie vraagt een rekentijd die afhankelijk is van het langste pad in de combinatorische schakeling. Omdat een combinatorische functie geen geheugenelementen heeft, moet de klokperiode lang genoeg zijn om de commentatoren zijn functie uit te rekenen. Bij de synthese van de VHDL wordt dit nagegaan, en zal men eventueel de worst case klok berekenen. De resultaten kan men bekijken in het synthese rapport:
Indien de maximale frequentie groter is dan de gewenste klokfrequentie kan dit ontwerp werken op een EPLD, want het kan de gewenste snelheid lopen.