+ All Categories
Home > Documents > Instructiuni secventiale si concurente in limbajul VHDL concurente

Instructiuni secventiale si concurente in limbajul VHDL concurente

Date post: 09-Apr-2018
Category:
Upload: fertu-dragos-daniel
View: 261 times
Download: 1 times
Share this document with a friend

of 43

Transcript
  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    1/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    2/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL2

    Declaraia unui proces este cuprins ntre cuvintele cheie process i endprocess. Unui proces i sepoate asigna n mod opional un nume pentru identificarea mai uoar a procesului n textul surs. Numele esteun identificator i trebuie urmat de caracterul ':' (cu rol de etichet). Acest nume este util i pentru simulare, deexemplu, pentru setarea unui punct de ntrerupere a execuiei simulrii. Numele poate fi repetat la sfrituldeclaraiei, dup cuvintele cheie endprocess.

    Lista de sensibilitate (opional) este lista semnalelor la a cror modificare procesul este sensibil.

    Producerea unui eveniment asupra unuia din semnalele specificate n lista de sensibilitate va determina execuiainstruciunilor secveniale din cadrul procesului, similar cu instruciunile dintr-un program obinuit. Spredeosebire de un limbaj de programare, n limbajul VHDL clauza endprocess nu specific terminarea execuieiprocesului. Procesul va fi executat ntr-un ciclu infinit, iar n cazul n care se specific o list de sensibilitate,procesul va fi doar suspendat dup execuia ultimei instruciuni, pn la producerea unui nou eveniment asuprasemnalelor din list. Se menioneaz c un eveniment are loc numai la modificarea valorii unui semnal. Astfel,asignarea aceleiai valori la un semnal nu reprezint un eveniment.

    n cazul n care lista de sensibilitate lipsete, procesul va fi executat n mod continuu. n acest caz,procesul trebuie s conin o instruciune wait pentru a determina suspendarea procesului i activarea acestuia laapariia unui eveniment sau ndeplinirea unei condiii. n cazul n care lista de sensibilitate este prezent,procesul nu poate conine instruciuni wait. Instruciunea wait este prezentat n seciunea 6.1.1.3.

    Partea declarativ a procesului este cuprins ntre cuvintele cheie process i begin. n aceast parte se pot declara tipuri, constante, variabile i subprograme (proceduri i funcii) care sunt locale procesului.

    Elementele declarate se pot utiliza deci numai n interiorul procesului.

    Observaie

    n cadrul unui proces nu pot fi declarate semnale, ci numai constante i variabile.

    Partea de instruciuni a procesului ncepe dup cuvntul cheie begin. Aceast parte conineinstruciunile care vor fi executate la fiecare activare a procesului. Nu este permis utilizarea instruciunilorconcurente n interiorul unui proces.

    n Exemplul 6.1 se prezint declaraia unui proces simplu format dintr-o singur instruciune deasignare secvenial.

    Exemplul 6.1proc1: process (a, b, c)begin

    x

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    3/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 3

    Deoarece nu este clar modul n care un sistem de sintez ar trebui s genereze un circuit pentru care otranziie a semnalului c nu determin o modificare a semnalului x, dar o modificare a semnalelor a sau bdetermin actualizarea semnalului x cu valoarea funciei I logic ntre semnalele a, b i c, exist urmtoarelealternative pentru sistemele de sintez:

    Interpretarea procesului proc2 n mod identic cu procesul proc1 (cu o list de sensibilitate carecuprinde toate semnalele din partea dreapt a instruciunilor de asignare a semnalelor din cadrulprocesului);

    Indicarea unei erori la compilare, specificnd faptul c nu se poate realiza sinteza procesului fr o listde sensibilitate complet.

    A doua variant este preferabil, deoarece proiectantul va trebui s modifice codul surs astfel nctfuncionarea circuitului generat s fie aceeai cu rezultatul simulrii funcionale a codului surs.

    Dei din punct de vedere sintactic procesele pot fi declarate fr o list de sensibilitate i fr oinstruciune wait, asemenea procese nu vor fi suspendate niciodat. De aceea, dac se va simula un asemeneaproces, timpul de simulare nu va avansa, deoarece faza de iniializare, n care toate procesele sunt executate pncnd acestea sunt suspendate, nu se va termina niciodat (ciclul de simulare a fost descris n capitolul 5).

    6.1.1.3. Instruciunea waitn locul unei liste de sensibilitate, un proces poate conine o instruciune wait. Utilizarea unei

    instruciuni wait are dou scopuri:

    Suspendarea execuiei unui proces; Specificarea condiiei care va determina activarea procesului suspendat.

    La ntlnirea unei instruciuni wait, procesul n care apare aceast instruciune este suspendat. Atuncicnd se ndeplinete condiia specificat n cadrul instruciunii wait, procesul este activat i se executinstruciunile acestuia pn cnd se ntlnete din nou instruciunea wait. Limbajul VHDL permite ca un process conin mai multe instruciuni wait. Atunci cnd se utilizeaz pentru modelarea logicii combinaionale nvederea sintezei, un proces poate conine ns o singur instruciune wait.

    Dac un proces conine o instruciune wait, nu poate conine o list de sensibilitate. Procesul dinExemplul 6.3, care conine o instruciune wait explicit, este echivalent cu procesul din Exemplul 6.1, careconine o list de sensibilitate. Ambele procese se vor executa atunci cnd apare o modificare a valoriisemnalelora, b sau c.

    Exemplul 6.3proc3: processbegin

    x

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    4/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    5/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 5

    Acest proces va fi implementat prin sintez ca o simpl poart I cu dou intrri.Pentru ca un proces s modeleze un circuit combinaional, acesta trebuie s conin n lista de

    sensibilitate toate semnalele care sunt intrri ale procesului. Cu alte cuvinte, procesul trebuie reevaluat de fiecaredat cnd una din intrrile circuitului pe care l modeleaz se modific. n acest fel se modeleaz n mod corectun circuit combinaional.

    Dac un proces nu este sensibil la toate intrrile sale i nu este un proces secvenial, atunci nu poate fi

    sintetizat, deoarece nu exist un echivalent hardware al unui asemenea proces. Nu toate sistemele de sintezimpun o asemenea regul, astfel nct trebuie acordat atenie la scrierea proceselor combinaionale pentru a nuintroduce erori. Asemenea erori vor avea ca efect diferene subtile ntre modelul simulat i circuitul obinut prinsintez, deoarece un proces non-combinaional este interpretat de sistemul de sintez ca un circuit combinaional.

    Dac un proces conine o instruciune wait sau o instruciune if semnal'event, procesul va fiinterpretat ca un proces secvenial. Astfel, procesul din Exemplul 6.6 va fi interpretat ca un proces secvenial.

    Exemplul 6.6proc6: processbegin

    waituntilclk = '1';z

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    6/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    7/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 7

    Figura 6.2. Exemplu de reacie invers sincron.

    6.1.2.3. ntrzierea inerial

    n limbajul VHDL exist dou tipuri de ntrzieri care pot fi utilizate pentru modelarea sistemelor reale.Acestea sunt ntrzierea inerial i ntrzierea de transport. Menionm c aceste ntrzieri nu se pot utilizapentru sinteza logic.

    ntrzierea inerial este implicit, fiind utilizat atunci cnd nu se specific tipul ntrzierii. Clauzaafter presupune n mod automat ntrzierea inerial. ntr-un model cu ntrziere inerial, dou modificriconsecutive ale valorii unui semnal de intrare nu vor modifica valoarea unui semnal de ieire dac timpul dintre

    aceste modificri este mai scurt dect ntrzierea specificat. Aceast ntrziere reprezint ineria circuitului real.Dac, de exemplu, apar anumite impulsuri de durat scurt ale semnalelor de intrare, semnalele de ieire vorrmne neschimbate.

    Figura 6.3. Ilustrarea ntrzierii ineriale.

    Figura 6.3 ilustreaz ntrzierea inerial cu ajutorul unui buffer simplu. Bufferul cu o ntrziere de 20ns are o intrare A i o ieire B. Semnalul A se modific de la '0' la '1' la momentul 10 ns i de la '1' la '0' lamomentul 20 ns. Impulsul semnalului de intrare are o durat de 10 ns, care este mai mic dect ntrziereaintrodus de buffer. Ca urmare, semnalul de ieireB va rmne la valoarea '0'.

    Bufferul din Figura 6.3 poate fi modelat prin urmtoarea instruciune de asignare:

    b

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    8/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL8

    Figura 6.4. Ilustrarea ntrzierii de transport.

    Dac se utilizeaz ntrzierea de transport, bufferul din Figura 6.4 poate fi modelat prin urmtoareainstruciune de asignare:

    b

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    9/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 9

    6.1.3.2. Instruciunea de asignare a variabilelor

    O instruciune de asignare a unei variabile nlocuiete valoarea curent a variabilei cu o nou valoarespecificat de o expresie. Expresia poate conine variabile, semnale i literale. Variabila i rezultatul evaluriiexpresiei trebuie s fie de acelai tip. Instruciunea de asignare a unei variabile are sintaxa urmtoare:

    variabil := expresie;

    Aceast instruciune este similar cu asignrile din majoritatea limbajelor de programare. Spredeosebire de o instruciune secvenial de asignare a semnalelor, asignarea unei variabile este executatinstantaneu, deci ntr-un timp de simulare zero.

    Exist urmtoarele diferene principale ntre asignarea semnalelor i a variabilelor:

    n cazul asignrii semnalelor, se planific un eveniment pentru actualizarea valorii acestora, iaractualizarea se execut numai la suspendarea procesului, n timp ce pentru asignarea variabilelor nu seplanific un eveniment, iar actualizarea se execut instantaneu.

    La asignarea semnalelor se poate specifica o ntrziere, n timp ce asignarea variabilelor nu poate fintrziat.

    ntr-un proces, doar ultima asignare a unei valori la un semnal este efectiv. n schimb, pot exista

    numeroase asignri la o variabil n acelai proces, toate fiind efective.Exemplul 6.10 ilustreaz utilizarea variabilelor pentru memorarea rezultatelor intermediare.

    Exemplul 6.10entity add_1 is

    port (a, b, cin: inbit;s, cout: outbit);

    end add_1;

    architecture functional of add_1 isbegin

    process (a, b, cin)variable s1, s2, c1, c2: bit;

    begins1 := a xor b;c1 := a and b;s2 := s1 xor cin;c2 := s1 and cin;s

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    10/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL10

    Fiecare condiie este o expresie boolean, care se evalueaz la valoarea TRUE sau FALSE. Pot exista maimulte clauze elsif, dar poate exista o singur clauz else. Se evalueaz mai nti condiia de dup cuvntulcheie if, i dac este adevrat, se execut secvena de instruciuni corespunztoare. n caz contrar, dac esteprezent clauza elsif, se evalueaz condiia de dup aceast clauz i dac aceast condiie este adevrat, seexecut secvena de instruciuni corespunztoare. n caz contrar, dac sunt prezente alte clauze elsif, secontinu cu evaluarea condiiei acestor clauze. Dac nici o condiie evaluat nu este adevrat, se execut

    secvena de instruciuni corespunztoare clauzei else, dac aceasta este prezent.

    Exemplul 6.11process (a, b)begin

    if a = b thenrez

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    11/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 11

    O instruciune if cu ramuri multiple, n care apare cel puin o clauz elsif, este implementat prinmai multe etaje de multiplexoare. Considerm instruciunea if din Exemplul 6.13.

    Exemplul 6.13process (a, b, c, s0, s1)begin

    if s0 = '1' thenz

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    12/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL12

    6.1.4.3. Instruciuni if incomplete

    n exemplele prezentate pn acum, toate instruciunile if au fost complete. Cu alte cuvinte, semnaluluidestinaie i s-a asignat o valoare n toate condiiile posibile. Sunt posibile ns dou situaii n care unui semnalnu i se asigneaz o valoare: atunci cnd lipsete clauza else a instruciunii if sau atunci cnd unui semnal nu ise asigneaz o valoare ntr-o ramur a instruciunii if. n ambele cazuri, interpretarea este aceeai. n situaiile n

    care unui semnal nu i se asigneaz o valoare, semnalul i pstreaz valoarea precedent.Se pune ns problema care este valoarea precedent a semnalului. Dac exist o instruciune anterioar

    de asignare n care semnalul apare ca destinaie, valoarea precedent provine de la acea instruciune de asignare.n caz contrar, valoarea provine din execuia precedent a procesului, ceea ce conduce la existena unei reaciiinverse n cadrul circuitului.

    Primul caz este ilustrat prin Exemplul 6.15.

    Exemplul 6.15process (a, b, enable)begin

    z

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    13/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    14/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL14

    n acest caz, dei instruciunea if pare complet (presupunnd c semnalul c este de tip bit), deoarecepentru fiecare condiie testat sinteza se realizeaz n mod independent, sistemul de sintez nu va detecta faptulc a doua condiie este redundant. De aceea, instruciunea if va fi implementat printr-un multiplexor cu treici, a treia intrare fiind condiia ramurii else care lipsete, aceasta fiind reacia invers a valorii anterioare.Circuitul implementat pentru acest exemplu este prezentat n Figura 6.8.

    Figura 6.8. Implementarea unei instruciuni if cu o condiie redundant.

    6.1.4.4. Instruciuni if n care apar variabile

    Pn acum, n instruciunile if au fost utilizate doar semnale. Aceleai reguli se aplic i n cazulutilizrii variabilelor, cu o singur diferen. Ca i n cazul unui semnal, dac unei variabile i se asigneaz valorinumai n anumite ramuri ale instruciunii if, se pstreaz valoarea anterioar a variabilei prin reacie invers.Spre deosebire de cazul utilizrii unui semnal, citirea i scrierea unei variabile n acelai proces va determina oreacie invers numai dac citirea apare naintea scrierii. n acest caz, valoarea citit este valoarea precedent avariabilei. n cazul citirii i scrierii n acelai proces a unui semnal, va rezulta ntotdeauna o reacie invers.

    Aceast observaie se poate utiliza pentru a crea registre sau numrtoare utiliznd variabile. Reamintimc un proces secvenial este interpretat la sintez prin plasarea unui bistabil sau registru naintea ieirii fiecruisemnal cruia i s-a asignat o valoare n procesul respectiv. Aceasta nseamn c n mod normal variabilele nusunt nscrise n bistabile sau registre. Dac exist ns o reacie invers a valorii precedente a unei variabile,aceast reacie se realizeaz printr-un bistabil sau registru pentru ca procesul s fie sincron.

    n Exemplul 6.21 se descrie un numrtor utiliznd tipul ntreg unsigned. La incrementarea uneivalori de tip

    unsigned, dac valoarea este cea maxim a domeniului se obine valoarea minim a domeniului.

    Exemplul 6.21process

    variable num: unsigned (7 downto 0);begin

    waituntil clk = '1';if reset = '1' then

    num := "00000000";else

    num := num + 1;endif;rez

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    15/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 15

    orice tip discret (un tip enumerat sau ntreg) sau un tablou unidimensional de caractere (inclusiv bit_vectorsau std_logic_vector). Instruciunea case se utilizeaz atunci cnd exist un numr mare de alternativeposibile. Aceast instruciune este mai lizibil dect o instruciune if cu un numr mare de ramuri, permindidentificarea uoar a unei valori i a secvenei de instruciuni asociate.

    Sintaxa instruciunii case este urmtoarea:

    caseexpresieiswhenopiuni_1 =>

    secven_de_instruciuni...whenopiuni_n =>

    secven_de_instruciuni[whenothers =>

    secven_de_instruciuni]endcase;

    Instruciunea case conine mai multe clauze when, fiecare specificnd una sau mai multe opiuni.Opiunile reprezint fie o valoare individual, fie un set de valori cu care se compar expresia instruciunii case.n cazul n care expresia este egal cu valoarea individual sau cu una din valorile setului, se execut secvena deinstruciuni specificat dup simbolul =>. O secven de instruciuni poate fi format i din instruciunea nul,null. Spre deosebire de anumite limbaje de programare, instruciunile dintr-o secven nu trebuie incluse ntre

    cuvintele cheie begin i end. Clauza others se poate utiliza pentru a specifica execuia unei secvene deinstruciuni n cazul n care valoarea expresiei nu este egal cu nici una din valorile specificate n clauzele when.

    n cazul n care o opiune este reprezentat de un set de valori, se pot specifica fie valorile individualedin set, separate prin simbolul | avnd semnificaia sau, fie domeniul valorilor, fie o combinaie a acestora,dup cum se arat n exemplul urmtor.

    caseexpresieiswhenval =>

    secven_de_instruciuniwhenval1 | val2 | ... | valn =>

    secven_de_instruciuniwhenval3toval4 =>

    secven_de_instruciuniwhenval5toval6| val7toval8 =>

    secven_de_instruciuni...whenothers =>

    secven_de_instruciuniendcase;

    Observaii

    ntr-o instruciune case trebuie enumerate toate valorile posibile pe care le poate avea expresia deselecie, innd cont de tipul sau subtipul acesteia. De exemplu, dac expresia de selecie este de tipstd_logic_vector de 2 bii, trebuie enumerate 81 de valori, deoarece pentru un singur bit pot exista9 valori posibile. Dac nu sunt enumerate toate valorile, trebuie utilizat clauza others.

    Clauza others trebuie s fie ultima dintre toate opiunile.

    Exemplul 6.22 prezint un proces pentru secvenierea valorilor unui tip enumerat reprezentnd strileunui semafor. Procesul este descris cu ajutorul unei instruciuni case.

    Exemplul 6.22type tip_culoare is (rosu, galben, verde);process (culoare)

    case culoare iswhen rosu =>

    culoare_urm

    culoare_urm

    culoare_urm

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    16/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL16

    Exemplul 6.23 definete o entitate i o arhitectur pentru o poart SAU EXCLUSIV cu dou intrri.Poarta este descris n mod funcional cu ajutorul unui proces care conine o instruciune case.

    Exemplul 6.23library ieee;use ieee.std_logic_1164.all;

    entity xor2 isport (a, b: instd_logic;

    x: outstd_logic);end xor2;

    architecture arh_xor2 of xor2 isbegin

    process (a, b)variable temp: std_logic_vector (1 downto 0);

    begintemp := a & b;case temp is

    when "00" => x x x x x

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    17/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 17

    6.1.6.2. Instruciunea while loop

    Instruciunea whileloop este o instruciune de buclare condiionat. Sintaxa acestei instruciuni esteurmtoarea:

    [etichet:] whilecondiieloopsecven_de_instruciuni

    endloop [etichet];

    Condiia este testat naintea fiecrei execuii a buclei. Dac aceast condiie este adevrat, se executsecvena de instruciuni din corpul buclei, dup care controlul este transferat la nceputul buclei. Execuia bucleise termin atunci cnd condiia testat devine fals, caz n care se execut instruciunea care urmeaz dupclauza endloop.

    Exemplul 6.24process

    variable contor: integer := 0;begin

    waituntil clk = '1';while nivel = '1' loop

    contor := contor + 1;waituntil clk = '0';

    endloop;endprocess;

    n procesul din Exemplul 6.24 se numr fronturile cresctoare ale semnalului de ceas clk att timp ctsemnalul nivel are valoarea '1'. Stabilitatea semnalului nivel nu este testat. Se testeaz doar dac acestsemnal are valoarea '1' la detectarea unui front cresctor al semnalului clk, i nu se testeaz dac valoareasemnalului nivel s-a modificat de la testarea anterioar.

    Instruciunile de buclare pot fi imbricate pe mai multe nivele. Deci, corpul buclei unei instruciuniwhileloop poate conine o alt instruciune de buclare, n particular o instruciune whileloop, dup cum searat n exemplul urmtor.

    E1: while i < 10 loop

    E2: while j < 20 loop...endloop E2;

    endloop E1;

    6.1.6.3. Instruciunea forloop

    Pentru execuia repetat a unei secvene de instruciuni de un numr de ori specificat se poate utilizainstruciunea forloop. Sintaxa acestei instruciuni este urmtoarea:

    [etichet:] forcontorindomeniuloopsecven_de_instruciuni

    endloop [etichet];

    ntr-o instruciune forloop se specific un contor de iteraii i un domeniu. Instruciunile din corpulbuclei sunt executate ct timp contorul se afl n domeniul specificat. Dup terminarea unei iteraii, contorului ise asigneaz urmtoarea valoare din domeniu. Domeniul poate fi unul cresctor, specificat prin cuvntul cheieto, sau descresctor, specificat prin cuvntul cheie downto. Acest domeniu poate fi specificat i sub forma unuitip enumerat sau subtip, caz n care nu se specific n mod explicit limitele domeniului n cadrul instruciuniiforloop. Limitele domeniului vor fi determinate de compilator din declaraia tipului sau subtipului respectiv.

    Instruciunea forloop din Exemplul 6.25 calculeaz ptratele valorilor ntregi cuprinse ntre 1 i 10,pe care le depune n tabloul i_patrat.

    Exemplul 6.25for i in 1 to 10 loop

    i_patrat (i)

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    18/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL18

    Contorul de iteraii din acest exemplu este n mod implicit de tip integer, deoarece tipul acestuia nu afost definit n mod explicit. Forma complet a declaraiei domeniului pentru contorul de iteraii este similar cucea a unui tip. Pentru exemplul anterior, clauza for poate fi scris i sub forma urmtoare:

    for i inintegerrange 1 to 10 loop

    n unele limbaje de programare, n cadrul buclei se poate asigna o valoare contorului de iteraii (n

    exemplul anterior, i) pentru a-i modifica valoarea. Limbajul VHDL nu permite ns asignarea unei valoricontorului de iteraii sau utilizarea acestuia ca parametru de intrare sau de ieire al unei proceduri. Contorulpoate fi utilizat ns ntr-o expresie, cu condiia s nu i se modifice valoarea. Un alt aspect legat de contorul deiteraii este c acesta nu trebuie declarat n mod explicit n cadrul procesului. Acest contor este declarat n modimplicit ca o variabil local a instruciunii de buclare prin specificarea sa dup cuvntul cheie for. Dac existo alt variabil cu acelai nume n cadrul procesului, cele dou vor fi tratate ca variabile separate.

    Interpretarea sintezei instruciunii for loop este aceea c se realizeaz o nou copie a circuituluidescris de coninutul instruciunii la fiecare iteraie a buclei. Utilizarea instruciunii forloop pentru generareaunui circuit este ilustrat n Exemplul 6.26.

    Exemplul 6.26entity potrivire_biti is

    port (a, b: inbit_vector (7 downto 0);potriviri: outbit_vector (7 downto 0));

    end potrivire_biti;

    architecture functional of potrivire_biti isbegin

    process (a, b)begin

    for i in 7 downto 0 looppotriviri (i)

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    19/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    20/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    21/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 21

    Figura 6.10. Implementarea unei instruciuni forloop care conine o instruciune next.

    Figura 6.10 prezint circuitul generat prin sinteza descrierii din exemplul anterior. Singura diferendintre acest circuit i cel din Figura 6.9 este c este inversat logica de control a multiplexoarelor. Cele doucircuite sunt ns echivalente funcional.

    6.1.6.5. Instruciunea exit

    Exist situaii n care execuia unei instruciuni de buclare trebuie oprit complet, fie datorit apariiei

    unei erori n timpul execuiei unui model, fie datorit faptului c prelucrarea trebuie terminat naintea depiriidomeniului de ctre contorul de iteraii. n asemenea situaii, se poate utiliza instruciunea exit. Sintaxa acesteiinstruciuni este urmtoarea:

    exit [etichet] [whencondiie];

    Exist trei forme ale instruciunii exit. Prima este cea n care nu apare o etichet i nici o condiiespecificat printr-o clauz when. n acest caz, se va opri n mod necondiionat execuia instruciunii curente de buclare. n cazul n care instruciunea exit apare ntr-o instruciune de buclare aflat n interiorul unei alteinstruciuni de buclare, va fi oprit doar execuia instruciunii interioare de buclare, dar execuia instruciuniiexterioare de buclare va continua.

    Dac n instruciunea exit se specific o etichet a unei instruciuni de buclare, la ntlnireainstruciunii exit controlul va fi transferat la eticheta specificat.

    Dac instruciunea exit conine o clauz when, execuia instruciunii de buclare va fi oprit numai n

    cazul n care condiia specificat de aceast clauz este adevrat. Urmtoarea instruciune executat depinde de prezena sau absena unei etichete n cadrul instruciunii. Dac se specific o etichet a unei instruciuni debuclare, urmtoarea instruciune executat va fi prima din instruciunea de buclare specificat de acea etichet.Dac nu se specific o etichet, urmtoarea instruciune executat va fi cea de dup clauza end loop ainstruciunii de buclare curente.

    Instruciunea exit se poate utiliza pentru a termina execuia unei instruciuni loop simple, dup cumse arat n Exemplul 6.30.

    Exemplul 6.30E3: loop

    a := a + 1;exit E3 when a > 10;

    endloop E3;

    Exemplul 6.31 prezint descrierea unui circuit pentru contorizarea numrului de zerouri de la sfritulunui vector de bii. Se testeaz fiecare element al vectorului reprezentnd o valoare ntreag, iar dac un elementeste '1', bucla se termin cu ajutorul instruciunii exit.

    Exemplul 6.31library ieee;use ieee.numeric_bit.all;entity contorizare_zero is

    port (v: inbit_vector (15 downto 0);num: out signed (3 downto 0));

    end contorizare_zero;

    architecture functional of contorizare_zero isbegin

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    22/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL22

    process (v)variable rez: signed (3 downto 0);

    beginrez := (others => '0');for i in v'reverse_range loop

    exitwhen v(i) = '1';rez := rez + 1;

    endloop;num

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    23/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 23

    Nivelul failure se utilizeaz atunci cnd violarea aseriunii reprezint o eroare fatal, cum estemprirea la zero sau adresarea unui tablou cu un index care depete domeniul permis. i n acestcaz, execuia simulrii va fi oprit.

    Exemplul 6.32assertnot (R = '1' and S = '1')

    report "Ambele semnale R i S au valoarea '1'"severity error;

    Atunci cnd ambele semnale R i S au valoarea '1', se afieaz mesajul specificat i simularea va fioprit.

    Pentru afiarea unui mesaj n mod necondiionat, se va utiliza condiia FALSE, de exemplu:

    assert (FALSE) report "Start simulare";

    Pentru asemenea cazuri, varianta VHDL 93 a limbajului permite utilizarea clauzei report ca oinstruciune complet, fr clauza assertcondiie.

    Observaii

    Instruciunea assert descris este o instruciune secvenial, presupunnd c ea apare ntr-un processau subprogram. Exist ns i o versiune concurent a acestei instruciuni. Aceasta are un formatidentic cu versiunea secvenial, dar poate apare numai n afara unui proces sau subprogram.

    De obicei, sistemele de sintez ignor instruciunea assert.

    6.2. Instruciuni concurente

    Operaiile din sistemele reale se execut n mod concurent. Limbajul VHDL modeleaz sistemele realesub forma unui set de subsisteme care funcioneaz n mod concurent. Fiecare din aceste subsisteme poate fispecificat sub forma unui proces separat, iar comunicaia dintre procese se poate realiza prin semnale.Complexitatea diferitelor procese poate fi foarte variat, de la o simpl poart logic pn la un procesor.

    Modelarea sistemelor reale sub aceast form poate fi realizat cu ajutorul instruciunilor concurente.n aceast seciune se prezint mai nti structura i execuia unei arhitecturi, iar apoi sunt descrise principalele instruciuni concurente ale limbajului VHDL. Cea mai important instruciune concurent estedeclaraia unui proces. Procesele au fost prezentate n seciunea 6.1.1, astfel nct n seciunea de fa vor fi prezentate doar principalele caracteristici ale proceselor. Alte instruciuni concurente sunt instruciuneaconcurent de asignare a semnalelor, instruciunea block, instruciunea concurent assert, instruciuneaconcurent de apel a unei proceduri, instanierea unei componente i instruciunea generate. Instruciunea deapel a procedurilor va fi prezentat n capitolul 9 n care se descriu subprogramele. Instanierea unei componentei instruciunea generate vor fi descrise n capitolul 8 dedicat proiectrii structurale.

    6.2.1. Structura i execuia unei arhitecturi

    Dup cum s-a artat n capitolul 5, definiia unei arhitecturi are dou pri: o parte declarativ i o partedescriptiv. n partea declarativ se pot declara obiecte care sunt interne arhitecturii. Partea descriptiv conineinstruciuni concurente. Acestea definesc procesele sau blocurile interconectate care descriu funcionarea saustructura global a sistemului.

    Toate procesele dintr-o arhitectur se execut n paralel unele fa de altele, dar instruciunile din cadrulunui anumit proces se execut secvenial. Un proces suspendat este activat din nou atunci cnd unul dinsemnalele din lista sa de sensibilitate i modific valoarea. Atunci cnd exist mai multe procese ntr-oarhitectur, la modificarea valorii unui semnal sunt activate toate procesele care conin acest semnal n lista lorde sensibilitate. Instruciunile din cadrul proceselor activate sunt executate secvenial, dar independent deinstruciunile din alte procese.

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    24/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL24

    Figura 6.12. Schema unui sumator de 1 bit.

    Figura 6.12 prezint schema unui sumator de 1 bit. n Exemplul 6.33 fiecare poart din aceast schemeste descris printr-un proces separat care se execut n mod concurent cu celelalte procese.

    Exemplul 6.33

    entity add_1 isport (a, b, cin: inbit;s, cout: outbit);

    end add_1;

    architecture procese of add_1 issignal s1, s2, s3, s4: bit;

    begin

    p1: process (b, cin)begin

    s1

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    25/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    26/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL26

    Dup cum se observ din exemplul anterior, instruciunile concurente de asignare apar direct n cadrularhitecturii, i nu n interiorul unui proces. Ordinea n care sunt scrise instruciunile nu are importan. Lasimulare toate instruciunile se execut n acelai ciclu de simulare.

    n cazul proceselor, activarea execuiei acestora este determinat de modificarea valorii unui semnal dinlista de sensibilitate a acestora sau de ntlnirea unei instruciuni wait. n cazul instruciunilor concurente deasignare, modificarea valorii unuia din semnalele care apar n partea dreapt a asignrii activeaz execuia

    asignrii, fr s se specifice n mod explicit o list de sensibilitate. Activarea unei instruciuni de asignare esteindependent de activarea altor instruciuni concurente din cadrul arhitecturii.Instruciunile concurente de asignare se utilizeaz pentru descrieri de tipul fluxului de date. Prin sinteza

    acestor instruciuni se obin circuite combinaionale.

    Observaie

    Dac ntr-o arhitectur exist mai multe asignri concurente la acelai semnal, vor fi create driveremultiple pentru acel semnal. n asemenea cazuri, trebuie s existe o funcie de rezoluie predefinit saudefinit de utilizator pentru tipul semnalului respectiv. Spre deosebire de asignrile concurente, dacntr-un proces exist mai multe asignri secveniale la acelai semnal, va avea efect doar ultima dintreacestea.

    6.2.3.2. Instruciunea de asignare condiional

    Instruciunea de asignare condiional este echivalent funcional cu instruciunea condiional if,avnd sintaxa urmtoare:

    semnal

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    27/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 27

    beginif a = b then x

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    28/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL28

    sintez, aceast instruciune de asignare condiional va fi implementat totui prin dou multiplexoare, dupcum se ilustreaz n Figura 6.15.

    Figura 6.15. Implementarea unei instruciuni de asignare condiional cu o ramur redundant.

    n cazul unui exemplu simplu cum este cel anterior, este probabil ca sistemul de sintez s eliminemultiplexorul redundant, dar n cazul unor exemple mai complexe aceast eliminare nu poate fi garantat.Motivul pentru care nu se obine o implementare optimizat este c, n cazul general, detectarea unui cod VHDLla care nu se poate ajunge nu este o problem trivial.

    n cazul n care condiiile sunt dependente unele de altele, este mai avantajoas utilizarea uneiinstruciuni de asignare selectiv.

    6.2.3.3. Instruciunea de asignare selectiv

    Ca i instruciunea de asignare condiional, instruciunea de asignare selectiv permite selectarea uneiexpresii surs pe baza unei condiii. Deosebirea const n faptul c instruciunea de asignare selectiv utilizeaz osingur condiie pentru selecia dintre diferite opiuni. Aceast instruciune este echivalent funcional cuinstruciunea secvenial case. Sintaxa este urmtoarea:

    withexpresie_de_selecieselectsemnal

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    29/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 29

    end xor2;

    architecture arh_xor2 of xor2 issignal temp: bit_vector (1 downto 0);

    begintemp

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    30/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL30

    alt semnal din cadrul instruciunii block, dar nu poate fi actualizat printr-o instruciune de asignare. De fiecaredat cnd apare o tranzacie asupra unuia din semnalele dintr-o expresie de gard, expresia este evaluat isemnalul guard este actualizat imediat. Acest semnal ia valoarea TRUE dac valoarea expresiei de gard esteadevrat i FALSE n caz contrar.

    Semnalul guard poate fi declarat i n mod explicit ca un semnal de tip boolean n cadrul instruciuniiblock. Avantajul acestei declarri explicite este c se poate utiliza un algoritm mai complex pentru controlul

    semnalului guard dect cel permis de o expresie boolean. n particular, se poate utiliza un proces separatpentru controlul acestui semnal.

    Dac ntr-un bloc nu se specific o expresie de gard i semnalul guard nu este declarat n modexplicit, atunci acest semnal are ntotdeauna valoarea TRUE.

    Semnalul guard poate fi utilizat pentru controlul instruciunilor de asignare a semnalelor din cadrulblocului. O asemenea instruciune de asignare conine cuvntul cheie guarded dup simbolul de asignare, caredetermin ca execuia instruciunii de asignare s fie condiional:

    semnal

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    31/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 31

    [reportir_de_caractere][severitynivel_de_severitate];

    Instruciunea concurent assert se va executa ori de cte ori se modific unul din semnalele din cadrulexpresiei condiionale, spre deosebire de instruciunea secvenial assert, care se va executa atunci cnd seajunge la aceast instruciune n cadrul unui proces sau subprogram.

    6.3. Descrierea unor circuite combinaionale

    6.3.1. Multiplexoare

    Pentru descrierea multiplexoarelor se pot utiliza diferite metode. Exemplul 6.40 prezint descriereamultiplexorului 4:1 pentru magistrale de 4 bii din Figura 6.16 utiliznd o instruciune de asignare selectiv.

    Figura 6.16. Schema unui multiplexor 4:1 pentru magistrale de 4 bii.

    Exemplul 6.40library ieee;use ieee.std_logic_1164.all;entity mux is

    port (a, b, c, d: instd_logic_vector (3 downto 0);s: instd_logic_vector (1 downto 0);x: outstd_logic_vector (3 downto 0));

    end mux;

    architecture arh_mux of mux isbegin

    with s selectx

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    32/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    33/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 33

    cunoate c numai unul din acestea va fi activ la un moment dat), atunci este mai avantajoas descrierea dinExemplul 6.43.

    Exemplul 6.43library ieee;use ieee.std_logic_1164.all;

    entity fara_prioritate isport (a, b, c, d: instd_logic;

    w, x, y, z: instd_logic;j: outstd_logic);

    end fara_prioritate;

    architecture fara_prioritate of fara_prioritate isbegin

    j

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    34/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL34

    Figura 6.18. Simbolul unui bistabil de tip D.

    Exemplul 6.44library ieee;use ieee.std_logic_1164.all;entity bist_d is

    port (d: instd_logic;clk: instd_logic;q: outstd_logic);

    end bist_d;

    architecture exemplu of bist_d isbegin

    process (clk)beginif (clk'event and clk = '1') then

    q

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    35/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    36/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL36

    n exemplul anterior, operatorul de adunare este utilizat pentru semnalul num, care este de tip integer.Majoritatea sistemelor de sintez permit aceast utilizare, convertind tipul integer la tipul bit_vector saustd_logic_vector. Utilizarea tipului integer pentru porturi pune ns unele probleme:

    1) Pentru a utiliza valoarea num ntr-o alt poriune a proiectului pentru care interfaa are porturi de tipstd_logic, trebuie efectuat o conversie de tip.

    2) Vectorii aplicai n timpul simulrii codului surs nu pot fi utilizai pentru simularea modelului generatn urma sintezei. Pentru codul surs, vectorii trebuie s fie valori ntregi. Modelul generat n urmasintezei necesit vectori de tip std_logic.

    Deoarece operatorul nativ + al limbajului VHDL nu este definit pentru tipurile bit sau std_logic,acest operator trebuie redefinit nainte de adunarea operanzilor care au aceste tipuri. Standardul IEEE 1076.3definete funcii pentru redefinirea operatorului + pentru urmtoarele perechi de operanzi: (unsigned,unsigned), (unsigned, integer), (signed, signed) i (signed, integer). Aceste funcii sunt definite npachetul numeric_std al standardului 1076.3.

    Exemplul 6.48 reprezint Exemplul 6.47 modificat pentru a se utiliza tipul unsigned pentru ieireanumrtorului.

    Exemplul 6.48library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity num3 is

    port (clk: instd_logic;num: buffer unsigned (3 downto 0));

    end num3;

    architecture num3_unsigned of num3 isbegin

    count: process (clk)begin

    if (clk'event and clk = '1') thennum

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    37/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    38/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL38

    Figura 6.21. Resurse logice suplimentare necesare pentru un semnal de resetare sincron.

    Se pot utiliza de asemenea combinaii de semnale sincrone i asincrone de resetare (sau setare). Uneorisunt necesare dou semnale asincrone: att un semnal de resetare, ct i unul de setare. Exemplul 6.51 prezintun numrtor de 8 bii cu semnale asincrone de resetare i setare.

    Exemplul 6.51library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity num8 is

    port (clk: instd_logic;reset, set: instd_logic;

    enable, load: instd_logic;data: in unsigned (7 downto 0);num: buffer unsigned (7 downto 0));

    end num8;

    architecture arh_num8 of num8 isbegin

    count: process (reset, set, clk)begin

    if (reset = '1') thennum '0');

    elsif (set = '1') thennum '1');

    elsif (clk'event and clk = '1') then

    if (load = '1') thennum

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    39/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL 39

    semnalul reset, fie semnalul set. Astfel, n funcie de algoritmul utilizat de programul de sintez, descriereadin Exemplul 6.51 va genera fie logica din Figura 6.22(a), fie cea din Figura 6.22(b). Multe circuite CPLD care permit resetarea sau setarea prin termeni produs pot implementa ambele variante. De asemenea, majoritateacircuitelorFPGA dispun de resursele necesare pentru implementarea resetrii sau setrii prin termeni produs.Totui, n timp ce majoritatea circuitelor FPGA permit resetarea sau setarea eficient prin semnale globale, deobicei acestea nu dispun de resurse pentru resetarea sau setarea eficient prin termeni produs, caz n care

    implementarea din Figura 6.22(b) este preferat.n toate exemplele anterioare n care exist semnale de resetare sau setare s-a utilizat instruciunea ifsau funcia rising_edge pentru descrierea circuitelor sincrone. Pentru descrierea acestor circuite se poateutiliza i instruciunea wait until, dar n acest caz semnalele de resetare i setare trebuie s fie sincrone.Aceasta deoarece pentru descrierile destinate sintezei instruciunea wait trebuie s fie prima din cadrul unuiproces, astfel nct toate instruciunile care urmeaz vor descrie o logic sincron.

    6.4.6. Buffere cu trei stri i semnale bidirecionale

    Majoritatea circuitelor programabile dispun de ieiri cu trei stri sau semnale bidirecionale de I/E. nplus, anumite circuite dispun de buffere interne cu trei stri. Un semnal cu trei stri poate avea valorile '0', '1'i 'Z', toate acestea fiind permise de tipul std_logic.

    Exemplul 6.52 prezint descrierea modificat a numrtorului din Exemplul 6.51 pentru a utiliza ieiricu trei stri. Acest numrtor nu dispune de un semnal de setare asincron. De data acesta s-a utilizat pachetulstd_arith i tipul std_logic_vector pentru data i num.

    Exemplul 6.52library ieee;use ieee.std_logic_1164.all;use ieee.std_arith.all;entity num8 is

    port (clk, reset: instd_logic;enable, load: instd_logic;oe: instd_logic;data: instd_logic_vector (7 downto 0);

    num: bufferstd_logic_vector (7 downto 0));end num8;

    architecture arh_num8 of num8 issignal num_tmp: std_logic_vector (7 downto 0);

    begincount: process (reset, clk)begin

    if (reset = '1') thennum '0');

    elsifrising_edge (clk) thenif (load = '1') then

    num_tmp

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    40/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL40

    arhitecturii. Procesul etichetat cu oep este utilizat pentru a descrie ieirile cu trei stri ale numrtorului. Dacsemnalul oe nu este activat, ieirile sunt trecute n starea de nalt impedan. Descrierea procesului oep este nconcordan cu operarea unui buffer cu trei stri (Figura 6.23).

    Figura 6.23. Buffer cu trei stri.

    Numrtorul din exemplele precedente poate fi modificat astfel nct pentru ieirile acestuia s seutilizeze semnale bidirecionale. n acest caz, numrtorul poate fi ncrcat cu valoarea curent a ieiriloracestuia, ceea ce nseamn c valoarea ncrcat atunci cnd semnalul load este activ va fi valoarea precedenta numrtorului sau o valoare aplicat din exterior, n funcie de starea semnalului oe.

    n Exemplul 6.53, semnalul de validare a ieirilor unui buffer cu trei stri este definit n mod implicit.

    Exemplul 6.53mux: process (adr_lin, adr_col, stare_prez)begin

    if (stare_prez = linie or stare_prez = RAS) thendram

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    41/43

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    42/43

    Structura sistemelor de calcul Instruciuni secveniale i concurente n limbajul VHDL42

    6.5.11. Realizai un decodificator din codul BCD pentru afiajul cu 7 segmente. Intrriledecodificatorului sunt bcd[3:0], iar ieirile sunt led[6:0].

    6.5.12. Proiectai o memorie FIFO cu capacitatea de 8 cuvinte de cte 9 bii. Schema bloc a acesteimemorii FIFO este prezentat n Figura 6.24.

    Figura 6.24. Schema bloc a unei memorii FIFO.

    La activarea semnalului de citire rd trebuie s se valideze ieirea memoriei, data_out (9 bii). Atuncicnd semnalul de citire nu este activat, ieirea memoriei trebuie adus n starea de nalt impedan. La activareasemnalului de scriere wrtrebuie nscris valoarea de la intrarea data_in a memoriei ntr-unul din cele 8 registre.Pentru evidena citirii i a scrierii exist un pointer de citire, respectiv de scriere, acestea indicnd registrul caretrebuie citit, respectiv registrul care trebuie nscris. Pentru incrementarea pointerilor de citire i de scriere seutilizeaz semnalele rdinc, respectiv wrinc. Semnalele rdptrclr i wrptrclr reseteaz pointerii de citire i descriere pentru ca acetia s adreseze primul registru al memoriei FIFO.

    6.5.13. Compilai descrierea registrului de 8 bii din Exemplul 6.46 i simulai funcionarea acestuiregistru.

    6.5.14. Modificai descrierea registrului de 8 bii din Exemplul 6.46 astfel nct s se utilizeze dousemnale suplimentare de intrare, reset i init. La activarea semnalului reset, registrul va fi resetat la"00000000" n mod asincron. La activarea semnalului init, registrul va fi setat la "11111111" n modsincron. Verificai apoi funcionarea registrului.

    6.5.15. Compilai descrierea numrtorului de 3 bii din Exemplul 6.47 i verificai funcionareanumrtorului. Modificai apoi descrierea pentru a utiliza tipul std_logic_vector pentru vectorul de ieirenum.

    6.5.16. Modificai descrierea numrtorului de 8 bii avnd ieiri cu trei stri din Exemplul 6.52, astfelnct s se utilizeze o instruciune de asignare condiional n locul procesului oep. Adugai un semnal de ieirecu trei stri numit coliziune, care va fi activat atunci cnd semnalele enable i load sunt ambele active, cucondiia ca ieirile numrtorului s fie activate prin semnalul oe.

  • 8/8/2019 Instructiuni secventiale si concurente in limbajul VHDL concurente

    43/43


Recommended