430 likes | 589 Views
Capitolul 4. Introducere ȋ n modelarea VHDL. Tematica. Scurt istoric Caracteristici Etapele sintezei şi implement ă rii Structura unui program VHDL Modele VHDL Tipuri de date. Ce este VHDL?. VHDL – V ery High - S peed Integrated Circuits H ardware D escription L anguage
E N D
Capitolul 4 Introducere ȋn modelarea VHDL Proiectarea sistemelor digitale
Tematica • Scurt istoric • Caracteristici • Etapele sintezei şi implementării • Structura unui program VHDL • Modele VHDL • Tipuri de date 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. 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; • 1983-1985 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 1076-1993; • Din 1996 IEEE 1076.3 devine standard VHDL pentru sinteză. • 2000 este revizuit şi redenumit VHDL 1076-2000; • 2002este revizuit şi redenumit VHDL 1076-2002; • 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 1076-2008. • Detalii: http://www.people.vcu.edu/~rhklenke/tutorials/vhdl/modules/m10_23/sld010.htm 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. Proiectarea sistemelor digitale
Portabilitatea Fig. 4.1 Proiectarea sistemelor digitale
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ă: Proiectarea sistemelor digitale
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’; 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. Proiectarea sistemelor digitale
Etapele sintezei şi implementării Fig. 4.4 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. 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. Proiectarea sistemelor digitale
Structura unui program VHDL Fig. 4.5 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ă. 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 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 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. 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. 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 Proiectarea sistemelor digitale
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
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
Model funcțional(1) - flux de date Fig. 4.9 Proiectarea sistemelor digitale
Model funcțional (2) Proiectarea sistemelor digitale
Modelul funcțional cu formule Proiectarea sistemelor digitale 2010
Modelul structural Proiectarea sistemelor digitale
Identificatori, obiecte, tipuri de date, atribute
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. Proiectarea sistemelor digitale
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. Proiectarea sistemelor digitale
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. Proiectarea sistemelor digitale
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); 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ă. 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ă. 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. Proiectarea sistemelor digitale
Tipuri de date compozite • tabel (array); • ȋnregistrare (record). Proiectarea sistemelor digitale
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” • ); Proiectarea sistemelor digitale
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” 125653” • a<=B”1010101110101011” • a<=b”1010101110101011” • a<=”1010101110101011” Proiectarea sistemelor digitale
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 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. Proiectarea sistemelor digitale
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 int1: indice; • signal int2: natural range 0 to 255; • int1 <= int2; • Î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. Proiectarea sistemelor digitale
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):="00000101"; • begin • process(int1,int2) • begin • 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. 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 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… Proiectarea sistemelor digitale
Intrebări ? Proiectarea sistemelor digitale