= Contents = - [[#VHDL|VHDL]] - [[#VHDL#Generell struktur|Generell struktur]] - [[#VHDL#Exempelkrets|Exempelkrets]] - [[#VHDL#Datatytper|Datatytper]] - [[#VHDL#Datatytper#std_logic|std_logic]] - [[#VHDL#Datatytper#std_logic_vector|std_logic_vector]] - [[#VHDL#Typer av satser|Typer av satser]] - [[#VHDL#Typer av satser#process|process]] - [[#VHDL#Annat trevligt|Annat trevligt]] - [[#VHDL#Annat trevligt#`with-select-when`|`with-select-when`]] - [[#VHDL#Annat trevligt#`when-else`|`when-else`]] = VHDL = - VHDL :: VHSIC HDL - VHSIC :: Very High Speed Integrated Circuits - HDL :: Hardware Description Language Verilog mer hacker-vänligt, vanligare i USA VHDL vanligare i Europa == Generell struktur == Gränssnitt mot omvärlden {{{vhdl entity namen1 is -- Beskrivning av in och utgångar end entity namn1; }}} Intern implementation. {{{vhdl architecture namn2 of namn1 is -- beskrivning av interna signaler begin -- Beskrivning av funktion end architecture namn2; }}} == Exempelkrets == Uttrycket {{$ \begin{aligned} c &= \neg (x \vee y) \\ \text{där } x &= a \wedge b \\ y &= a \vee b \end{aligned} }}$ kan i VHDL realiseras som: {{{vhdl entity knet is port (a, b : in std_logic; c: out std_logic); end entity knet; architecture fisttry of knet is signal x, y : std_logic; begin c <= not (x or y); x <= a and b; y <= a or b; end architecture fisttry; }}} . == Datatytper == Mycket hårt typat, men nästan inga datatyper. Så nästintill allting måste deffinieras upp själv. Standardbibliotek lägger dock till allting man behöver. Konstiga fulhak undanbedes. Standardbiblioteket importeras enkalst genom {{{VHDL library ieee; -- Berätta att biblioteket finns. use ieee.standard_logic_1164.all; -- Importera det vi vill ha (allt) }}} === std_logic === "bit" typ (Namnet bit var tydligen redan upptaget). Kan ha värdena `01uxz-wlh`. - `U` Uninitialized - `X` Forceing unkwon (i simulering när flera utgångar försöker driva signalen) - `0` tvingad låg - `1` tvingad hög - `Z` High impedance (högohmig) (Tri state, stäng av komponenent) - `-` Don't care === std_logic_vector === Vektor av bitar. Storlek skrivs antingen med `to` eller `downto`. Notera att de är sepparat implementerade, och man ska hålla sig till den ena om man inte vet vad man gör. {{{VHDL std_logic_vector (0 to 2); std_logic_vector (5 downto 2); }}} == Typer av satser == Allting i VHDL är paralellt by default, dock finns: === process === `process` låter ett block köra i sekventiell ordning. Dock kör alla `process`-block paralellt gämte varandra. == Annat trevligt == === `with-select-when` === === `when-else` === Tillåter "krångliga" uttryck i högerledet. Första sanna villkoret bestämmer. Allting körs parallellt? {{{VHDL y <= d(0) when s = "00" else d(1) when s = "01" else d(2); }}}