Upload
magee-gentry
View
33
Download
0
Tags:
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
Capitolul 4
2010 1Proiectarea sistemelor digitale
Tematica
Scurt istoric Caracteristici Etapele sintezei şi implementării Structura unui program VHDL Modele VHDL Tipuri de date
20102
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.
2010Proiectarea sistemelor
digitale 3
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
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
6
codVHDL
Compilator C1 Compilator C2 Compilator Cn
SPLD CPLD FPGA
. . .
Portabilitatea
2010Proiectarea sistemelor
digitale
Fig. 4.1
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
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
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.
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
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.
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.
13
Interface declaration
Functional declaration
Entity declaration
Architecture body
Entity
2010Proiectarea sistemelor
digitale
Structura unui program VHDL
Fig. 4.5
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
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
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
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
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
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
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
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
22Proiectarea sistemelor digitale
Model funcțional (1) - flux de date
Fig. 4.9
2010
23Proiectarea sistemelor digitale
Model funcțional (2)
2010
24Proiectarea sistemelor digitale
Modelul funcțional cu formule
2010
252010
Proiectarea sistemelor digitale
Modelul structural
26
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
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
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
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
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
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
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
34
tabel (array); ȋnregistrare (record).
Tipuri de date compozite
2010Proiectarea sistemelor
digitale
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
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
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
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
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
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
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
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
2010Proiectarea sistemelor digitale
43