Download presentation
Presentation is loading. Please wait.
1
Introducere ȋn modelarea VHDL
Capitolul 4 Introducere ȋn modelarea VHDL 2010 Proiectarea sistemelor digitale
2
Proiectarea sistemelor digitale
Tematica Scurt istoric Caracteristici Etapele sintezei şi implementării Structura unui program VHDL Modele VHDL Tipuri de date 2010 Proiectarea sistemelor digitale
3
Proiectarea sistemelor digitale
Ce este VHDL? VHDL – Very High-Speed Integrated Circuits Hardware Description Language Este un limbaj de programare dezvoltat şi optimizat pentru descrierea funcțională a sistemelor digitale, care oferă: posibilitatea descrierii la nivel de detalii a funcționării componentelor electronice de la nivelul de poartă logică până la microprocesoare şi ASIC. Modelele VHDL realizate pot fi ȋnglobate ca blocuri ȋn descrierea unor circuite complexe, pentru simulare. posibilitatea descrierii funcționale/structurale a unui circuit digital ȋn scopul sintezei automate. posibilități pentru programare structurată. posibilitatea descrierii naturale a unor evenimente concurente, specifice funcționării reale a circuitelor digitale. posibilitatea generării şi execuției unor programe speciale pentru verificarea funcționării unei scheme descrise VHDL. Astfel de programe se numesc test bench şi fac parte obligatoriu din orice proiect alaturi de modelul circuitului sintetizat/analizat. Ele conțin descrierea stimulilor şi a rezultatelor ce ar trebui obținute prin aplicarea acestora, ȋn scopul depistării automate prin comparare a unor erori funcționale. 2010 Proiectarea sistemelor digitale Ionescu Augustin-Iulian
4
Proiectarea sistemelor digitale
Scurt istoric Este un produs al proiectului VHSIC al Departamentului Apararii SUA (anii 70 şi 80), inițiat pentru a surmonta durata mare a ciclului de viață al produselor hardware; sunt dezvoltate principalele elemente ale limbajului (versiunea 7.2) de către firmele Intermetrics, IBM şi TI; 1986 toate drepturile sunt transferate către IEEE În 1987 a devenit standardul IEEE 1076, completat şi dezvoltat ȋn 1993 ca standard IEEE 1164; 1994 este revizuit şi redenumit VHDL ; Din 1996 IEEE devine standard VHDL pentru sinteză. 2000 este revizuit şi redenumit VHDL ; 2002este revizuit şi redenumit VHDL ; 2007 este revizuit şi redenumit VHDL 1076c-2007; se introduce VHDL Procedural Interface (VHPI); VHPI permite accesul unor programe scrise ȋn limbaj procedural la un model VHDL, atât ȋnaintea cât şi pe durata simulării; 2009 este revizuit şi redenumit VHDL Detalii: 2010 Proiectarea sistemelor digitale Ionescu Augustin-Iulian
5
Proiectarea sistemelor digitale
Caracteristici Există unele deosebiri ȋntre a scrie VHDL pentru sinteză şi a scrie VHDL pentru simulare; Este posibil ca un program VHDL să fie perfect din punct de vedere sintactic dar neimplementabil datorită unor greşeli generate de neȋnțelegerea fenomenelor la nivel fizic. Un proiect scris ȋn VHDL permite sinteza şi simularea pentru o mare varietate de tehnologii, familii de PLD, CPLD, FPGA etc., ȋntr-un timp relativ scurt. La nivele superioare, proiectantul poate să se concentreze pe descrierea funcțională a schemelor şi nu pe detalii de implementare. Pot fi realizate teste de performanță pentru diversele variante de sinteză ȋn scopul fundamentării unei decizii privind soluția optimă. În anumite situații este necesară intervenția proiectantului pentru a elimina anumite anomalii din soluția generată automat. 2010 Proiectarea sistemelor digitale
6
Proiectarea sistemelor digitale
Portabilitatea Fig. 4.1 2010 Proiectarea sistemelor digitale
7
Nivele de descriere ȋn VHDL
Vom considera un comparator de egalitate pe 2 biți cu schema bloc din Fig. 4.2 şi schema de structură din Fig. 4.3. Pot fi puse ȋn evidență 4 modalități de a descrie schema analizată: 2010 Proiectarea sistemelor digitale
8
Nivele de descriere ȋn VHDL
descrierea structurală: u1: xor2 port map (a(0), b(0), x(0)); u2: xor2 port map (a(1), b(1), x(1)); u3: nor2 port map (x(0), x(1), aeqb); descrierea prin ecuații logice: aeqb <= (a(0)XOR b(0))NOR (a(1)XOR b(1)); descrierea cu instrucțiuni concurente: aeqb <=‘1’ when a=b else ‘0’; descrierea cu instrucțiuni secvențiale: if a=b then aeqb <= ‘1’; else aeqb <= ‘0’; 2010 Proiectarea sistemelor digitale
9
Proiectarea sistemelor digitale
Dezavantaje Sunt legate de calitatea compilatoarelor, de posibilitatea de a specifica diverse directive de sinteză cu scopul de a controla criteriile de optimalitate, de bibliotecile de PLD, CPLD, FPGA, de calitatea simulării. 2010 Proiectarea sistemelor digitale Ionescu Augustin-Iulian
10
Etapele sintezei şi implementării
Fig. 4.4 2010 Proiectarea sistemelor digitale
11
Proiectarea sistemelor digitale
Termeni specifici Entitatea (entity). Reprezintǎ blocul de bazǎ al oricǎrui proiect și conține descrierea elementelor constitutive ala proiectului. Dacǎ proiectul are o structurǎ ierarhicǎ, entitatea de la nivelul cel mai ȋnalt (top-level entity) va conține entitǎți de nivel inferior. Arhitectura (architecture). Orice entitate care poate fi simulatǎ are o descriere a arhitecturii. Arhitectura descrie comportamentul (behavior) entitǎții. O entitate poate avea mai multe arhitecturi, funcționale sau structurale. Configurarea (configuration). O instrucțiune de configurare este utilizatǎ pentru a lega o componentǎ de o anumitǎ pereche entitate-arhitecturǎ. Configurarea poate fi consideratǎ ca o listǎ de componente (parts list) pentru un proiect. Pachet (package). Un pachet este o colecție de tipuri de date și subprograme utilizate ȋn cadrul proiectului. 2010 Proiectarea sistemelor digitale
12
Proiectarea sistemelor digitale
Termeni specifici Driver. Reprezintǎ sursa unui semnal. Un semnal poate avea mai multe surse. Magistrala (bus). Deși ȋn mod uzual prin magistralǎ ȋnțelegem un grup de semnale cu funcțiune asemǎnǎtoare, ȋn VHDL magistrala desemneazǎ un tip special de semnal ale cǎrui surse pot fi deconectate. Atribut (attribute). Un atribut reprezintǎ date atașate unui obiect VHDL sau date predefinite despre un obiect VHDL. Generic. Desemneazǎ un parametru care transferǎ informație cǎtre o entitate. De exemplu numǎrul concret de intrǎri de selecție ale unui multiplexor poate fi precizat printr-un generic. Permite scrierea unor șabloane pentru diverse dispozitive. Proces (process). Este unitatea fundamentalǎ ȋn execuția unui proiect VHDL. 2010 Proiectarea sistemelor digitale
13
Structura unui program VHDL
Fig. 4.5 2010 Proiectarea sistemelor digitale
14
Proiectarea sistemelor digitale
Declararea entității descrie intrările şi ieşirile entității proiectate. declarația entității reprezintă o cutie neagră pentru care se cunosc intrările şi ieşirile dar nu se ştie nimic despre legătura dintre acestea. se recomandă să fie utilizate tipuri de variabile conform standardului IEEE 1164 adică: std_logic pentru scalari; std_logic_vector pentru vectori. Port – orice semnal de intrare/ieşire. Într-un program fiecare port se reprezintă printr-o variabilă căreia putem să-i asignăm valori şi pe care o putem utiliza ȋn expresii. Particularitățile porturilor vor fi discutate mai târziu. pentru fiecare port trebuie să precizăm: un nume (mnemonic); o direcție (mod); un tip de dată. 2010 Proiectarea sistemelor digitale
15
Proiectarea sistemelor digitale
Declararea entității Exemplu: descrierea entității pentru un MUX 4 cu schema bloc din Fig. 4.6. entity MUX4 is port( EN: in std_logic; S: in std_logic_vector (1 downto 0); I: in std_logic_vector (3 downto 0); Y: out std_logic ); end MUX4; Fig. 4.6 2010 Proiectarea sistemelor digitale
16
Proiectarea sistemelor digitale
Moduri Modul descrie direcția ȋn care este transferată data printr-un port. Pot fi definite 4 moduri (Fig. 4.7): in; out; buffer; inout. Fig. 4.7 2010 Proiectarea sistemelor digitale
17
Proiectarea sistemelor digitale
Moduri in – port unidirecțional care transferă date numai dinspre exterior către interior. out – port unidirecțional care transferă date numai dinspre sursa internă catre exterior. Nu poate fi utilizat pentru implementarea unei reacții deoarece data din acest port nu poate fi citită. buffer – port unidirecțional analog unui port declarat mod out dar care permite utilizarea pentru reacții interne. Nu trebuie confundat cu un port bidirecțional deoarece nu poate transfera date de la o sursă externă. Un port buffer poate fi conectat doar la un semnal intern sau la un port buffer al unei alte entități. Nu poate fi conectat la un port out sau inout al altei entități. inout – port bidirecțional. Semnalul poate fi generat dintr-o sursă internă sau externă. Poate fi utilizat şi pentru implementarea unor reacții interne. Poate ȋnlocui oricare dintre celelalte 3 moduri dar nu este recomandat deoarece schemele vor fi greu de citit şi ȋnțeles. 2010 Proiectarea sistemelor digitale
18
Proiectarea sistemelor digitale
Tipuri de date Tipurile de date utilizate depind de standardul cu care se lucrează. conform standardului IEEE 1076/93 putem utiliza tipurile: boolean; bit; bit_vector; integer. conform standardului IEEE 1164 putem utiliza tipurile: std_ulogic; std_logic; std_ulogic_vector; std_logic_vector. 2010 Proiectarea sistemelor digitale
19
Proiectarea sistemelor digitale
Tipuri de date Precizarea bibliotecii ce va fi utilizată pentru declararea tipului datelor se face prin clauzele library si use. Exemplu: library ieee; use ieee.std_logic_1164.all 2010 Proiectarea sistemelor digitale
20
Arhitectura entității (architecture body)
Arhitectura entității este asociată cu o declarație de entitate şi descrie funcția realizată de entitate. Există mai multe stiluri (style) de descriere a funcției unei entități: funcțional/comportamental (behavioral); flux de date (dataflow); structural (structural). Pot fi utilizate şi combinații ale celor 3 stiluri. Descrierile funcțională şi prin flux de date sunt descrieri funcționale ce nu depind de structura schemei. Deosebirile apar la nivelul instrucțiunilor utilizate. Proiectarea sistemelor digitale 2010
21
Corpul arhitecturii (Architecture body)
Descrierea funcțională utilizează conceptul de proces (process) şi permite utilizarea unor instrucțiuni secvențiale cum ar fi if else sau loop. Exemplu: Descrierea funcțională a arhitecturii unui comparator de egalitate pe 4 biți cu ieşirea activă pe nivel ridicat. Fig. 4.8 Proiectarea sistemelor digitale 2010
22
Model funcțional (1) - flux de date
Fig. 4.9 Proiectarea sistemelor digitale 2010
23
Proiectarea sistemelor digitale
Model funcțional (2) Proiectarea sistemelor digitale 2010
24
Modelul funcțional cu formule
Proiectarea sistemelor digitale 2010
25
Proiectarea sistemelor digitale
Modelul structural 2010 Proiectarea sistemelor digitale
26
Identificatori, obiecte,
tipuri de date, atribute
27
Identificatori (identifiers)
Numele unui obiect conține: Litere Cifre; Sublinieri. Observații! cu o singură excepție (valorile literale H,L,Z,…), nu are importanță dacă utilizăm litere mari sau mici; primul caracter va fi ȋntotdeauna o literă; nu se acceptă două sublinieri alăturate; ultimul caracter nu poate fi sublinierea. 2010 Proiectarea sistemelor digitale
28
Obiecte (data objects)
Păstreaza valori de un tip specificat. Pot fi: constante; semnale; variabile; fişiere. Un obiect trebuie declarat ȋnainte de utilizare. Constante – păstreaza o valoare ce nu poate fi modificată pe durata utilizării. Se folosesc pentru a creşte claritatea programelor şi a simplifica realizarea eventualelor modificări ȋn program. Exemplu: pentru definirea lungimii unui registru putem utiliza declarația constant lung_reg: integer:=12; Constantele pot fi definite ȋn pachet, entitate, arhitectură, sau proces. Locul ȋn care este definită constanta stabileşte domeniul de vizibilitate al acesteia. 2010 Proiectarea sistemelor digitale
29
Obiecte (data objects)
Semnalele – pot reprezenta sârme deci pot interconecta componente. Porturile sunt de asemenea semnale şi pot fi declarate explicit ca semnale. Exemplu: signal numar: STD_LOGIC_VECTOR (3 downto 0) := "0000"; numar poate să reprezinte starea unui numărator şi ȋn acest caz el reprezintă elemente de memorie sau cel puțin sârmele ataşate la ieşirea elementelor de memorie. O valoare inițială poate fi ataşata semnalului, dar ȋn general ea nu are nici o relevanță pentru sinteză deoarece nu există nici o garanție că la pornire bistabilele vor trece ȋn starea inițială specificată. Observație! Simbolul := indică asignarea imediată şi este utilizat pentru a indica valoarea inițială a semnalului. Simbolul <= este utilizat pentru asignarea unei valori care poate modifica forma de undă a semnalului. 2010 Proiectarea sistemelor digitale
30
Obiecte (data objects)
Variabilele – sunt utilizate numai ȋn procese şi subprograme fiind declarate ȋn zona de declarație a procesului/subprogramului. În sinteză se utilizează ca indici de variabilă sau pentru păstrarea temporară a unor date. Fişierele – sunt utilizate pentru păstrarea datelor de test şi a rezultatelor testării. Aliasurile nu sunt obiecte ci o alternativă de identificare a unui obiect sau a unei părți a acestuia. Exemplu: alias top_addr : std_logic_vector (3 downto 0) is address (31 downto 28); 2010 Proiectarea sistemelor digitale
31
Proiectarea sistemelor digitale
Tipuri de date scalare tipul enumerare – o listă de valori atomice pe care acest obiect le poate primi. Se utilizează frecvent pentru a desemna stările unei maşini secvențiale: Exemplu: type stari is (S0, S1, S2, S3, err); signal starea_curenta : stari; Implementarea fizică a tipului enumerare este specifică aplicației. Exemplu: stari poate să reprezinte un set de elemente de memorie care păstrează starea curentă ȋn implementarea one-hot. Este un tip de dată ordonat ȋn funcție de poziția ȋn listă. Exemplu: S0 – pondere minimă, err – pondere maximă. 2010 Proiectarea sistemelor digitale
32
Proiectarea sistemelor digitale
Tipuri de date scalare Un caz special de tip enumerare predefinit ȋl reprezintă std_logic. type std_logic is ( ‘U’ , -- neinitializat ‘X’ , -- necunoscut fortat ‘0’ , -- 0 fortat ‘1’ , -- 1 fortat ‘Z’ , -- impedanta ridicata ‘W’ , -- necunoscut slab ‘L’ , -- 0 slab ‘H’ , -- 1 slab ‘-’ , -- nedefinit ) Valorile ‘0’, ‘1’, ‘L’, ‘H’ sunt suportate de sinteză. Pentru sinteza cu ieşiri tri-state se acceptă şi ‘Z’. ‘-’ este acceptată ȋn sinteză pentru a desemna valori nedefinite. Valorile ‘U’, ‘X’, ‘W’ nu pot fi utilizate ȋn sinteză. 2010 Proiectarea sistemelor digitale
33
Proiectarea sistemelor digitale
Tipuri de date scalare tipul ȋntreg (integer) variable a: integer range -255 to 255; Intern, pentru sinteză tipul intreg poate fi reprezentat ca un vector cu semn. Subtipul natural poate fi reprezentat printr-un vector fără semn. Observație! Nu toate compilatoarele acceptă atât vectori cu semn cât şi vectori fără semn. tipuri fizice – utilizate ca unități de măsură. Nu au relevanță pentru sinteză. Pentru simulare este predefinit doar tipul time, dar pot fi definite şi alte tipuri. 2010 Proiectarea sistemelor digitale
34
Tipuri de date compozite
tabel (array); ȋnregistrare (record). 2010 Proiectarea sistemelor digitale
35
Tipuri de date compozite
Tabel – un obiect format din mai multe elemente de acelaşi tip. Exemplu: type std_ulogic_vector is array (natural range <>) of std_ulogic Se utilizează pentru a desemna magistrale. signal a : std_logic_vector (3 downto 0); pot fi definite tabele bidimensionale (pentru tabele de adevar) type tabel8x4 is array (0 to 7, 0 to 3) of bit; constant exclusive_or: tabel8x4 :=( “000_0”, “001_1”, “010_1”, “011_0”, “100_1”, “101_0”, “110_0”, “111_1” ); 2010 Proiectarea sistemelor digitale
36
Tipuri de date compozite
Şirurile de biți pot fi introduse direct ȋn binar sau ca şiruri octale ori hexazecimale. Şirurile de caractere se introduc ȋntre ghilimele, prefixate cu o literă prin care se precizează sistemul de numerație folosit: X, x pentru şir hexazecimal; O, o pentru şir octal; B, b pentru şir binar. Exemple: a<=X”ABBA” a<=x”ABBA” a<=O”125653” a<=o” ” a<=B” ” a<=b” ” a<=” ” 2010 Proiectarea sistemelor digitale
37
Tipuri de date compozite
Înregistrarea – un obiect care conține elemente (câmpuri) de tipuri diferite. Fiecare câmp poate fi referit prin numele său calificat cu numele ȋnregistrării din care face parte. Exemplu: iocell is record buffer_inp: std_logic_vector (7 downto 0); enable: std_logic; buffer_put: std_logic_vector (7 downto 0); end record; signal busa, busb, busc: iocell; signal vec: std_logic_vector (7 downto 0); busa.buffer_inp <= vec; -- un vector asignat altui vector busb.buffer_inp <= busa.buffer_inp; --asignarea unui camp busb.enable <=‘1’; -- asignarea unei valori busc <= busb; --asignarea unui obiect 2010 Proiectarea sistemelor digitale
38
Proiectarea sistemelor digitale
Tipuri şi subtipuri Subtipul (subtype) este un tip cu restricție. subtype byte is std_logic_vector (7 downto 0); signal byte1, byte2: byte; signal data1, data2: byte; signal addr1, addr2: byte; signal byte3, byte4: byte; signal data3, data4: byte; signal addr3, addr4: byte; În acest caz if data1=data3 then… nu va genera eroare la compilare deoarece tipul datelor este acelaşi. 2010 Proiectarea sistemelor digitale
39
Compatibilitatea tipurilor
Exemplu: type indice is integer range 0 to 255; signal int1: indice; signal int2: integer range 0 to 255; int1 <= int2; subtype indice is integer range 0 to 255; signal int2: natural range 0 to 255; În ambele cazuri cele două semnale sunt considerate de acelaşi tip. Din această cauză compararea lor sau asignarea nu vor produce eroare la compilare. 2010 Proiectarea sistemelor digitale
40
Compatibilitatea tipurilor
Exemplu: entity pTest is Port ( iaBus : in STD_LOGIC_VECTOR (7 downto 0); iEnable : in STD_LOGIC; oaBus : out STD_LOGIC_VECTOR (7 downto 0)); end pTest; architecture Behavioral of pTest is subtype indice is integer range 0 to 255; signal int1: indice:=15; signal int2: std_ulogic_vector (7 downto 0):=" "; begin process(int1,int2) if int1<int2 then -- eroare oaBus <= int1; eroare else oaBus <= int2; eroare end if; end process; end Behavioral; În acest caz compararea si asignarea valorilor vor genera eroare la compilare, tipurile de date din cei doi membri nefiind considerate compatibile. 2010 Proiectarea sistemelor digitale
41
Proiectarea sistemelor digitale
Atribute Un atribut oferă informație despre entități, arhitecturi, tipuri sau semnale. Există câteva atribute predefinite pentru valori, semnale şi intervale de valori, utile ȋn sinteză: 'left, 'right, 'high, 'low, 'length Exemple: type count is integer range 0 to 127; type states is (idle, decision, read, write); type word is array (15 downto 0) of std_logic; count 'left=0 count'high=127 count'length=128 states'left=idle states'high=write states'length=4 word'left=15 word'high=15 word'length=16 count'right=127 count'low=0 states'right=write states'low=idle word'right=0 word'low=0 2010 Proiectarea sistemelor digitale
42
Proiectarea sistemelor digitale
Atribute alte atribute: 'range – ne oferă o plajă de valori: signal word: std_logic_vector (15 downto 0); word'range= 15 downto 0 'event – semnalează apariția unui eveniment (modificarea valorii unui semnal) Se utilizează frecvent ȋn descrierea comutării semnalelor de tact if (clock=‘0’) and (clockʹevent) then … -- pune in evidenta frontul cazator 'last_value – oferă ultima valoare a unui semnal inăintea modificării valorii acestuia if (iClock = '0') and (iClock'event) and (iClock'last_value=’1’) then… 2010 Proiectarea sistemelor digitale
43
Proiectarea sistemelor digitale
Intrebări ? 2010 Proiectarea sistemelor digitale
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.