43
Capitolul 4 2010 1 Proiectarea sistemelor digitale

Introducere ȋ n modelarea VHDL

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Introducere  ȋ n modelarea VHDL

Capitolul 4

2010 1Proiectarea sistemelor digitale

Page 2: Introducere  ȋ n modelarea VHDL

Tematica

Scurt istoric Caracteristici Etapele sintezei şi implementării Structura unui program VHDL Modele VHDL Tipuri de date

20102

Proiectarea sistemelor digitale

Page 3: Introducere  ȋ n modelarea VHDL

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.

2010Proiectarea sistemelor

digitale 3

Page 4: Introducere  ȋ n modelarea VHDL

Scurt istoricEste 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

2010Proiectarea sistemelor

digitale 4

Page 5: Introducere  ȋ n modelarea VHDL

5

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.

Caracteristici

2010Proiectarea sistemelor

digitale

Page 6: Introducere  ȋ n modelarea VHDL

6

codVHDL

Compilator C1 Compilator C2 Compilator Cn

SPLD CPLD FPGA

. . .

Portabilitatea

2010Proiectarea sistemelor

digitale

Fig. 4.1

Page 7: Introducere  ȋ n modelarea VHDL

 

7

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ă:

a(0)

a(1)

b(0)

b(1)

aeqb

a

b

a(0)

b(0)

a(1)

b(1)

x(0)

x(1)

aeqb

Fig. 4.2 Fig. 4.3

Nivele de descriere ȋn VHDL

2010Proiectarea sistemelor

digitale

Page 8: Introducere  ȋ n modelarea VHDL

8

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’;

Nivele de descriere ȋn VHDL

2010Proiectarea sistemelor

digitale

Page 9: Introducere  ȋ n modelarea VHDL

9

Dezavantaje

2010Proiectarea sistemelor

digitale

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.

Page 10: Introducere  ȋ n modelarea VHDL

10

proiect VHDL

sinteza software

rezultat sinteza

selectie dispozitiv

directive sinteza

program PLD

Model simulare (VHDL sau alt model)

Fisier pentru programare

PLD

Fisier raportStimuli

test

software simulare

Forme de unda

Fisier de date

2010Proiectarea sistemelor

digitale

Etapele sintezei şi implementării

Fig. 4.4

Page 11: Introducere  ȋ n modelarea VHDL

112010

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.

Page 12: Introducere  ȋ n modelarea VHDL

122010

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.

Page 13: Introducere  ȋ n modelarea VHDL

13

Interface declaration

Functional declaration

Entity declaration

Architecture body

Entity

2010Proiectarea sistemelor

digitale

Structura unui program VHDL

Fig. 4.5

Page 14: Introducere  ȋ n modelarea VHDL

14

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ă.

2010Proiectarea sistemelor

digitale

Declararea entității

Page 15: Introducere  ȋ n modelarea VHDL

15

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;

EN

I(3..0)

S(1..0)

Y

2010Proiectarea sistemelor

digitale

Declararea entității

Fig. 4.6

Page 16: Introducere  ȋ n modelarea VHDL

16

Modul descrie direcția ȋn care este transferată data printr-un port.

Pot fi definite 4 moduri (Fig. 4.7):

in; out; buffer; inout.

inout

in

in

out

inout

buffer

2010Proiectarea sistemelor

digitale

Moduri

Fig. 4.7

Page 17: Introducere  ȋ n modelarea VHDL

17

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.

2010Proiectarea sistemelor

digitale

Moduri

Page 18: Introducere  ȋ n modelarea VHDL

18

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.

2010Proiectarea sistemelor

digitale

Tipuri de date

Page 19: Introducere  ȋ n modelarea VHDL

19

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

2010Proiectarea sistemelor

digitale

Tipuri de date

Page 20: Introducere  ȋ n modelarea VHDL

20

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

Arhitectura entității (architecture body)

2010

Page 21: Introducere  ȋ n modelarea VHDL

21

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.

Proiectarea sistemelor digitale

Corpul arhitecturii (Architecture body)

Fig. 4.8

2010

Page 22: Introducere  ȋ n modelarea VHDL

22Proiectarea sistemelor digitale

Model funcțional (1) - flux de date

Fig. 4.9

2010

Page 23: Introducere  ȋ n modelarea VHDL

23Proiectarea sistemelor digitale

Model funcțional (2)

2010

Page 24: Introducere  ȋ n modelarea VHDL

24Proiectarea sistemelor digitale

Modelul funcțional cu formule

2010

Page 25: Introducere  ȋ n modelarea VHDL

252010

Proiectarea sistemelor digitale

Modelul structural

Page 26: Introducere  ȋ n modelarea VHDL

26

Page 27: Introducere  ȋ n modelarea VHDL

27

Numele unui obiect conține:

LitereCifre;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.

Identificatori (identifiers)

2010Proiectarea sistemelor

digitale

Page 28: Introducere  ȋ n modelarea VHDL

28

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.

Obiecte (data objects)

2010Proiectarea sistemelor

digitale

Page 29: Introducere  ȋ n modelarea VHDL

29

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.

Obiecte (data objects)

2010Proiectarea sistemelor

digitale

Page 30: Introducere  ȋ n modelarea VHDL

30

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);

Obiecte (data objects)

2010Proiectarea sistemelor

digitale

Page 31: Introducere  ȋ n modelarea VHDL

31

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ă.

Tipuri de date scalare

2010Proiectarea sistemelor

digitale

Page 32: Introducere  ȋ n modelarea VHDL

32

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ă.

Tipuri de date scalare

2010Proiectarea sistemelor

digitale

Page 33: Introducere  ȋ n modelarea VHDL

33

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.

Tipuri de date scalare

2010Proiectarea sistemelor

digitale

Page 34: Introducere  ȋ n modelarea VHDL

34

tabel (array); ȋnregistrare (record).

Tipuri de date compozite

2010Proiectarea sistemelor

digitale

Page 35: Introducere  ȋ n modelarea VHDL

35

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”);

Tipuri de date compozite

2010Proiectarea sistemelor

digitale

Page 36: Introducere  ȋ n modelarea VHDL

36

Ş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”

Tipuri de date compozite

2010Proiectarea sistemelor

digitale

Page 37: Introducere  ȋ n modelarea VHDL

37

Î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 vectorbusb.buffer_inp <= busa.buffer_inp; --asignarea unui campbusb.enable <=‘1’; -- asignarea unei valoribusc <= busb; --asignarea unui obiect

Tipuri de date compozite

2010Proiectarea sistemelor

digitale

Page 38: Introducere  ȋ n modelarea VHDL

38

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.

Tipuri şi subtipuri

2010Proiectarea sistemelor

digitale

Page 39: Introducere  ȋ n modelarea VHDL

39

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.

Compatibilitatea tipurilor

2010Proiectarea sistemelor

digitale

Page 40: Introducere  ȋ n modelarea VHDL

40

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)beginif int1<int2 then -- eroare oaBus <= int1; -- eroareelse oaBus <= int2; -- eroareend 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.

Compatibilitatea tipurilor

2010Proiectarea sistemelor

digitale

Page 41: Introducere  ȋ n modelarea VHDL

41

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=128states'left=idle states'high=write states'length=4word'left=15 word'high=15 word'length=16

count'right=127 count'low=0states'right=write states'low=idleword'right=0 word'low=0

Atribute

2010Proiectarea sistemelor

digitale

Page 42: Introducere  ȋ n modelarea VHDL

42

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…

Atribute

2010Proiectarea sistemelor

digitale

Page 43: Introducere  ȋ n modelarea VHDL

2010Proiectarea sistemelor digitale

43