VHDL
VHDL, VHSIC (Very High Speed Integrated Circuit) Hardware Description Language, är ett hårdvarubeskrivande språk, vilket betyder att det liksom Verilog är ett programspråk som används för att beskriva digitala kretsar som sedan kan realiseras i en grindmatris eller ASIC.
VHDL lånar många element i sin syntax från Ada.
Historia
[redigera | redigera wikitext]VHDL utvecklades 1980 av IBM, Texas Instruments och Intermetrics kontrakterade av det amerikanska försvaret. VHDL har kommit ut i ett antal nya versioner sen dess och idag vidareutvecklas programspråket under IEEE Computer Society som en IEEE standard. VHDL Analysis and Standards Group (http://www.eda.org/vasg/ [VASG]) håller i den utvecklingen.
Programexempel
[redigera | redigera wikitext]En krets, till exempel en vippa, kallas i programspråket för en entitet. En sådan beskrivs av dess portar, dvs in- och utgångar som den använder för att kommunicera med andra kretsar, samt sin funktion, i språket kallat sitt beteende (behaviour), dvs vad den beroende på sina insignaler skickar ut som utsignal.
Beteendet hos en entitet styrs av processer som triggar på en av insignalernas positiva eller negativa flank.
D-vippa
[redigera | redigera wikitext]Följande exempel är en D-vippa med synkroniserad reset som sparar en databit:
-- VHDL exempel program: DFlipFlop.vhd
-- en kommentar inleds med dubbla streck
library IEEE; -- motsvarande C++: #include <...>
use IEEE.std_logic_1164.all; -- motsvarande C++: using namespace ...
entity DFlipFlop is -- moduldeklaration (C++: klassdeklaration)
port ( -- port(...) deklarerar alla "publika" signaler
CLK : in STD_LOGIC; -- ingång CLK
RST : in STD_LOGIC; -- ingång RST, aktiv hög
D : in STD_LOGIC; -- ingång D - värdet som skall "kopieras"
Q : out STD_LOGIC -- utgång Q - det kopierade värdet
);
end DFlipFlop;
architecture behaviour of DFlipFlop is -- motsvarande en klassdefinition.
-- här deklareras ev. "privata" signaler/funktioner
begin
process(CLK) -- processen "körs" när CLK ändras...
begin
if rising_edge(CLK) then --...från nolla till etta
if RST = '1' then -- Om RST är aktiv (hög), så skall vi...
Q <= '0'; --...nollställa utgången...
else --...annars skall vi...
Q <= D; --...kopiera värdet på ingången D
end if;
end if; -- Kom ihåg: Raderna ovan händer bara när CLK går från 0 till 1.
end process;
end behaviour; -- Avsluta "klassdeklarationen".