---
# System prepended metadata

title: VHDL

---

# VHDL 
:::info
(Very High Speed Integrated Circuit Hardware Description Language)
- Prüfung wahrscheinlich am ersten möglichen Termin
- 14-18.09.20 Digitaler ASIC-Entwurf (Blockdiagramm) Videospiel in Hardware
- Fragen am Ende der Kapitel werden am Ende aufgelöst
:::

## Coding style 
* Ports: Portnamen mit `in_`oder `out_` beginnen 
* Signale: Bei Verbindung mit `w_` beginnen und Register mit `r_`
* Variablen: vorangestelltes `v_`
* Prozesse: mit `p_` beginnen 
* Subtypen mit voran/oder nachgestelltem `t_`/`_t` 
* Generics mit `g_` beginnen und komplett groß schreiben (wie macros in c)
* Konstanten mit`c_` beginnen und komplett groß schreiben 
* Modulinstanzierung lieber Ports nochmal genau zuweisen(mit i/o Ports der Komponente), da übersichtlicher
  z.B. 
```vhdl
controlunit: entity work.ControlUnit(behavior) -- instance of ControlUnit.vhd
             port map (in_de_to_cu => w_de_to_cu,
                       out_cu_to_de => w_cu_to_de); 
```

## VL 1
- Basys 3 (Artix-7 35T)
- FPGA (= configurable hardware)
- 10* so viel Platz wie bei Standardzellenbausteine
- CLB?
- Lookup Table (jede Fkt mit 6 Eingängen baubar, KVS-Diagramm)
- Flipflops für rückgekoppelte Logik nutzbar
- synthetisieren: schaltung bauen durch das Programm
- CPLD: FPGA Variante ?
- softwaresprache eher sequentiell
- hardware reagiert parallel
- LRM(language reference modell)
- ASIC bei größeren Stückzahlen
- VDHL-Modell zum Simulieren wichtig
- gate delay: Laufzeit kann verhalten kaputt machen
- Register-Transferebene
- Überprüfungslogik
- Gatterlaufzeiten können Verhalten kaputt machen
- RTL: Register Transfer Level (Logikebene)

## VL 2
- Vhdl
    - case insensitive
    - `--` Kommentare
    - Befehle mit `;` beendet (return - zeilenumbruch wo völlig egal)
    - Liste mit `,` getrennt
    - Signal zuweisung (assignment) `<=`
    - name muss mit buchstaben starten (letters, numbers and underscore are allowed for names)
- VDHl structural elements (6)
    - Entity: Beschreibung der Schnittsstelle eines Blocks
    - Architecture: Implementation, behavior
    - Configuration (in Vivado wird automatisch die von zuvor benutzt)
    - Process
    - Package
    - Library
- (33) tabelle wichtig
- Eigenschaften eines Ports
    - Datentyp
    - Signalbreite z.B. Bitvektor
    - Signalrichtung
    - default values only sensible for input (hilfe zur Simualtion, geht in Hardware aber nicht)
- sum, carry als Ausgänge
- zw. architecture und Beginn ist die Deklarationszone
``` vhdl
constant Base : integer := 10;
...
begin
...
CARRY <= 0 when SUM < BASE else 1; -- auf Überlauf prüfen
```

- alles nebenläufig, passiert parallel
- Port Modes
    - in: Eingang: kann nur gelesen werden
    - out: write only, nicht lesbar
    - buffer: darf nur von einer Signalquelle Werte zugewiesen bekommen; darf auch gelesen werden 
    - inout: bidirectional (z.B. für Busse bei Kommunikationsstrukturen, aber selten)
- vdhl signale nochmal kapseln (da OUTPUT nicht lesbar)
- `component HALFADDER`
- Anschlüsse Komponente und Gesamtmodule können gleiche Namen haben z.B. A und B
- := ist die Zuweisung zu einer Variablen
- <= bei Signalen oder Port
- variablen innerhalb  des Prozesses gefangen
- Prozese aufen parallel, Austausch über Signale
- Unterschied zu Verilog: Verilog etwas unsauberer: Signale verwenden ohne zu deklarieren (dafür wird in Verilog sauber zwischen einem Register und Signal(Wire) unterschieden)
- `subtype [xyz] is [datentyp]` - subtypen von datentypen erstellen

## VL 3
- `_` als Trennzeichen z.B. bei langen Kommazahlen
- Exponent a^b^ in VDDL: a**b
- 13e5 = 13*10^5^
- 16#0AF# = 10*16+15*1=175

## Übung 1
- vga Beispiel programm ausprobieren
- Jtag einstellen
- bit file laden
- logisches und "and"
- Kongationion &
- in Constrainsfile nur genau die verwendeten Eingänge freigeben

## Übung 2:
- if in case einbetten
- b nur wegen underscore notwendig
- underscore zur übersichtlichkeit
- 100 MHz Boardtaktfrequenz
- für sythese tool wichtig -> kein pfad darf länger als 10 ns dauern
- näherungsverfahren bei mehreren Eingängen
- die 7 spalten der lsg sind die kvs diagramme
- dont cares eher durch kenntnis der anwednung also das system
- software zu langsam vs hardware zu unflexibel
- testbenches um design zu verifizieren
-  