VHDL: una breve introduzione DRESD   H ow  T o (DHow2) – L1 DRESD Team [email_address]
VHDL V HSIC   H ardware   D escription   L anguage V ery   H igh   S peed   I ntegrated   C ircuit Linguaggio per la descrizione dei C.I. Esistono tre modi per descrivere un C.I. Dataflow – Descrivere un circuito usando i gate Structural – Descrivere un circuito usando delle distinte descrizioni strutturali Behavioral – Attraverso del  codice  (ifs, loops, etc.)
Introduzione Il Linguaggio VHDL viene utilizzato per:  Documentare, Simulare, Sintetizzare  circuiti e sistemi logici. Esso è costituito da più parti alcune delle quali fanno parte integrale del linguaggio stesso, mentre altre vengono integrate da opportuni “packages” realizzati all’interno di “libraries”
Un primo esempio A <= B + C after 5.0 ns Aspetti introdotti : Descrizione / documentazione Simulazione Sintesi Logica B C A + 8 8 8
Descrizione / Documentazione Una delle funzioni del VHDL è quella di descrivere / documentare il funzionamento di un sistema in modo chiare ed inequivocabile Non è detto che questo sistema debba essere realizzato Alle volte è IMPOSSIBILE la realizzazione fisica del circuito Potrebbe essere la descrizione di un sistema già in funzione Potrebbe essere un modo per descrivere gli stimoli da impiegare per testare un circuito
Un sistema descritto in VHDL viene solitamente SIMULATO per analizzarne in comportamento (simulazione comportamentale) Bisogna fornire degli stimoli (INPUT) Ed avere un sistema capace di osservare l’evoluzione del modello durante la simulazione, registrarne le variazioni per un’eventuale ispezione di funzionamento Il simulatore deve aver la possibilità di rappresentare una variabile come “unknown”. Simulazione
Sintesi Logica Passaggio tra descrizione comportamentale e descrizione a porte logiche La sintesi avviene tramite appositi programmi che si appoggiano a librerie dove sono descritte le porte logiche da impiegare (fornite dal venditore) La sintesi è un processo delicato che deve essere opportunamente “guidato ed ottimizzato” Solo un ristretto sottoinsieme del VHDL si presta ad essere Sintetizzato automaticamente. Non tutto ciò che è scritto in VHDL è sintetizzabile La restante parte è da impiegarsi per la descrizione e per la simulazione
Progetto in VHDL Può essere composto da più unità compilate e salvate in opportune librerie Queste unità sono: Entity Architecture Package Entity ed Architecture descrivono i componenti come interfaccia e come struttura interna Package: contiene funzioni e/o grandezze di uso comune
use libreria entity circuito is ... end circutio; architecture archi of circuito is  -- istruzione concorrente 1 -- istruzione concorrente 2 begin  pa: process  begin  -- istruzione sequenziale pa_1 -- istruzione sequenziale pa_2 -- ...  end;  pb: process  begin  -- istruzione sequenziale pa_2 -- ...  end;  end;  Struttura generale di un programma Area sequenziale Area sequenziale Area concorrente
Entity Descrive un circuito solo come Interfaccia da e verso l’esterno, ne fornisce una visione “ai morsetti” Descrive gli ingressi e le uscite di un circuito Non fornisce alcun dettaglio sul funzionamento o sull’architettura entity   circuito   is port  (  a, b :  in   bit ; c :  out   bit  ); end entity ; Nome della entity Nome delle porte Modo delle porte (direzione) Tipo delle porte Parole riservate circuito a b c
Architecture Descrive il funzionamento dell’”Entity” tramite: descrizione astratta (comportamentale) equazioni logico/ aritmetiche (dataflow) Interconnessione tra moduli (strutturale) Lo stesso componente può essere descritto a più livelli di astrazione
Architecture: Descrizione comportamentale Descrizione comportamentale ad alto livello di astrazione (risulta molto simile ad un algoritmo espresso secondo il classici linguaggi sequenziali (C, Fortran, Pascal, ecc..) Utile per simulare parti di circuito senza dover scendere troppo nel dettaglio del funzionamento. Utilizzo di  PROCESS  (con lista dei segnali di attivazione)  Più operazioni agenti in parallelo risiedono in diversi “Process” Diversi processi comunicano tra loro mediante “SEGNALI” ma al loro interno lavorano mediante “VARIABILI” Al loro interno i “Processes” sono sequenziali ATTENZIONE : non tutto ciò che viene descritto al livello comportamentale risulta sintetizzabile
Processi Un  process  è un'istruzione concorrente che contiene un'area sequenziale.  Un processo viene eseguito parallelamente alle altre istruzioni concorrenti.  L'esecuzione del suo body può essere condizionata da una  sensitivity list , una lista di segnali.  La sensitivity list non si usa quando il body contiene un'istruzione wait.  In questo caso l'esecuzione viene avviata e si sospende nel modo indicato da  wait .  Note: In un processo le variabili locali conservano in proprio valore nel tempo tra un'esecuzione e l'altra.
Architecture: descrizione strutturale Descrizione Strutturale ovvero mediante blocchi tra loro interconnessi I vari “components” devono essere già presenti in una libreria di riferimento  La dichiarazione dei “components” e’ spesso raccolta in un “package” La “port map” indica il collegamento fisico Vengono solitamente impiegati segnali interni
Un primo esempio…
Sommare due numeri interi positivi
Addizione senza segno bit-slice a propagazione di riporto Un sommatore  bit-slice ripple carry  è strutturato in modo che il  modulo in posizione  i -esima : Riceve in ingresso i bit  x i  e  y i  degli operandi Riceve in ingresso il riporto  c i  del modulo precedente Produce la somma  s i  = x i 'y i 'c i  + x i 'y i c i ' + x i y i 'c i ' + x i y i c i  = (x i   xor  y i )’c i  + (x i   xor   y i )c i ’ = x i   xor  y i   xor  c i Produce il riporto  c i+1  = x i y i  + x i c i  + y i c i = x i  y i  + (x i   xor   y i )c i   Il modulo in posizione 0 ha il bit di riporto  c 0 =0   Il riporto  c 0  può essere sfruttato per sommare il valore 1  Necessario per il calcolo del complemento a 2 La somma di numero ad  n  bit richiede un tempo pari  ad  n  volte circa quello richiesto da un modulo di somma c i  x i  y i   s i  c i+1 0  0  0  0  0 0  0  1  1  0 0  1  0  1  0 0  1  1  0  1 1  0  0  1  0 1  0  1  0  1 1  1  0  0  1 1  1  1  1  1
Full Adder - expression x i y i c i c i+1 s i Full Adder Full Adder x i   y i   c i s i x i   y i   c i c i+1
Half adder
Full Adder
Addizione senza segno  ripple-carry Prestazioni: calcolo dei ritardi Il calcolo esatto del ritardo si effettua basandosi sulla seguente architettura  Siano  T s  e  T r  i ritardi per il calcolo della somma e del riporto  i-mi  rispettivamente Prestazioni : il ritardo totale per ottenere tutti i bit della somma è dato dall’espressione: T tot  = (n-1)T r  + T s Il  percorso critico  è quindi quello del  riporto FA n-1 FA 1 FA 0 x 0   y 0 x 1   y 1 x n-1  y n-1 s 1 s 0 c 0 c n c 2 c 1 s n-1
Ripple Carry Adder Ripple-Carry Architecture Full Adder x 0 y 0 c 0 s 0 Full   Adder x 1 y 1 c 1 c 2 s 1 Full Adder x n-1 y n-1 c n-1 c n s n-1 n-bit  Ripple Carry Adder s n-1  s 0 x n-1  y n-1  x 0  y 0 c 0 c n Ripple-Carry Adder
n-bit  Ripple Carry Adder s n-1  s 0 x n-1  y n-1  x 0  y 0 n-bit  Ripple Carry Adder s 2n-1  s n x 2n-1  y 2n-1  x n  y n x kn-1  y kn-1 c 0 c n c 2n Ripple Carry Block Adder n-bit  Ripple Carry Adder s kn-1  s (k-1)n c (k-1)n c kn
Addizione veloce  (ad anticipazione di riporto)   Funzioni di generazione e di propagazione del riporto Si basa sulle seguenti considerazioni Le espressioni di somma e riporto per lo stadio  i  sono: s i  = x i 'y i 'c i  + x i 'y i c i ' + x i y i 'c i ' + x i y i c i c i+1  = x i y i  + x i c i  + y i c i L’espressione del riporto in uscita può essere riscritta come: c i+1  = G i  + P i c i   con  G i  = x i y i   e  P i  = x i  + y i   (o anche  P i  = x i     y i   ) Le funzioni  G i  e  P i   Sono dette funzioni di  generazione  e  propagazione G i : se  x i =y i =1,  allora il riporto in uscita  deve  essere generato P i : se  x i  o y i =1 e c i  =1,  allora il riporto in ingresso  deve  essere propagato in uscita Possono essere calcolate in parallelo, per tutti gli stadi, rispetto alle rispettive somme.
Addizione veloce calcolo dei riporti in parallelo   L’espressione per il riporto  c i+1   = G i  + P i c i  può essere calcolata in modo  iterativo .  Sostituendo  c i  = G i-1  + P i-1 c i-1  nell'espressione di c  i+1  si ha: c i+1  = G i  + P i (G i-1 +P i-1 c i-1 ) = G i  + P i G i-1 + P i P i-1 c i-1 Continuando con l' espansione  fino a c 0  si ottiene: c i+1  = G i   + P i G i-1  + P i P i-1 G i-2  +  + ... +  + P i P i-1 ...P 1 G 0  +  + P i P i-1 ...P 1 P 0 c 0 I riporti in uscita di ogni singolo stadio possono essere calcolati tutti in parallelo e con ritardo identico (realizzazione SOP) tramite: le  i  funzioni di generazione  G i  e  le  i  funzioni di propagazione  P i il riporto in ingresso allo stadio 0,  c 0 I sommatori che sfruttano il meccanismo della generazione dei riporti in anticipo sono detti  Carry-Look-Ahead Adders o CLA Adders
Carry Look-Ahead Adder Carry Look-Ahead Logic: Internal architecture CLA Logic c 0 c n x 0  y 0 x n-1  y n-1 c n-1 c 1 Carry Look-Ahead Logic x 0  y 0 G 0  P 0 c 0 c 1 x 1  y 1 G 1  P 1 c 2 G n-1  P n-1 x n-1  y n-1
Addizione veloce Esempio: prestazioni per un CLA a 4 bit 2 x 0   y 0 x 1   y 1 s 1 s 0 c 0 c 1 P 0   G 0 2 2 1 5 2 x 2   y 2 s 2 c 2 P 1   G 1  P 0   G 0 2 2 1 5 x 3   y 3 s 3 c 3 P 2  G 2 P 1  G 1 P 0 G 0 2 2 1 5 c 4 2 1 P 3  G 3 P 2  G 2 P 1 G 1 P 0 G 0 3 c 1 =G 0 +P 0 c 0    c 2 = G 1 +P 1 G 0 +P 1 P 0 c 0   c 3 = G 2 +P 2 G 1 +P 2 P 1 G 0 +P 2 P 1 P 0 c 0 c 4  = G 3  + P 3 G 2  + P 3 P 2 G 1  + P 3 P 2 P 1 G 0  + P 3 P 2 P 1 P 0 c 0 3 3 3 c 4 3 CLA logic Full Adder dove  G i =x i y i  P i =x i +y i c 0 c 0 c 0 c 0
Carry Look-Ahead Adder Carry Look-Ahead Logic Carry Look-Ahead Logic Full Adder c 0 s 0 Full Adder c 1 s 1 Full Adder x n-1  y n-1 s n-1 c n-1 x 1  y 1 x 0  y 0 c n x 0  y 0 x n-1  y n-1
E in VHDL?
Complichiamo un pò il problema...
VHDL – Half Adder Problema: descrivere un singolo bit half adder con i segnali di carry ed enable Specifica Ingressi e uscite sono tutti definiti da un solo bit Quando enable è alto, result è x + y Quando enable è alto, carry è uguale x and y Le uscite sono uguali a 0 quando enable è basso x y enable carry result Half Adder
Entity Half Adder ENTITY half_adder IS PORT( x, y, enable : IN BIT;   carry, result : OUT BIT); END half_adder; x y enable carry result Half Adder
Half Adder: Circuito
HA: Descrizione comportamentale ARCHITECTURE half_adder_a OF half_adder IS BEGIN PROCESS (x, y, enable) BEGIN IF enable = ‘1’ THEN result <= x XOR y; carry <= x AND y; ELSE carry <= ‘0’; result <= ‘0’; END IF; END PROCESS; END half_adder_a;
HA: Descrizione dataflow ARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b;
HA: Descrizione strutturale Dichiarazione dei  component ARCHITECTURE half_adder_c OF half_adder IS COMPONENT and2 PORT (in0, in1 : IN BIT;   out0 : OUT BIT); END COMPONENT; COMPONENT and3 PORT (in0, in1, in2 : IN BIT;   out0 : OUT BIT); END COMPONENT; COMPONENT xor2 PORT (in0, in1 : IN BIT;   out0 : OUT BIT); END COMPONENT; -- description is continued on next slide
HA: Descrizione strutturale -- continuing half_adder_c description SIGNAL xor_res : BIT; -- internal signal -- Note that other signals are already declared in entity BEGIN A0 : and2 PORT MAP (enable, xor_res, result); A1 : and3 PORT MAP (x, y, enable, carry); X0 : xor2 PORT MAP (x, y, xor_res); END half_adder_c;
Architecture Tutte queste tecniche costitutive per l’Architecture possono fondersi tra loro Una buona descrizione architetturale è il primo passo per una buona Sintesi Non tutto ciò che è scritto in VHDL può essere sintetizzato!!
Piccola nota... Double DRIVEN ARCHITECTURE  arch   OF  circ  IS SIGNAL s : BIT; BEGIN PROCESS BEGIN s <= operazione1; END PROCESS; PROCESS BEGIN s <= operazione2; END PROCESS; END arch; S operazione1 operazione2
References The VHDL Cookbook, P. J.Ashenden The Hamburg VHDL archive: http://tech-www.informatik.uni-hamburg.de/vhdl/ Il Linguaggio VHDL. Introduzione al linguaggio VHDL per la descrizione di sistemi digitali, Xilinx Inc. WEB-LINKS: http://www.ashenden.com.au/designers-guide/DG.html http://www.ashenden.com.au/designers-guide/DG-intro-lectures.html http://www.ashenden.com.au/students-guide/SG.html
Questions

DHow2 - L1

  • 1.
    VHDL: una breveintroduzione DRESD H ow T o (DHow2) – L1 DRESD Team [email_address]
  • 2.
    VHDL V HSIC H ardware D escription L anguage V ery H igh S peed I ntegrated C ircuit Linguaggio per la descrizione dei C.I. Esistono tre modi per descrivere un C.I. Dataflow – Descrivere un circuito usando i gate Structural – Descrivere un circuito usando delle distinte descrizioni strutturali Behavioral – Attraverso del codice (ifs, loops, etc.)
  • 3.
    Introduzione Il LinguaggioVHDL viene utilizzato per: Documentare, Simulare, Sintetizzare circuiti e sistemi logici. Esso è costituito da più parti alcune delle quali fanno parte integrale del linguaggio stesso, mentre altre vengono integrate da opportuni “packages” realizzati all’interno di “libraries”
  • 4.
    Un primo esempioA <= B + C after 5.0 ns Aspetti introdotti : Descrizione / documentazione Simulazione Sintesi Logica B C A + 8 8 8
  • 5.
    Descrizione / DocumentazioneUna delle funzioni del VHDL è quella di descrivere / documentare il funzionamento di un sistema in modo chiare ed inequivocabile Non è detto che questo sistema debba essere realizzato Alle volte è IMPOSSIBILE la realizzazione fisica del circuito Potrebbe essere la descrizione di un sistema già in funzione Potrebbe essere un modo per descrivere gli stimoli da impiegare per testare un circuito
  • 6.
    Un sistema descrittoin VHDL viene solitamente SIMULATO per analizzarne in comportamento (simulazione comportamentale) Bisogna fornire degli stimoli (INPUT) Ed avere un sistema capace di osservare l’evoluzione del modello durante la simulazione, registrarne le variazioni per un’eventuale ispezione di funzionamento Il simulatore deve aver la possibilità di rappresentare una variabile come “unknown”. Simulazione
  • 7.
    Sintesi Logica Passaggiotra descrizione comportamentale e descrizione a porte logiche La sintesi avviene tramite appositi programmi che si appoggiano a librerie dove sono descritte le porte logiche da impiegare (fornite dal venditore) La sintesi è un processo delicato che deve essere opportunamente “guidato ed ottimizzato” Solo un ristretto sottoinsieme del VHDL si presta ad essere Sintetizzato automaticamente. Non tutto ciò che è scritto in VHDL è sintetizzabile La restante parte è da impiegarsi per la descrizione e per la simulazione
  • 8.
    Progetto in VHDLPuò essere composto da più unità compilate e salvate in opportune librerie Queste unità sono: Entity Architecture Package Entity ed Architecture descrivono i componenti come interfaccia e come struttura interna Package: contiene funzioni e/o grandezze di uso comune
  • 9.
    use libreria entitycircuito is ... end circutio; architecture archi of circuito is -- istruzione concorrente 1 -- istruzione concorrente 2 begin pa: process begin -- istruzione sequenziale pa_1 -- istruzione sequenziale pa_2 -- ... end; pb: process begin -- istruzione sequenziale pa_2 -- ... end; end; Struttura generale di un programma Area sequenziale Area sequenziale Area concorrente
  • 10.
    Entity Descrive uncircuito solo come Interfaccia da e verso l’esterno, ne fornisce una visione “ai morsetti” Descrive gli ingressi e le uscite di un circuito Non fornisce alcun dettaglio sul funzionamento o sull’architettura entity circuito is port ( a, b : in bit ; c : out bit ); end entity ; Nome della entity Nome delle porte Modo delle porte (direzione) Tipo delle porte Parole riservate circuito a b c
  • 11.
    Architecture Descrive ilfunzionamento dell’”Entity” tramite: descrizione astratta (comportamentale) equazioni logico/ aritmetiche (dataflow) Interconnessione tra moduli (strutturale) Lo stesso componente può essere descritto a più livelli di astrazione
  • 12.
    Architecture: Descrizione comportamentaleDescrizione comportamentale ad alto livello di astrazione (risulta molto simile ad un algoritmo espresso secondo il classici linguaggi sequenziali (C, Fortran, Pascal, ecc..) Utile per simulare parti di circuito senza dover scendere troppo nel dettaglio del funzionamento. Utilizzo di PROCESS (con lista dei segnali di attivazione) Più operazioni agenti in parallelo risiedono in diversi “Process” Diversi processi comunicano tra loro mediante “SEGNALI” ma al loro interno lavorano mediante “VARIABILI” Al loro interno i “Processes” sono sequenziali ATTENZIONE : non tutto ciò che viene descritto al livello comportamentale risulta sintetizzabile
  • 13.
    Processi Un process è un'istruzione concorrente che contiene un'area sequenziale. Un processo viene eseguito parallelamente alle altre istruzioni concorrenti. L'esecuzione del suo body può essere condizionata da una sensitivity list , una lista di segnali. La sensitivity list non si usa quando il body contiene un'istruzione wait. In questo caso l'esecuzione viene avviata e si sospende nel modo indicato da wait . Note: In un processo le variabili locali conservano in proprio valore nel tempo tra un'esecuzione e l'altra.
  • 14.
    Architecture: descrizione strutturaleDescrizione Strutturale ovvero mediante blocchi tra loro interconnessi I vari “components” devono essere già presenti in una libreria di riferimento La dichiarazione dei “components” e’ spesso raccolta in un “package” La “port map” indica il collegamento fisico Vengono solitamente impiegati segnali interni
  • 15.
  • 16.
    Sommare due numeriinteri positivi
  • 17.
    Addizione senza segnobit-slice a propagazione di riporto Un sommatore bit-slice ripple carry è strutturato in modo che il modulo in posizione i -esima : Riceve in ingresso i bit x i e y i degli operandi Riceve in ingresso il riporto c i del modulo precedente Produce la somma s i = x i 'y i 'c i + x i 'y i c i ' + x i y i 'c i ' + x i y i c i = (x i xor y i )’c i + (x i xor y i )c i ’ = x i xor y i xor c i Produce il riporto c i+1 = x i y i + x i c i + y i c i = x i y i + (x i xor y i )c i Il modulo in posizione 0 ha il bit di riporto c 0 =0 Il riporto c 0 può essere sfruttato per sommare il valore 1 Necessario per il calcolo del complemento a 2 La somma di numero ad n bit richiede un tempo pari ad n volte circa quello richiesto da un modulo di somma c i x i y i s i c i+1 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1
  • 18.
    Full Adder -expression x i y i c i c i+1 s i Full Adder Full Adder x i y i c i s i x i y i c i c i+1
  • 19.
  • 20.
  • 21.
    Addizione senza segno ripple-carry Prestazioni: calcolo dei ritardi Il calcolo esatto del ritardo si effettua basandosi sulla seguente architettura Siano T s e T r i ritardi per il calcolo della somma e del riporto i-mi rispettivamente Prestazioni : il ritardo totale per ottenere tutti i bit della somma è dato dall’espressione: T tot = (n-1)T r + T s Il percorso critico è quindi quello del riporto FA n-1 FA 1 FA 0 x 0 y 0 x 1 y 1 x n-1 y n-1 s 1 s 0 c 0 c n c 2 c 1 s n-1
  • 22.
    Ripple Carry AdderRipple-Carry Architecture Full Adder x 0 y 0 c 0 s 0 Full Adder x 1 y 1 c 1 c 2 s 1 Full Adder x n-1 y n-1 c n-1 c n s n-1 n-bit Ripple Carry Adder s n-1 s 0 x n-1 y n-1 x 0 y 0 c 0 c n Ripple-Carry Adder
  • 23.
    n-bit RippleCarry Adder s n-1 s 0 x n-1 y n-1 x 0 y 0 n-bit Ripple Carry Adder s 2n-1 s n x 2n-1 y 2n-1 x n y n x kn-1 y kn-1 c 0 c n c 2n Ripple Carry Block Adder n-bit Ripple Carry Adder s kn-1 s (k-1)n c (k-1)n c kn
  • 24.
    Addizione veloce (ad anticipazione di riporto) Funzioni di generazione e di propagazione del riporto Si basa sulle seguenti considerazioni Le espressioni di somma e riporto per lo stadio i sono: s i = x i 'y i 'c i + x i 'y i c i ' + x i y i 'c i ' + x i y i c i c i+1 = x i y i + x i c i + y i c i L’espressione del riporto in uscita può essere riscritta come: c i+1 = G i + P i c i con G i = x i y i e P i = x i + y i (o anche P i = x i  y i ) Le funzioni G i e P i Sono dette funzioni di generazione e propagazione G i : se x i =y i =1, allora il riporto in uscita deve essere generato P i : se x i o y i =1 e c i =1, allora il riporto in ingresso deve essere propagato in uscita Possono essere calcolate in parallelo, per tutti gli stadi, rispetto alle rispettive somme.
  • 25.
    Addizione veloce calcolodei riporti in parallelo L’espressione per il riporto c i+1 = G i + P i c i può essere calcolata in modo iterativo . Sostituendo c i = G i-1 + P i-1 c i-1 nell'espressione di c i+1 si ha: c i+1 = G i + P i (G i-1 +P i-1 c i-1 ) = G i + P i G i-1 + P i P i-1 c i-1 Continuando con l' espansione fino a c 0 si ottiene: c i+1 = G i + P i G i-1 + P i P i-1 G i-2 + + ... + + P i P i-1 ...P 1 G 0 + + P i P i-1 ...P 1 P 0 c 0 I riporti in uscita di ogni singolo stadio possono essere calcolati tutti in parallelo e con ritardo identico (realizzazione SOP) tramite: le i funzioni di generazione G i e le i funzioni di propagazione P i il riporto in ingresso allo stadio 0, c 0 I sommatori che sfruttano il meccanismo della generazione dei riporti in anticipo sono detti Carry-Look-Ahead Adders o CLA Adders
  • 26.
    Carry Look-Ahead AdderCarry Look-Ahead Logic: Internal architecture CLA Logic c 0 c n x 0 y 0 x n-1 y n-1 c n-1 c 1 Carry Look-Ahead Logic x 0 y 0 G 0 P 0 c 0 c 1 x 1 y 1 G 1 P 1 c 2 G n-1 P n-1 x n-1 y n-1
  • 27.
    Addizione veloce Esempio:prestazioni per un CLA a 4 bit 2 x 0 y 0 x 1 y 1 s 1 s 0 c 0 c 1 P 0 G 0 2 2 1 5 2 x 2 y 2 s 2 c 2 P 1 G 1 P 0 G 0 2 2 1 5 x 3 y 3 s 3 c 3 P 2 G 2 P 1 G 1 P 0 G 0 2 2 1 5 c 4 2 1 P 3 G 3 P 2 G 2 P 1 G 1 P 0 G 0 3 c 1 =G 0 +P 0 c 0 c 2 = G 1 +P 1 G 0 +P 1 P 0 c 0 c 3 = G 2 +P 2 G 1 +P 2 P 1 G 0 +P 2 P 1 P 0 c 0 c 4 = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0 + P 3 P 2 P 1 P 0 c 0 3 3 3 c 4 3 CLA logic Full Adder dove G i =x i y i P i =x i +y i c 0 c 0 c 0 c 0
  • 28.
    Carry Look-Ahead AdderCarry Look-Ahead Logic Carry Look-Ahead Logic Full Adder c 0 s 0 Full Adder c 1 s 1 Full Adder x n-1 y n-1 s n-1 c n-1 x 1 y 1 x 0 y 0 c n x 0 y 0 x n-1 y n-1
  • 29.
  • 30.
    Complichiamo un pòil problema...
  • 31.
    VHDL – HalfAdder Problema: descrivere un singolo bit half adder con i segnali di carry ed enable Specifica Ingressi e uscite sono tutti definiti da un solo bit Quando enable è alto, result è x + y Quando enable è alto, carry è uguale x and y Le uscite sono uguali a 0 quando enable è basso x y enable carry result Half Adder
  • 32.
    Entity Half AdderENTITY half_adder IS PORT( x, y, enable : IN BIT; carry, result : OUT BIT); END half_adder; x y enable carry result Half Adder
  • 33.
  • 34.
    HA: Descrizione comportamentaleARCHITECTURE half_adder_a OF half_adder IS BEGIN PROCESS (x, y, enable) BEGIN IF enable = ‘1’ THEN result <= x XOR y; carry <= x AND y; ELSE carry <= ‘0’; result <= ‘0’; END IF; END PROCESS; END half_adder_a;
  • 35.
    HA: Descrizione dataflowARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b;
  • 36.
    HA: Descrizione strutturaleDichiarazione dei component ARCHITECTURE half_adder_c OF half_adder IS COMPONENT and2 PORT (in0, in1 : IN BIT; out0 : OUT BIT); END COMPONENT; COMPONENT and3 PORT (in0, in1, in2 : IN BIT; out0 : OUT BIT); END COMPONENT; COMPONENT xor2 PORT (in0, in1 : IN BIT; out0 : OUT BIT); END COMPONENT; -- description is continued on next slide
  • 37.
    HA: Descrizione strutturale-- continuing half_adder_c description SIGNAL xor_res : BIT; -- internal signal -- Note that other signals are already declared in entity BEGIN A0 : and2 PORT MAP (enable, xor_res, result); A1 : and3 PORT MAP (x, y, enable, carry); X0 : xor2 PORT MAP (x, y, xor_res); END half_adder_c;
  • 38.
    Architecture Tutte questetecniche costitutive per l’Architecture possono fondersi tra loro Una buona descrizione architetturale è il primo passo per una buona Sintesi Non tutto ciò che è scritto in VHDL può essere sintetizzato!!
  • 39.
    Piccola nota... DoubleDRIVEN ARCHITECTURE arch OF circ IS SIGNAL s : BIT; BEGIN PROCESS BEGIN s <= operazione1; END PROCESS; PROCESS BEGIN s <= operazione2; END PROCESS; END arch; S operazione1 operazione2
  • 40.
    References The VHDLCookbook, P. J.Ashenden The Hamburg VHDL archive: http://tech-www.informatik.uni-hamburg.de/vhdl/ Il Linguaggio VHDL. Introduzione al linguaggio VHDL per la descrizione di sistemi digitali, Xilinx Inc. WEB-LINKS: http://www.ashenden.com.au/designers-guide/DG.html http://www.ashenden.com.au/designers-guide/DG-intro-lectures.html http://www.ashenden.com.au/students-guide/SG.html
  • 41.