VHDL

De Viquipèdia
Dreceres ràpides: navegació, cerca

VHDL és l'acrònim que representa la combinació de VHSIC i HDL, on VHSIC és l'acrònim de "Very High Speed Integrated Circuit" i HDL és al seu torn l'acrònim de "Hardware Description Language". És un llenguatge fet servir per enginyers definit pel Institute of Electrical and Electronics Engineers (IEEE) ANSI/IEEE 1076-1993[1] que es fa servir per dissenyar, simular i descriure, circuits digitals. Altres mètodes per dissenyar circuits són la captura d'esquemes (amb eines tipus CAD) i els diagrames de blocs, però aquest no són pràctics en dissenys complexos. Altres llenguatges pel mateix propòsit poden ser Verilog i ABEL. Tot i que es pot fer servir de forma general per descriure qualsevol circuit es fa servir principalment per programar PLD (programable logic device - dispositiu lògic programable), FPGA (Field Programmable Gate Array).

Una de les característiques més important de VHDL, i probablement un dels aspectes més confusos del llenguatge per a algú nou és la capacitat del llenguatge per descriure un sistema altament concurrent per aprofitar plenament la naturalesa paral·lela de dispositius digitals.

Història [2][modifica | modifica el codi]

El desenvolupament de VHDL començar quan el Departament de Defensa dels EUA (DoD, en anglès) va sol·licitar un llenguatge per descriure hardware. Els dos principals requisits foren:

  • El llenguatge havia de descriure la lògica del maquinari unívocament amb l'objectiu de poder adaptar els circuits a les noves tecnologies de maquinari sense haver de començar de nou tot el procés de disseny, solucionant així el problema de l'obsolescència tecnològica.
  • L'estructura i la sintaxi del llenguatge havia de ser comprensible pels éssers humans, això permetria que el llenguatge VHDL fos fàcil de mantenir i modificar.

El llenguatge original va trigar més de 16 anys des del concepte inicial a la norma final. Quan el document va ésser aprovat pel comitè de IEEE es va acordar que la norma hauria de ser revisada cada 5 anys. La primera fase de revisió va donar lloc a la norma actualitzada el 1993. Independentment d'aquest acord de revisió, es fa un esforç addicional per normalitzar "les extensions" de la referència del llenguatge pur. Aquestes extensions de cobertura per a paquets d'exemples (std_logic_1164, numeric_bit, numeric_std), que conté tipus de dades molt necessaris i subprogrames.

Evolució temporal[modifica | modifica el codi]

  • 1981 – Iniciat pel Departament de Defensa dels EUA per fer front al cicle de vida de hardware crític.
  • 1983-85 – Desenvolupament de la base de referència d’idiomes per Intermetrics, IBM i TI
  • 1986 – Tots els drets transferits a IEEE
  • 1987 – Publicació de la norma IEEE
  • 1987 - La norma Mil Std 454 requereix ampliar les descripcions VHDL per a poder descriure ASICs
  • 1994 – Estàndard revisat (anomenat VHDL 1076-1993)
  • 2000 – Estàndard revisat (anomenat VHDL 1076-2000)
  • 2002 – Estàndard revisat (anomenat VHDL 1076-2002)
  • 2007 – VHDL Procedural Language Application Interface standard (VHDL 1076c-2007)
  • 2009 – Estàndard revisat (anomenat VHDL 1076-2008)

Seqüència de disseny[modifica | modifica el codi]

El flux de disseny d'un sistema podria ser:

  • Divisió del disseny principal en mòduls separats. La modularitat és un dels conceptes principals de tot disseny. Normalment es diferencia entre dues metodologies de disseny: top-down i botton-up. La metodologia top-down consisteix que un disseny complex es divideix en dissenys més senzills que es puguin dissenyar (o descriure) més fàcilment. La metodologia botton-up consisteix a construir un disseny complex a partir de mòduls, ja dissenyats, més simples. A la pràctica, un disseny usa generalment ambdues metodologies.
  • Entrada de dissenys, poden usar-se diversos mètodes tal com es va veure anteriorment.
  • Simulació funcional, és a dir, comprovarem que l'escrit en el punt anterior realment funciona com volem, si no ho fa haurem de modificar. En aquest tipus de simulació es comprova que el codi VHDL o Verilog (o un altre tipus de llenguatge HDL) executa correctament el que es pretén.
  • Síntesi. En aquest pas s'adapta el disseny anterior (que sabem que funciona) a un maquinari en concret, ja sigui una FPGA o un ASIC. Hi ha sentències del llenguatge que no són sintetitzables, com per exemple divisions o exponenciaciones amb nombres no constants. El fet que no totes les expressions en VHDL siguin sintetitzables és que el VHDL és un llenguatge genèric per modelat de sistemes (no només per disseny de circuits digitals), per la qual cosa hi ha expressions que no poden ser transformades a circuits digitals. Durant la síntesi es té en compte l'estructura interna del dispositiu, i es defineixen restriccions, com l'assignació de pins. El sintetitzador optimitza les expressions lògiques per tal que ocupin menor àrea, o bé són eliminades les expressions lògiques que no són usades pel circuit.
  • Simulació post-síntesi. En aquest tipus de simulació es comprova que el sintetitzador ha realitzat correctament la síntesi del circuit, en transformar el codi HDL en blocs lògics connectats entre si. Aquest pas és necessari, ja que, de vegades, els sintetitzadors produeixen resultats de síntesi incorrectes, o bé realitza simplificacions del circuit al optimitzar-lo.
  • Ubicació i enrutament. El procés d'ubicació consisteix a situar els blocs digitals obtinguts en la síntesi de forma òptima, de manera que aquells blocs que es troben molt interconnectats entre si se situïn pròximament. El procés d'enrutament consisteix a interconnectar adequadament els blocs entre si, intentant minimitzar retards de propagació per maximitzar la freqüència màxima de funcionament del dispositiu.
  • Anotació final. Un cop ha estat completat el procés d'ubicació i enrutament, s'extreuen els retards dels blocs i les seves interconnexions, a fi de poder realitzar una simulació temporal (també anomenada simulació post-layout). Aquests retards són anotats en un fitxer SDF (Standard Delay Format) que associa a cada bloc o interconnexió un retard mínim / típic / màxim.
  • Simulació temporal. Malgrat la simulació anterior potser el disseny no funcioni quan es programa, una de les causes pot ser pels retards interns del xip. Amb aquesta simulació es pot comprovar, i si hi ha errors s'ha de tornar a un dels anteriors passos.
  • Programació en el dispositiu. S'implementa el disseny en el dispositiu final i es comprova el resultat.

Procediment de disseny[modifica | modifica el codi]

El primer pas del disseny consisteix en la construcció del diagrama en bloc del sistema. En dissenys complexos com en programari els programes són generalment jeràrquics i VHDL ofereix un bon marc de treball per definir els mòduls que integren el sistema i les seves interfícies, deixant els detalls per a passos posteriors.

El segon pas és l'elaboració del codi en VHDL per a cada mòdul, per les seves interfícies i els seus detalls interns. Com el VHDL és un llenguatge basat en text, es pot utilitzar qualsevol editor per aquesta tasca, encara que l'entorn dels programes de VHDL inclou el seu propi editor de text. Després que s'ha escrit algun codi es fa necessari compilar-lo. El compilador de VHDL analitza aquest codi i determina els errors de sintaxi i comprova la compatibilitat entre mòduls. Crea tota la informació necessària per a la simulació. El proper pas és la simulació, la qual li permet establir els estímuls a cada mòdul i observar la seva resposta. El VHDL dóna la possibilitat de crear bancs de prova que automàticament aplica entrades i compara les sortides amb les respostes desitjades. La simulació és un pas dins del procés de verificació. El propòsit de la simulació és verificar que el circuit treballa com es desitja, és a dir és més que comparar entrades i sortides. En projectes complexos es fa necessari invertir un gran temps a generar proves que permetin avaluar el circuit en un ampli rang d'operacions de treball. Trobar errors en aquest pas del disseny és millor que al final, on cal repetir llavors una gran quantitat de passos del disseny. Hi ha dues dimensions a verificar:

  • El seu comportament funcional, on s'estudia el seu comportament lògic independent de consideracions de temps, com les demores en les comportes.
  • La seva verificació en el temps, on s'inclouen les demores de les comportes i altres consideracions de temps, com els temps d'establiment (set-up time) i els temps de manteniment (hold time).

Després de la verificació s'està llest per entrar a la fase final del disseny. La naturalesa i eines en aquesta fase depenen de la tecnologia, però hi ha tres passos bàsics. El primer és la síntesi, que converteix la descripció en VHDL en un conjunt de components que es poden fer en la tecnologia seleccionada. Per exemple, amb PLD es generen les equacions en suma de productes. En ASIC genera una llista de comportes i un netlist que especifica com aquestes comportes són interconnectades. El dissenyador pot ajudar a l'eina de síntesi especificant requeriments a la tecnologia emprada, com el màxim nombre de nivells lògics o la capacitat de sortida que es requereix. En el següent pas d'ajust (Fiting) els components s'ajusten a la capacitat del dispositiu que s'utilitza. Per PLD això significa que acobla les equacions obtingudes amb els elements AND - OR que disposa el circuit. Per al cas d'ASIC es dibuixarien les comportes i es definiria com connectar. En l'últim pas es realitza la verificació temporal, ja que a aquesta altura és que es poden calcular els elements paràsits, com les capacitats de les connexions. Com en qualsevol altre procés creatiu, pot ser que ocasionalment s'avanci dos passos endavant i un cap enrere (o pitjor).

Estructura de programa[modifica | modifica el codi]

VHDL va ser dissenyat sobre la base dels principis de la programació estructurada. La idea és definir la interfície d'un mòdul de maquinari mentre deixa invisible els seus detalls interns. L'entitat (ENTITY) en VHDL és simplement la declaració de les entrades i sortides d'un mòdul mentre que l'arquitectura (ARCHITECTURE) és la descripció detallada de l'estructura interna del mòdul o del seu comportament. A la següent figura s'il·lustra el concepte anterior. Molts dissenyadors conceben la Entity com una funda de l'arquitectura deixant invisible els detalls del que hi ha dins (architecture). Això forma la base d'un sistema de disseny jeràrquic, l'arquitectura de l'entitat de més nivell (top level) pot usar altres entitats, deixant invisible els detalls de l'arquitectura de la identitat de menys nivell. A la figura les entitats B, E i F no utilitzen altres entitats. Mentre que l'entitat A utilitza totes les altres. A la parella entitat-arquitectura és la flama model. En un fitxer text VHDL l'entitat i l'arquitectura s'escriuen separades, per exemple a continuació es mostra un programa molt simple en VHDL d'una comporta de 2 entrades. Com altres programes, VHDL ignora els espais i salts de línies. Els comentaris s'escriuen amb 2 guions (-) i acaben al final de la línia. A la figura següent es mostra l'estructura d'un model en VHDL.

Sintaxi per la declaració de l'entitat[modifica | modifica el codi]

VHDL defineix molts caràcters especials anomenats "paraules reservades". Encara que les paraules reservades no són sensibles a les majúscules o minúscules, en l'exemple que segueix les utilitzarem en majúscules i negreta per identificar-les.

ENTITY Nom_entitat IS
PORT (Nom de senyal: MODE tipus de senyal;
               . . .
              Nom de senyal: manera tipus de senyal);
END nom_entitat;

A més de donar-li nom a l'entitat el propòsit de la declaració és definir els seus senyals (o ports) d'interfície externa en la declaració de ports. A més de les paraules reservades o claus ENTITY,IS, 'PORT and 'END, una ENTITY té els següents elements.

  • Nom_entitat, és un identificador seleccionat per l'usuari per seleccionar l'entitat.
  • Nom de senyal, és una llista d'un o més identificadors separats per una coma i seleccionats per l'usuari per identificar els senyals externes de la interfície.
  • MODE és una de les 4 següents paraules reservades per indicar la direcció del senyal:
Mode Descripció
IN En aquesta manera els senyals només entren a l'entitat
OUT Els senyals surten de l'entitat
BUFFER Aquesta manera s'utilitza per als senyals que a més de sortir de l'entitat poden usar-se com entrades realimentades
INOUT Aquesta manera s'utilitza per a senyals bidireccionals. S'empra en sortida amb tres estats. Es pot assignar com a substitut de les tres maneres anteriors, però no s'aconsella doncs dificulta la comprensió del programa.

Quan s'omet la manera d'un senyal en la declaració de l'entitat se sobreentén que és d'entrada.

  • Tipus de senyal, en VHDL, hi ha diversos tipus de senyals predefinides pel llenguatge, com ara:
TIPUS Característiques
BIT En aquest tipus els senyals solament prenen els valors de "1" i "0"
Booleana En aquest tipus els senyals solament prenen els valors de True i False
Std_logic En aquest tipus els senyals prenen 9 valors, entre ells tenim: "1", "0", "Z" (pel 3r estat), "-" (per als opcionals).
Integer En aquest tipus els senyals prenen valors sencers. Els 1 i els 0 s'escriuen sense "
Bit_Vector En aquest tipus els valors dels senyals són una cadena d'uns i zeros. Exemple: "1000"
Std_Logic_Vector En aquest tipus els valors dels senyals són una cadena dels nou valors permissibles per al tipus std_logic.
Character Conté tots els caràcters ISO de 8 bits, on els primers 128 són els caràcters ASCII.


Exemple: "1-0z" -231 + 1 231-1 Integer -2 147 483 647 2 147 483 647

Bit Character Severity_level Bit_vector Integer String Boolean Real time

Operadors
Tipus Std_logic
U Uninitialized
X Forcing Unknown
0 Forcing 0
1 Forcing 1
Z High Impedance
W Weak Unknown
L Weak 0
H Weak 1
Your say care


Aquest tipus és part del paquet IEEE 1164

A més l'usuari pot definir altres tipus de senyals, el que resulta molt convenient en alguns casos, com en el disseny de màquines d'estats. El llenguatge VHDL concedeix màxima importància als tipus de senyals, no s'admet realitzar una assignació barrejant tipus diferents. Un PORT d'una entitat i les seves maneres i tipus poden ser vistos per altres mòduls que la utilitzin. L'operació interna de l'entitat està definida a la architecture la sintaxi general es mostra a continuació.

Exemple, escrigui la declaració de l'entitat per un circuit digital amb dues entrades aibi una sortida F segons es mostra en la següent figura.

ENTITY Exemple 1 IS
PORT (a, b: IN bit;
                 F: OUT bit);
END Exemple 1;

Sintaxi per a la definició de l'arquitectura[modifica | modifica el codi]

La sintaxi per a la declaració de l'arquitectura és la següent (apareixen en majúscula les paraules reservades del llenguatge VHDL, però això no és necessari):

ARCHITECTURE nom_arquitectura OF nom_entitat IS
Declaració de tipus
Declaració de senyals.
Declaració de constants
Declaració de components
Definició de funcions
Definició de procediments
 
BEGIN
Enunciat concurrent
...
Enunciat concurrent
END nom_arquitectura;

Les declaracions i definicions que precedeixen el BEGIN, poden estar presents totes, algunes o cap. Això depèn del tipus de disseny que s'estigui realitzant. No obstant la declaració de senyals s'utilitza molt, doncs contribueix entre altres coses a la claredat del disseny.

nom_entitat és el nom de la seva entitat. nom_arquitectura és el nom donat per l'usuari a l'arquitectura. Els senyals externes de l'arquitectura són les declarades al port de l'entitat, però una arquitectura pot contenir senyals i altres declaracions que solament existeixen localment en aquesta arquitectura. Declaracions comunes a diverses entitats poden ser posades en un "paquet" separat utilitzat per totes les entitats. Les declaracions en l'arquitectura poden aparèixer en diferent ordre, però el més usual és començar per la declaració dels senyals. Signal signal-name: signal-type Variables en VHDL són similars als senyals excepte que elles no tenen significat físic en el circuit. En l'exemple anterior no es va posar declaració de variables, elles són usades en funcions, procediments i processos. Totes les senyals, variables i constants en VHDL tenen associades un tipus, aquest especifica el conjunt de valors que l'objecte pot prendre. També hi ha un conjunt d'operadors com ara add, and etc, associats amb un tipus donat.

Operadors en VHDL[modifica | modifica el codi]

En VHDL existeixen diferents operadors entre els quals tenim:

Operadors Definits en VHDL per als tipus: Lògics AND, OR, XOR, NOT, NAND, NOR, XNOR Bit i booleans De relació =, / =, <,>,> =, <= Integer, Bit i Bit_Vector Concatenació & Bit, Bit_Vector i per les cadenes Aritmètics +, -, *, /, Mod, Rem, Abs, ** Integer * Mod: Mòdul de la divisió. Rem: Resta de la divisió Abs: valor absolut.

    • Exponentiation.

El WARP només suporta multiplicar i dividir per 2. Exemple: Escriviu la definició d'arquitectura per a l'entitat de l'exemple anterior.

ARCHITECTURE and_2ent OF Exemple1 IS
BEGIN
 F <= a AND b;
END and_2ent;

Una altra forma d'escriure el mateix exemple anterior és:

ARCHITECTURE and_2ent OF Exemple1 IS
BEGIN
 F <= '1 'WHEN a = '1' AND b = '1 'ELSE
         '0 ';
END and_2ent;

Una altra forma d'escriure el mateix exemple anterior és:

ARCHITECTURE and_2ent OF Exemple1 IS
BEGIN
 F <= '1 'WHEN a = '1' AND b = '1 'ELSE
         '0 'WHEN a = '0' AND b = '0 'ELSE
         '0 'WHEN a = '0' AND b = '1 'ELSE
         '0 'WHEN a = '1' AND b = '0 'ELSE
         '-';
  END and_2ent;

Exemple;un circuit amb dues entrades i una sortida f. L'entitat és la mateixa anterior, però suposant que la funció que realitza el circuit és tal que la sortida serà 0 només si les entrades són iguals (operació XOR).

ENTITY exemp2_3 IS -- Només es canvia el nom de l'entitat
PORT (a, b: IN bit;
             F: OUT bit);
END exemp2_3 ;
 
ARCHITECTURE dos_ent OF exemp2_3 IS
BEGIN
f <= '1 'WHEN a/= b ELSE
        '0 ';
END dos_ent;

En VHDL el que s'escriu després de -- és un comentari.

Assignacions condicionals en VHDL. En VHDL hi ha diverses assignacions que es realitzen en forma condicionada. Analitzarem dues. WITH ...... SELECT .... WHEN ..... Others WHEN ..... ELSE

Exemple: Escriviu a VHDL un fitxer per obtenir una comporta NOR de dues entrades. Utilitzeu senyals tipus boleana i assignacions condicionals de la forma WHEN ... ELSE .....

ENTITY Boole_4 IS
PORT (a, b: IN Boolean;
                I: OUT Bolean);
END Boole_4;
 
ARCHITECTURE Boole4_a OF Boole_4 IS
BEGIN
 I <= true WHEN a = false and b = false ELSE
              False;
END Bole4_a;

Exemple: repeteixi el disseny anterior, però utilitzi assignacions condicionals de la forma WITH .. SELECT .. WHEN .. Others

ENTITY Boole_5 IS
PORT (a, b: IN Boolean;
                I: OUT Bolean);
END Boole_5;
 
 
ARCHITECTURE Boole5_a OF Boole_5 IS
BEGIN
WITH a SELECT
 I <= false WHEN true,
           Sense b WHEN others;
END Bole5_a;

Sintaxi per al treball amb vectors. Els vectors es descriuen com: a (3), a (2), a (1), a (0), sempre començant per 0.Cuando un vector es declara en ordre descendent utilitzant la paraula clau downto per exemple (3 downto 0 ), hem d'interpretar que el MSB és a (3) i el LSB és a (0). Quan apareixen (0 to 3), llavors el LSB és a (3) i el MSB és a (0).

Biblioteques[modifica | modifica el codi]

Una biblioteca en VHDL és un lloc on es guarda la informació relacionada amb un disseny determinat. Al començament de cada disseny el compilador crea automàticament una biblioteca anomenada WORK amb aquest objectiu. A més d'aquesta biblioteca particular existeixen altres biblioteques de tipus general que contenen un conjunt de definicions que es poden utilitzar en qualsevol disseny. Un exemple de biblioteca general és l'anomenada Library IEEE, que conté definicions estàndard per VHDL. Per utilitzar una biblioteca general cal escriure el seu nom a l'inici del programa, per això és molt comú que en la primera línia d'un disseny en VHDL aparegui escrit "Library IEEE", d'aquesta manera la biblioteca es fa visible per al disseny.

Paquets[modifica | modifica el codi]

En els paquets es guarden definicions de tipus i objectes que poden ser utilitzats en els diferents dissenys que invoquin la seva utilització. Un paquet molt utilitzat és el paquet estàndard IEEE_STD_LOGIC_1164.ALL; La utilització d'un paquet en un disseny es realitza invocant la seva ocupació mitjançant la clàusula USE i el nom del paquet. Per exemple USE IEEE_STD_LOGIC_1164.ALL;

La terminació ALL, permet utilitzar totes les definicions i objectes que conté aquest paquet. A més de l'estàndard, existeixen altres paquets d'utilització general i també els dissenyadors que treballen amb VHDL poden definir els seus propis paquets, el que els permet reutilitzar dissenys realitzats anteriorment com a part de nous dissenys.

Sintaxi per a la definició de paquets.

La sintaxi per a la definició d'un paquet és la següent:

PACKAGE nom_del_paquet IS
Declaració de tipus
Declaració de senyals.
Declaració de constants
Declaració de components
Definició de funcions
Definició de procediments
END nom_del_paquet
 
PACKAGE BODY nom_del_paquet IS
Declaració de tipus
Declaració de constants
Definició de funcions
Definició de procediments
END nom_del_paquet

Aquesta última part que apareix entre els dos END, la relacionada amb el cos del paquet pot o no existir i en el cas d'existir les declaracions i definicions continguts en la mateixa són locals, visibles només dins del paquet, mentre que les declaracions i definicions contingudes a la primera part del paquet són visibles per a tots els dissenys que els utilitzin.

Sintaxi per a la declaració d'una component en VHDL

COMPONENT nombre_componente
PORT (Nom de senyal: manera tipus de senyal;
                ...
             Nom de senyal: manera tipus de senyal);
END COMPONENT;

Extensió (Overload) dels operadors en VHDL La validesa dels operadors donats anteriorment s'ha estès a altres tipus per als quals no estaven originalment definits. Per exemple el paquet estàndard IEEE.Std_Logic_1164 defineix l'extensió dels operadors lògics per als tipus std_logic i Std_logic_Vector. No obstant això l'extensió dels operadors de relació i aritmètics per als tipus std_logic i std_logic_vector no estan definits al paquet estàndard sinó en un altre paquet anomenat Work_Std_arith. DISSENY jeràrquic en VHDL En VHDL un disseny pot utilitzar components que són al seu torn altres circuits o sistemes més senzills prèviament dissenyats. Això constitueix un gran avantatge, ja que facilita el treball en equip i la distribució de tasques entre diferents grups de dissenyadors. A mesura que es puja cap al nivell de jerarquia màxima l'arquitectura es fa més general mentre que en els nivells inferiors el grau de detalls és major. A la següent figura es mostra un esquema que il·lustra els diferents nivells jeràrquics. Dissenyeu un CLC amb tres entrades a, bici una sortida T, que realitzi la funció mostrada a la taula següent:


Entrades Sortida a b c T 0 0 - 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0

ENTITY T IS
PORT (a, b, c: IN BIT;
                        T: OUT BIT);
END T;
 
ARCHITECTURE T OF T IS
BEGIN
  T <= '1 'WHEN a = '0' AND b = '1 'AND c = '1' ELSE
           '1 'WHEN a = '1' AND b = '0 'AND c = '0' ELSE
           '0 ';
END T;

Ara ho empaquetem per poder utilitzar-lo en un altre disseny:

PACKAGE TPKG IS
COMPONENT T - El nom del component ha de ser igual a l'entitat que s'empaqueta
PORT (a, b, c: IN BIT;
                 T: OUT BIT);
END COMPONENT;
END TPKG;

Exemples codis en VHDL[modifica | modifica el codi]

Multiplexor[modifica | modifica el codi]

Aquest exemple simula un multiplexor de dues entrades. És un exemple senzill que mostra com descriure un element a partir del seu funcionament.

   entity MUX2a1 is port (
               a: in std_logic;
               b: in std_logic;
               sel: in std_logic;
               z: out std_logic);
   end entity
 
   architecture Dataflow of MUX2a1 is
         begin
               z <= a when sel = '0' else b;
   end Dataflow;

Un exemple una mica més complex és el d'un multiplexor de quatre entrades. Aquest exemple treballa amb vectors per controlar l'entrada activa a través de l'entrada sel.

   entity MUX4a1 is
         port (a: in std_logic;
               b: in std_logic;
               c: in std_logic;
               d: in std_logic;
               z: out std_logic;
               sel: in std_logic_vector (1 downto 0));
   end entity;
   architecture Dataflow of MUX4a1 is
         begin
         process (a, b, c, d, sel) begin
               case sel is
                    when "00" => z <= a;
                    when "01" => z <= b;
                    when "10" => z <= c;
                    when "11" => z <= d;
               end case;
         end process;
   end Dataflow;

Programa Hola Mon[modifica | modifica el codi]

 use std.textio.all; -- biblioteques
 
 entity hola is
 end entity hola;
 
 architecture Wiki of hola is
 constant misatge: string := "hola mon"; -- el misatge
 begin 
 process is -- procés → seqüencial
 variable L: line;
 begin
 write(L, misatge);
 writeline(output, L); -- escriu tot l'anterior
 wait;
 end process; 
 end architecture Wiki;

Programa detector de flancs de pujada i de baixada d'un senyal digital[modifica | modifica el codi]

 LIBRARY ieee;
 USE ieee.std_logic_1164.all;
 USE IEEE.numeric_std.all;
 ENTITY EdgeDetector IS PORT(   --Definició dels senyals de entrada i sortida, interfície
    clock   	: IN     STD_LOGIC;      -- Rellotge del sistema
    InSignal	: IN     STD_LOGIC;	 -- Senyal dentrada				
    RisingEdge	: OUT    STD_LOGIC;      -- Flanc de pujada                      
    FallingEdge : OUT    STD_LOGIC);     -- Flanc de baixada
 END EdgeDetector;
 ARCHITECTURE logic OF EdgeDetector  IS
 SIGNAL inp: STD_LOGIC;
 SIGNAL inp_dly: STD_LOGIC;
 BEGIN
     FallingEdge <= inp_dly AND (NOT(inp)); 	--  input rising edge detection
     RisingEdge  <= inp AND (NOT(inp_dly)); 	-- input falling edge detection
     edge_detector: PROCESS(clock)              -- Inici del procés síncron
     BEGIN
         IF(clock'EVENT AND clock = '1') THEN   -- A cada flanc de pujada del rellotge del sistema
         inp_dly <= inp;
         inp<= InSignal;			
         END IF;
     END PROCESS;  
 END logic;

Vegeu també[modifica | modifica el codi]

Referències[modifica | modifica el codi]

  1. IEEE Standard VHDL Language Reference Manual
  2. The Designer's Guide to VHDL, Third Edition (Systems on Silicon). Peter J. Ashenden. Editorial: Morgan Kaufmann, ISBN 0120887851, 3a edició, Maig, 2008

Enllaços externs[modifica | modifica el codi]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: VHDL Modifica l'enllaç a Wikidata
Wikibooks A Wikibooks en anglès, hi ha llibres de contingut lliure i altres textos relatius a VHDL