DHow2 - L1

1,191 views

Published on

  • Be the first to comment

  • Be the first to like this

DHow2 - L1

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

×