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

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

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

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".

Se även redigera

Externa länkar redigera