Documente Academic
Documente Profesional
Documente Cultură
LABORATOR nr. 4
VHDL. Unităţile de proiectare de bază.
Utilizarea mediului de programare Quartus II.
1. Scopul laboratorului
În cadrul acestei lucrări se urmăresc două obiective:
1. prezentarea unităţilor fundamentale de proiectare VHDL şi anume: perechea
entitate/arhitectură, configuraţiile, specificaţiile de pachete şi corpurile pachetelor.
Se vor prezenta declaraţiile acestor elemente cu exemplificări pe circuite reale
simple.
2. se va utiliza mediul de programare Quartus II pentru a creea proiecte simple pentru
porţile ŞI, SAU, NU etc.
2. Consideraţii teoretice
2.1. Structura de bază a unui fişier VHDL
Un sistem digital în VHDL este alcătuit dintr-o entitate de proiectare care poate
conţine şi alte entităţi care mai apoi sunt considerate componente ale entităţilor de nivel
înalt (top-level). Fiecare entitate este modelată de către o declaraţie a entităţii şi de către
un corp de tip arhitectură. Aşa cum s-a mai prezentat, pe de o parte se poate considera
declararea entităţii ca o interfaţă cu lumea exterioară care defineşte semnalele de intrare şi
de ieşire iar pe de altă parte arhitectura care conţine descrierea entităţii care este compusă
din entităţii, procese şi componente interconectate între ele şi care operează concurenţial
aşa cum se arată în figura 2.1. Într-un proiect tipic, vor exista mai multe astfel de entităţi
conectate împreună pentru a realiza funcţia dorită.
Entitatea VHDL
Interfaţa
Porturi (Declaraţia entităţii)
Corpul
(Arhitectura)
Secvenţial
Procese
combinaţionale
Subprograme
Figura 2.1 O entitate VHDL care este alcătuită dintr-o interfaţă (declaraţia entităţii) şi un
corp (descrierea arhitecturală).
VHDL utilizează cuvinte cheie rezervate care nu pot fi utilizate ca nume de semnale
sau ca identificatori. Cuvintele cheie şi identificatorii definiţi de către utilizator sunt cazuri
deosebite. Liniile cu comentarii încep cu două cratime adiacente (--) care vor fi ignorate de
către compilator. De asemenea VHDL ignoră spaţiile. VHDL este un tip de limbaj foarte
1
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
puternic orientat pe tip care implică declarea întotdeauna a tipului fiecărui obiect care
poate avea o valoare, precum semnalele, constantele şi variabilele.
generic (
numele_constantei: tip [ :=valoare] ;
numele_constantei: tip [ :=valoare] ;
:
numele_constantei: tip [ :=valoare] ) ;
2
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
Ca un exemplu, o să considerăm un circuit simplu care avertizează pasagerii unei
maşini atunci când uşa maşinii este deschisă sau nu este pusă centura de siguranţă în
momentul în care cheia maşinii este introdusă în contact pentru pornire. La nivelul
comportamental aceasta poate fi scrisă astfel :
DOOR B1
IGNITION WARNING
SBELT
B2
Entitatea este numită BUZZER şi are trei porturi de intrare, DOOR, IGNITION şi
SBELT şi un port de ieşire, WARNING. De notat că numele BUZZER este un identificator.
Intrările sunt indicate prin cuvântul cheie in iar ieşirile prin cuvântul cheie out. Din moment
ce VHDL este un tip de limbaj foarte puternic, fiecare port este definit de către un tip. În
acest caz, vom specifica tipul std_logic. Acesta este tipul preferat al semnalelor digitale. În
comparaţie cu tipul bit care poate avea doar valorile 0 şi 1, tipurile std_logic şi std_ulogic
pot avea nouă valori. Acest lucru e important pentru a descrie un sistem digital care include
corect valorile binare ‘0’ şi ‘1’, la fel ca şi valoarea necunoscută X, valoarea neiniţializată U,
“-” pentru “nu contează”, Z pentru impendanţă înaltă şi câteva simboluri pentru a indica
puterea semnalului (de ex. L pentru 0 slab, H pentru 1 slab, W pentru valoare slabă
necunoscută). Tipul std_logic este definit în pachetul std_logic_1164 din librăria IEEE.
Tipul defineşte setul de valori pe care un obiect le poate avea. Acesta are avantajul că
poate ajuta la crearea de modele şi ajută la reducerea erorilor. De exemplu, dacă cineva
încearcă să asigneze o valoare ilegală unui obiect, compilatorul va semnaliza eroarea.
Alte câteva exemple de declaraţii a entităţii sunt următoarele :
- multiplexor cu 4 intrări şi 1 ieşire în care fiecare intrare este un cuvânt pe 8 biţi :
entity mux4_to_1 is
port (I0, I1, I2, I3 : in std_logic_vector (7 downto 0) ;
OUT1: out std_logic_vector (7 downto 0));
end mux4_to_1;
3
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
entity dff_sr is
port (D, CLK, S, R: in std_logic;
Q, Qnot: out std_logic);
end dff_sr;
:
begin
-- Stări sau instrucţiuni concurente
:
end numele_arhitecturii;
4
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
oferă o expresie booleană a funcţiei. Simbolul “<=” reprezintă un operator de asignare şi
oferă valoarea expresiei de la dreapta semnalului spre stânga. Corpul arhitecturii se
termină cu un cuvânt cheie end urmat de către numele arhitecturii.
Sunt date câteva exemple după cum urmează :
- descrierea comportamentală a porţii ŞI cu două intrări:
entity AND2 is
port (in1, in2: in std_logic;
out1: out std_logic);
end AND2;
end structurală;
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
U0 : NOT1 port map (in1 => DOOR, out1 => DOOR_NOT);
U1 : NOT1 port map (in1 => SBELT, out1 => SBELT_NOT);
U2 : AND2 port map (in1 => IGNITION,6 in2 => DOOR_NOT, out1 => B1);
U3 : AND2 port map (in1 => IGNITION, in2 => SBELT_NOT, out1 => B2);
U4 : OR2 port map (in1 => B1, in2 => B2, out1 => WARNING);
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
De notat că ordinea în care aceste linii de cod sunt scrise nu au nici o legătură în
execuţie din moment ce aceste linii de cod sunt concurenţiale şi de aceea sunt executate
în paralel.
7
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
De exemplu, funcţiile de bază pentru componentele AND2, OR2, NAND2, NOR2, XOR2
etc., sunt necesare ca să fie definite înainte să fie utilizată una din ele. Acest lucru poate fi
făcut într-unul dintre pachet, de ex. funcţia_de_bază (base_func) pentru fiecare dintre
aceste componente, după cum urmează :
-- declaraţia pachetului
library ieee ;
use ieee.std_logic_1164.all ;
package basic_func is
8
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
De notat că s-a inclus o întârziere (delay) de 5 ns. Totuşi, ar trebui de notat că
specificaţiile întârzierii sunt ignorate de către Foundation synthesis tool. A trebuit să
utilizăm tipul predefinit std_logic care este declarat în pachetul std_logic_1164. S-au inclus
în acest pachet library şi clauza use. Acest pachet are nevoie să fie compilat şi plasat
într-o librărie. O să numim aceasta library my_func. Pentru a utiliza componentele acestui
pachet, o dată ce a fost declarat, se utilizează library şi clauza use :
Liniile de cod library şi use sunt conectate la o linie de cod a entităţii subsecventă.
Linia de cod library şi use trebuie să se repete pentru fiecare declaraţie a entităţii.
9
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
10
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
11
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
În cea de-a patra fereastră a wizardului se pot selecta unelte EDA adiţionale faţă de
cele incluse deja în mediul de programare Quartus II. Astfel se pot selecta unelte pentru
introducerea schemelor şi sinteză, pentru simulare sau pentru analiza temporară.
Deoarece noi vom utiliza uneltele incluse în mediul de programare Quartus II, în această
fereastră nu vom face nicio setare. Fereastra este prezentată în figura 3.5.
Pentru continuare se dă clic pe butonul Next.
12
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
13
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
Pentru a putea implementa o schemă nouă, va trebui creat un fişier nou, de tipul
Block Diagram / Schematic File. Pentru aceasta, din meniul File al mediului de dezvoltare
se alege opţiunea New. Din fereastra nou deschisă se alege opţiunea Block Diagram /
Schematic File din cadrul opţiunii Design Files, după cum se poate observa în figura 3.8.
Dând clic pe butonul OK se va deschide foaia de lucru pentru introducerea schemei.
Se va salva fişierul cu schema bloc prin selecţia opţiunii Save as… din meniul File al
mediului de dezvoltare Quartus II. De reţinut că numele fişierului .bdf trebuie să fie numele
declarat la crearea proiectului pentru entitatea principală.
După salvarea fişierului cu schema bloc se poate trece la implementarea efectivă a
schemei. Pentru a se introduce o componentă în schemă, se dă dublu clic pe foaia de
lucru. Se deschide astfel fereastra de selecţie a simbolurilor din cadrul bibliotecilor.
Se selectează din lista de biblioteci megafunctions->gates şi se selectează
biblioteca lpm_and corespunzătoare porţii logice ŞI (figura 3.9.). Se dă clic pe butonul OK.
Se va deschide o nouă fereastră, ce ne permite configurarea componentei selectate la
pasul anterior (figura 3.10.).
14
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
15
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
În această fereastră selectăm tipul de fişier de ieşire în limbaj HDL în care va fi
convertită schema noastră. Putem selecta AHDL, VHDL şi Verilog. Se va selecta limbajul
VHDL. Numele fişierului de ieşire va rămâne cel selectat implicit, nu se va modifica. Pentru
a merge mai departe, se va da clic pe butonul Next.
16
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
Următoarea fereastră ce se deschide ne indică fişierele necesare simulării schemei.
Tot aici putem selecta dacă să generăm sau nu netlista pentru simularea temporală şi
pentru estimarea resurselor ocupate de componenta noastră (figura 3.12.).
Ultima fereastră ne afişează lista fişierelor ce vor fi create. Dacă dorim să creăm şi
alte fişiere, le putem selecta aici din listă, bifând corespunzător căsuţa din faţa numelui
fişierului. Pentru terminarea operaţiunii de selectare şi configurare a componentei, se dă
clic pe butonul Finish.
După închiderea ferestrei de configurare, se revine în foaia de lucru curentă a
mediului de programare Quartus II (figura 3.14). Componenta selectată este activă şi o
putem plasa pe foaia de lucru dând un singur clic pe aceasta. După plasarea componentei
va trebui să plasăm şi pinii pentru conectarea porţii în exterior. Pentru aceasta vom da
dublu clic pe suprafaţa liberă a foii de lucru, intrând astfel în fereastra de selecţie a
simbolurilor din biblioteci (figura 3.15.). De această dată vom selecta din lista de biblioteci
primitives->pin->input pentru a selecta pinii de intrare, respectiv output pentru pinii de
ieşire. Se dă clic pe butonul OK şi se revine în foaia de lucru, cu pinul activ. Pentru
plasarea pinului, se dă clic pe foaia de lucru în locul dorit. Se repetă operaţiunea până sunt
plasaţi toţi pinii.
17
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
18
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
19
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
După terminarea implementării schemei se trece la analiza şi elaborarea ei. Din
meniul Processing se selectează submeniul Start cu opţiunea Start Analysis & Elaboration
(figura 3.17.).
20
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
21
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
22
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
După efectuarea cu succes a simulării, se poate trece la implementarea practică a
schemei în circuitul FPGA de pe placa de dezvoltare Cyclone III. Pentru aceasta este
necesar ca pinii din schemă să fie atribuiţi unor pini fizici ai circuitului FPGA. Acest lucru se
realizează prin selectarea opţiunii Pins din meniul Assignments. Se va deschide o fereastră
în care vom putea selecta ce pini fizici vor corespunde intrărilor şi ieşirilor schemei (figura
3.21.).
Pentru a putea observa funcţionarea schemei după încărcarea ei în circuitul FPGA,
se vor conecta cele două intrări ale porţii logice ŞI la două dintre butoanele programabile
de către utilizator, iar ieşirea acesteia se va conecta la unul din LED-urile programabile de
către utilizator.
Pinii corespunzători celor 4 LED-uri programabile de către utilizator sunt:
LED PIN
LED1 P13
LED2 P12
LED3 N12
LED4 N9
Buton PIN
Buton1 F1
Buton2 F2
Buton3 A10
Buton4 B10
După încheierea etapei de asignare a pinilor, pentru a putea încărca şi rula aplicaţia
pe circuitul FPGA, trebuie realizată compilarea proiectului în vederea obţinerii fişierului .sof
(SRAM Object File), fişier necesar programării sistemului Cyclone III. Pentru aceasta se va
selecta opţiunea Start Compilation din meniul Processing.
După terminarea compilării şi obţinerea fişierului .sof, se selectează din meniul
Tools opţiunea Programmer. În fereastra care se deschide se apasă butonul Hardware
Setup pentru a se configura interfaţa USB-Blaster necesară comunicării cu kitul de
dezvoltare Cyclone III. În acest moment, placa trebuie să fie conectată pe USB şi
alimentată. Se selectează interfaţa USB-Blaster şi se închide fereastra apăsând butonul
OK. În fereastra programatorului se selectează modul de conectare ca fiind modul JTAG,
se încarcă dacă este necesar fişierul .sof obţinut la compilare şi se dă clic pe butonul Start.
După încărcarea 100% a programului se poate testa pe placă funcţionarea schemei
implementate, respectiv a porţii logice ŞI.
23
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
24
UNIVERSITATEA “ŞTEFAN CEL MARE” SUCEAVA
FACULTATEA DE INGINERIE ELECTRICĂ ŞI ŞTIINŢA CALCULATOARELOR
4. Desfăşurarea lucrării
1. Se vor crea proiecte pentru fiecare din porţile logice fundamentale ŞI, SAU,
NU, SAU-NU, ŞI-NU, SAU-EXCLUSIV. Se vor compila, se va simula funcţional
funcţionarea lor şi se vor implementa pe kitul de dezvoltare Cyclone III Starter
Kit. Intrările porţilor logice se vor conecta la butoanele utilizator, iar ieşirile
acestora se vor conecta la LED-uri.
25