Hardwarebeschrijvingstaal

Programmeertaal

Een hardwarebeschrijvingstaal (HDL,Hardware Description Language) is een programmeertaal waarmee men een formele beschrijving kan geven van een (digitale) elektronische schakeling. Door deze beschrijving is het mogelijk om het model van de schakeling te testen en te simuleren door gebruik te maken van speciale software.

In tegenstelling tot vele programmeertalen die gebruikt worden voor software, bestaat de syntaxis van hardwarebeschrijvingstalen ook uit semantische constructies die tijd en gelijktijdigheid uitdrukken, iets wat men niet in de (gestandaardiseerde) programmeertalen als C en C++ tegenkomt. Hiermee wordt het mogelijk om naast combinatorische schakelingen ook sequentiële schakelingen te beschrijven.

Gebruik bewerken

HDLs worden gebruikt:[1]

  • om een formele beschrijving te geven van een elektronische schakeling.
  • om de designcyclus te versnellen.
  • omdat ze een gemakkelijke weg naar synthese bieden.
  • omdat ze een gemakkelijke weg naar simulatie bieden.

Korte Geschiedenis bewerken

Oorspronkelijk boden HDLs enkel ondersteuning voor de structurele representatie van een hardware systeem. Het gedrag werd eerst beschreven op component niveau en daarna op een logisch niveau. Een methode voor het beschrijven van het gedrag op logisch niveau is PALASM. De eerste moderne HDL, Verilog, werd geïntroduceerd in 1985. Later (1987) werd, door een verzoek van het United States Department of Defense, VHDL ontwikkeld. Deze talen groeiden later uit tot de dominante HDLs in de elektronica industrie.[1]

Simulatie bewerken

Een simulatie is de interpretatie van de HDL uitdrukkingen om een output te bekomen die door mensen gelezen kan worden, zoals een tijdsdiagram (voorspelt hoe de hardware zich zal gedragen alvorens het wordt gefabriceerd). Hierdoor is HDL simulatie vrij vergelijkbaar met het draaien van een programma in een conventionele high-level taal, zoals JavaScript, BASIC, LISP, die geïnterpreteerd worden. Simulatie is handig voor de gebruiker omdat het ervoor zorgt dat functionele fouten in een design op tijd kunnen worden opgespoord en gecorrigeerd. Wanneer dit niet gebeurt zullen de eventuele fouten pas gedetecteerd worden na fabricatie en dit kan enorme extra kosten teweegbrengen. [2]

Synthese bewerken

Synthese is het compileren van high-level behavioral en structurele HDL uitdrukkingen in een gate-level netlist (beschrijft onderlinge connectiviteit tussen een hiërarchie van blokken), die dan direct gebruikt kan worden om ofwel direct te printen op een printplaat, het zelf maken van een geïntegreerde schakeling of om programmeerbare logische hardware te programmeren (zoals ROM, PLA, PLD, FPGA, CPLD, …). Hierdoor is synthese vergelijkbaar met het compileren van een programma in een conventionele high-level taal. Het verschil is dat in plaats van het produceren van objectcode die op dezelfde computer draait, synthese een fysiek stuk hardware produceert dat de combinatorische logica implementeert die beschreven is door de HDL code.[3]

De synthese is een omzetting van de ene voorstelling naar een andere voorstelling. Men zou simulatie kunnen beschouwen als synthese maar meestal verwijst het naar een fysieke implementatie. Men wil iets bekomen dat produceerbaar is en optimaal ontwikkeld kan worden. Verschillende types van synthese:

  1. Van Engels (taal meeste HDLs) naar Algoritmisch: Natuurlijke taalsynthese
  2. Van Algoritmisch naar Data flow: Algoritmische synthese
  3. Van Data flow naar Structureel: Logische synthese
  4. Van Logische poorten naar Lay-out: Lay-outsynthese

Synthese 2 tot 4 kunnen automatisch worden aangemaakt.[1]

Code voorbeeld bewerken

Een VHDL code voorbeeld voor een 4-bit ALU:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY VierbitALU is
     port(A: in std_logic_vector(3 downto 0); 
          B: in std_logic_vector(3 downto 0); 
          S: in std_logic_vector(1 downto 0);
          M: in std_logic;
          L: out std_logic;
          F: out std_logic_vector(4 downto 0));
END VierbitALU;

architecture behavioral of VierbitALU is
		signal Aint: std_logic_vector(4 downto 0);
		signal Bint: std_logic_vector(4 downto 0);
	begin
	process(A,B,M,S,Aint,Bint)
		begin 
		Aint <= '0'&A;
		Bint <= '0'&B;
		L <= '1';
			if M = '0' then

				case S is
					when "00" => F <= Aint and Bint;
					when "01" => F <= Aint or Bint;
					when "10" => F <= Aint xor Bint;
					when "11" => F <= Aint xnor Bint;
					when others => null;     
				end case;

			else

				case S is
					when "00" => F <= Aint + Bint; 
					when "01" => F <= Aint + not Bint + 1;
					when "10" => F <= Bint + not Aint + 1;
					when "11" => F <= Aint + 1;
					when others => null; 
				end case;
			end if;
	end process;
end behavioral;

Verschillende HDLs bewerken

De meest gebruikte en ondersteunde HDL talen zijn:

VHDL:
VHDL is een hardware beschrijvingstaal gemaakt in opdracht van het U.S. ministerie van defensie. De V in VHDL staat voor VHSIC (Engels: Very High Speed Integrated Circuit). VHDL is een standaard taal opgenomen door de IEEE (Engels: Institute of Electrical and Electronics Engineers). VHDL wordt voornamelijk gebruikt in Europa.

Verilog:
Verschillende bedrijven en universiteiten, gekend als OVI (Engels: Open Verilog International), beheren Verilog. Tal van bedrijven ontwikkelen tools die werken met standaard Verilog. Ongeveer de helft van al het HDL werk in U.S. gebeurt in Verilog.

Andere talen:

  • ABEL HDL (Advanced Boolean Expression Language, taal ontwikkeld door ‘the Data I/O Corporation’ en nu eigendom van ‘Lattice Semiconductor’)[4]
  • AHDL (Altera HDL, taal ontwikkeld door Altera)
  • CUPL (taal ontwikkeld door Logical Devices, Inc.)
  • JHDL (class library boven op de Java-programmeertaal)
  • Lava HDL[5]
  • ...

Referenties bewerken

  1. a b c J.G. RATHMELL, Hardware Description Language, The University of Sydney, Topic-HDL-Slides.pdf. , 8-11-2010.
  2. Verilog Hardware Description Language, Pearson, Verilog HDL. , 8-11-2010.
  3. Hardware description language - Definition, WordIQ, wordiq hdl. , 9-11-2010
  4. The Abel Hardware Description Language (HDL), Abel HDL. Gearchiveerd op 21 september 2013. Geraadpleegd op 15 november 2010. , 8-11-2010
  5. S. SINGH, The Lava Hardware Description Language, Lava HDL. Gearchiveerd op 27 juli 2011. Geraadpleegd op 15 november 2010. , 7-11-2010