1.2.A Care sint scopurile urmatoarelor constructii VHDL: arhitectura comportamentala, arhitectura structurala, specificatie de proces, atribuire de semnal, atribuire de variabila, lista de senzitivitati, porturi, lista de asociere a porturilor?
1.3.A Cum se insereaza comentarii in codul VHDL?
1.4.A Catalogati urmatorii identificatori in categoriile: identificatori valizi, cuvinte rezervate, identificatori invalizi:
last_item prev item value-1 buffer element#5 _control 93_999 entry_
1.5.A Rescrieti urmatoarele siruri care exprima numere in baza 10 pentru a exprima aceleasi valori in baza 16:
1 34 256.0 0.5
1.6.A Care este valoarea in baza 10 a numerelor reprezentate de sirurile de litere:
8#14# 2#1000_01000# 16#2C# 2.5E5 2#1#E15 2#0.101#
1.7.A Care este diferenta intre sirurile de litere 16#23DF# si X"23DF"?
1.8.A Scrieti in baza 2 urmatoarele numere exprimate in bazele 8 si 16:
O"747" O"377" O"1_345" X"F2" X"0014" X"0000_0001"
1.9.B Modelati in VHDL comportamentul unui MUX 2:1 avind porturile de intrari de date a, b si intrarea de selectie sel. Iesirea z este egala cu a daca sel='0' si egala cu b daca sel='1'. Scrieti un model de generator de vectori de test si testati modelul circuitului MUX prin simulare.
1.10.B Modelati in VHDL un circuit MUX 4:1 avind in structura sa circuite MUX 2:1 (modelate la punctul 1.9). Intrarile de date sint a, b, c, d iar intrarile de selectie sel_1 si sel_0. Scrieti un model de generator de vectori de test si testati modelul circuitului MUX.
1.11.B Modelati in VHDL un circuit MUX 2:1 pe 4 biti avind in structura sa circuite MUX 2:1 (modelate la punctul 1.9). Intrarile de date sint a0, a1, a2, a3 si b0, b1, b2, b3. Intrarea de selectie este sel. Iesirile z0, z1, z2 si z3 iau valorile a0-a3 daca sel='0' si iau valorile b0-b3 daca sel='1'. Scrieti un model de generator de vectori de test si testati modelul circuitului MUX prin simulare.
2.2.A Pentru declaratiile de la punctul 2.1, scrieti specificatiile de
atribuire de variabile care:
- incrementeaza numaratorul;
- seteaza bitul de stare pentru a indica starea 'ocupat';
- memoreaza valoarea temporara 'weak unknown' ('W').
2.3.A Care este scopul declararii unui subtip?
2.4.A Se considera urmatoarele declaratii de subtipuri:
subtype pulse_range is time range 1 ms to 100 ms; subtype word_index is integer range 31 downto 0;Care sint valorile atributelor 'left, 'right, 'low, 'high asociate unor obiecte de aceste tipuri?
2.5.A Se considera urmatoarea declaratie de tip enumeratie:
type state is (off, standby, active1, active2);Evaluati valorile:
state'pos(standby) state'val(2) state'succ(active2) state'pred(active1)
2.6.B Modelati un numarator cu o intrare de ceas de tip bit si o iesire de tip intreg (integer). Arhitectura comportamentala ar trebui sa contina un proces care declara o variabila initializata cu 0. Procesul ar trebui sa se activeze la fiecare modificare a semnalului de ceas. Cind semnalul de ceas comuta in '1', procesul ar trebui sa incrementeze variabila si sa o atribuie portului de iesire.
2.7.A Modelati o unitate logico-aritmetica (ALU) cu intrari si iesire de date de tip intreg si intrare de selectie de tip bit. Daca intrarea de selectie a functiei este '0' atunci iesirea ar trebui sa fie suma intrarilor, alftel iesirea ar trebui sa fie diferenta intrarilor.
2.8.B Modelati un circuit digital de integrare (sumator cu acumulare) care are o intrare de ceas de tip bit. Intrarea si iesirea de date sint de tip real. La fiecare front pozitiv al semnalului de ceas circuitul aduna valoarea de pe intrare la valoarea memorata si o reda pe iesire.
2.9.B Modelati un buffer three-state utilizind pentru iesiri si intrari tipul de date 'std_logic'. Daca intrarea de enable este '0' sau 'L', iesirea ar trebui sa fie 'Z' (indiferent de intrare). Daca intrarea de enable este '1' sau 'H' iar intrarea de date este '0' sau 'L', iesirea ar trebui sa fie '0'. Daca intrarea de enable este '1' sau 'H' iar intrarea de date este '1' sau 'H', iesirea ar trebui sa fie '1'. In toate celelalte cazuri iesirea ar trebui sa fie 'X'. Functia de iesire poate fi scrisa ca in tabelul urmator:
En U X 0 1 Z W L H -
In
U X X Z X X X Z X X
X X X Z X X X Z X X
0 X X Z 0 X X Z 0 X
1 X X Z 1 X X Z 1 X
Z X X Z X X X Z X X
W X X Z X X X Z X X
L X X Z 0 X X Z 0 X
H X X Z 1 X X Z 1 X
- X X Z X X X Z X X
3.2.A Scrieti o specificatie 'if' care atribuie variabilei zile_Februarie numarul de zile din luna februarie in cazul anului continut in variabila intreaga year. Un an este bisect daca este divizibil cu 4 cu exceptia cazului cind este divizibil cu 100.
3.3.A Scrieti o specificatie 'case' care sa ingusteze domeniul de valori al unei variabile de tip 'std_logic'. Daca x este '0' sau 'L', ii atribuie valoarea '0'. Daca x este '1' sau 'H' ii atribuie valoarea '1'. Daca x este 'X', 'W', 'Z', 'U' sau '-' ii atribuie valoarea 'X'. Aceasta este conversia realizata de functia 'to_X01' aplicata valorilor de tipul std_logic.
3.4.A Scrieti o specificatie 'loop' care esantioneaza o intrare d de tip 'bit' cind intrarea de ceas clk comuta in '1'. Cit timp d este '0' bucla continua sa se execute. Cind d are valoarea '1' se paraseste bucla.
3.5.A Scrieti o specificatie 'assert' care exprima necesitatea ca cele doua iesiri, q si nq, ale unui bistabil D sa fie complementare.
3.6.B Scrieti un model comportamental pentru un circuit de limitare cu trei valori intregi: data_in, lower si upper. Sistemul are doua iesiri: data_out de tip intreg si out_of_limits de tip 'bit'. Daca data_in este intre lower si upper atunci data_out are aceiasi valoare cu data_in. Daca data_in este mai mica decit lower atunci data_out are valoarea lower. Daca data_in este mai mare decit upper atunci data_out are valoarea upper. Iesirea out_of_limits indica momentele cind data_in este limitata.
3.7.B Scrieti un model comportamental pentru un numarator cu un port de iesire de tip 'natural', initial avind valoarea 15. Numaratorul decrementeaza pe frontul pozitiv al semnalului de ceas. Dupa 0 urmeaza din nou 15.
3.8.B Modificati modelul de numarator de la punctul 3.7 pentru a modela si facilitatile de incarcare asincrona. Cind intrarea load are valoarea '1' datele de intrare se memoreaza in numarator. Dupa revenirea intrarii load la valoarea '0' se continua numararea de la valoarea presetata.
3.8.B Scrieti un model comportamental de sumator cu acumulare. Circuitul are o intrare de date de tip intreg, o iesire de date de tip intreg si un semnal de intrare de ceas. La fiecare front activ al semnalului de ceas, valoarea de intrare este adunata la valoarea curenta si este prezentata la iesire pina la urmatorul front activ.
4.2.A Pe un floppy-disk datele sint aranjate in 18 sectoare pe pista, 80 de piste pe o parte si doua parti pe discheta. Un calculator mentine o harta a sectoarelor nealocate. Scrieti o declaratie de tip matrice cu trei dimensiuni care sa reprezinte aceasta harta. Un element '1' semnifica sector nealocat, iar un element '0' semnifica un sector alocat. Scrieti o serie de specificatii 'loop' imbricate care testeaza o variabila de acest tip pentru a gasi primul sector liber.
4.3.A Scrieti o specificatie 'for' care sa numere elementele cu valoare '1' din cadrul unei variabile de tip 'bit_vector'.
4.4.B Un intreg v1 reprezentat pe 8 biti in complement fata de 2 poate fi extins la o reprezentare v2 pe 32 de biti daca se copiaza pe pozitiile cele mai din stinga ale lui v2, urmind apoi o deplasare (shift) aritmetica dreapta pina la mutarea celor 8 biti pe pozitia celor mai din dreapta 8 biti. Scrieti specificatiile de atribuire de variabile care modeleaza aceasta procedura utilizind referinte la portiuni de matrice si operatii de shiftare.
4.5.B Un intreg v1 reprezentat pe 8 biti in complement fata de 2 poate fi extins la o reprezentare v2 pe 32 de biti astfel: se copiaza pe pozitiile cele mai din dreapta ale lui v2, urmind ca bitul de semn MSB sa fie extins pe toate celelate pozitii. Scrieti specificatiile de atribuire de variabile care modeleaza aceasta procedura utilizind referinte la portiuni de matrice.
4.6.B Scrieti o declaratie de tip inregistrare ('record') pentru un generator de stimuli. Fiecare inregistrare are trei cimpuri: un vector de trei biti reprezentind vectorul generat, o valoare reprezentind un timp de intirziere si un vector de opt biti reprezentind raspunsul asteptat.
4.7.B Scrieti o declaratie de tip inregistrare ('record') pentru modelarea variatiei unui semnal. Fiecare inregistrare are un cimp care reprezinta valoarea semnalului si un alt cimp care reprezinta timpul relativ la modificarea precedenta (similar cu 'driver-ul' unui semnal). Scrieti specificatii de atribuire de variabile care actualizeaza inregistrarile odata cu scurgerea unui interval de timp.
4.8.B Modelati un set de 16 registre de cite 32 de biti. Setul de registre are porturi de intrare si de iesire de cite 32 de biti. Adresele porturilor de citire si de scriere sint intregi intre 0 si 15. Portul cu semnificatia write-enable este de tip 'bit'. Data de iesire reflecta continutul locatiei a carei adresa este primita pe portul read-address. Cind la portul write-enable exista valoarea '1', datele de intrare se inscriu in locatia selectata de adresa primita pe portul write-address. Toate actiunile au loc numai pe frontul pozitiv al semnalului de ceas.
4.9.B Modelati un codificator cu prioritate cu 16 intrari. Portul de iesire de tip 'natural' codifica indexul pozitiei cea mai din stinga pe care se afla un element cu valoarea '1'. O iesire de tip 'bit' indica daca exista sau nu valori '1' in vectorul de intrare.
4.10.B Modelati un decodificator de 3 biti (8 biti de iesire) si un test-bench asociat acestuia. In test-bench declarati un tip inregistrare similar cu cel descris la punctul 4.6 si un vector constant cu valori de tipul definit. Initializati vectorul cu un set de vectori de test si utilizati vectorii pentru a realiza testarea decodificatorului.
5.2.A Urmariti tranzactiile in care este implicat semnalul s in procesul urmator. Precizati la ce momente de timp semnalul este activ si la ce momente au loc evenimente asociate semnalului.
process
begin
s <= 'Z', '0' after 10 ns, '1' after 30 ns;
wait for 50 ns;
s <= '1' after 5 ns, 'H' after 15 ns;
wait for 50 ns;
s <= 'Z';
wait;
end process;
5.3.A Scrieti specificatia care suspenda un proces pina cind semnalul s se schimba din '1' in '0' in timp ce semnalul en are valoarea '1'.
5.4.A Scrieti specificatia care suspenda un proces pina cind semnalul ready comuta in '1' dar nu mai mult de 5 ns.
5.5.A Presupunind ca initial semnalul s are valoarea '0', precizati valoarea variabilelor v1 si v2 dupa executia urmatoarelor specificatii:
s <= '1'; v1 := s; wait on s; v2 := s;
5.6.A Scrieti procesul echivalent al specificatiei conditionale de atribuire de semnal (modeleaza un MUX):
z <= a nd b after 5 ns when enable = '1' and sel = '0' else
x or y after 6 ns when enable = '1' and sel = '1' else
'0' after 4 ns;
Schitati structura de porti a circuitului modelat.5.7.B Modelati comportamental un MUX 4:1 cu porturi de tip bit si cu timp de propagare de 4,5 ns. Timpul de propagare se va declara ca o constanta in loc de a se introduce direct in atribuirile de semnale.
5.8.B Modelati comportamental un numarator pe patru biti activ pe frontul negativ al semnalului de ceas, cu facilitati de preset asincron. Declaratia entitatii este:
entity counter is
port (clk_n, load_en: in std_logic;
d: in std_logic_vector(3 downto 0);
q: out std_logic_vector(3 downto 0));
end counter;
5.9.B Modelati comportamental un latch de tip D cu timpul de propagare intre ceas si iesire de 3 ns si timpul de propagare intre intrare si iesire de 4 ns.
5.10.B Modelati comportamental un bistabil de tip D care include
teste pentru urmatoarele constringeri:
- timp de set-up date 3 ns,
- timp de hold date 2 ns,
- latimea minima a pulsului de ceas 5 ns.
5.11.C Procesul urmator modeleaza un generator de date:
producer:process
variable next_data: natural := 0;
begin
data <= next_datal
next_data := next_data + 1;
data_ready <= '1';
wait until data_ack = '1';
data_read <= '0';
wait until data_ack = '0';
end producer;
Pentru sincronizarea transferului de date intre procesul producator si procesul
consumator, procesul utilizeaza un protocol cu patru faze. Modelati procesul
consumator de date care, de asemenea, utilizeaza intirzieri 'delta' in
protocolul de transfer. Includeti procesele in corpul unei architecturi si
verificati cum trateaza simulatorul procesele cu intirzieri 'delta'.5.12.B Folosind atribuiri de semnale conditionate, concepeti un decodificator de adrese pentru un sistem cu microprocesor. Decodificatorul are un port de adresa de tip natural si un numar de iesiri active in zero, fiecare activindu-se cind adresa este intr-un anumit domeniu. Iesirile si domeniile de adrese corespunzatoare sint:
ROM_sel_n 16#0000# - 16#3FFF# RAM_sel_n 16#4000# - 16#5FFF# PIO_sel_n 16#8000# - 16#8FFF# SIO_sel_n 16#9000# - 16#9FFF# INT_sel_n 16#F000# - 16#FFFF#
5.13.B Scrieti o declaratie de entitate pentru un numarator de patru biti cu intrare de reset asincron. In corpul entitatii includeti un proces pasiv care masoara si raporteaza latimea fiecarui puls de reset.
6.2.C Scrieti o specificatie 'assert' care verifica daca timpul curent de simulare nu depaseste 20 ms.
6.3.C Scrieti doua functii care aplicate unui vector de intregi determina valoarea minima si maxima.
a) 'Z', '0', 'Z', 'H' b) 'H', 'Z', 'W', '0' c) 'Z', 'W', 'L', 'H' d) 'U', '0', 'Z', '1' e) 'Z', 'Z', 'Z', '-'
7.2.B Scrieri o functie de decizie care aplicata unui vector de tipul 'std_logic_vector' sa realizeze asupra surselor operatia "si cablat". Aceste semnale modeleaza semnalele de la iesirea portilor 'open colector'.
entity flipflop is
port (clk, d: in bit; q, q_n: out bit);
end flipflop;
8.2.A Scrieti o specificatie de instantiere de componenta asociata entitatii urmatoare existente in biblioteca 'work'. Valoarea actuala a parametrului generic trebuie sa fie 10 ns, iar semnalul clk trebuie asociat cu semnalul numit master_clk.
entity clock_generator is
generic (period: delay_length);
port (clk: out std_logic);
end clock_generator;
8.3.A Urmatoarea declaratie de entitate este incompleta. Ea utilizeaza un parametru generic pentru a specifica dimensiunea vectorilor de intrare si de iesire de tipul 'std_logic_vector'. Completati interfata cu tipurile de porturi necesare:
entity adder is
generic (data_length: positive);
port (a, b: in ...; sum: out ...);
end adder;
8.4.A Modelati un bistabil D cu declaratii de constante generice
pentru specificarea urmatorilor timpi de propagare:
- intre frontul pozitiv al datelor de intrare si frontul pozitiv al
datelor de iesire,
- intre frontul negativ al datelor de intrare si frontul negativ al
datelor de iesire,
- intre frontul pozitiv al intrarii de enable si frontul pozitiv al
datelor de iesire,
- intre frontul pozitiv al intrarii de enable si frontul negativ al
datelor de iesire.
8.5.B Concepeti un model pentru un MUX 2**n x 1. Circuitul MUX are n intrari de selectie, 2**n intrari de date si o iesire.
9.2.C Schitati schema circuitului de adunare cu acumulare modelat comportamental de codul urmator:
ENTITY addaccu IS
PORT(a : in BIT_VECTOR(0 TO 3) ;
b : in BIT_VECTOR(0 TO 3) ;
sel : in BIT ;
ck : in BIT ;
s : out BIT_VECTOR(0 TO 3));
END addaccu;
ARCHITECTURE functional OF addaccu IS
SIGNAL outmux, outreg, sum : BIT_VECTOR(0 TO 3) ;
SIGNAL carry : BIT_VECTOR(0 TO 2) ;
SIGNAL reg : REG_VECTOR(0 TO 3) REGISTER;
BEGIN
WITH sel SELECT
outmux <= a WHEN '0',
outreg WHEN '1' ;
sum(0) <= outmux(0) xor b(0) ;
carry(0) <= outmux(0) and b(0) ;
sum(1) <= outmux(1) xor b(1) xor carry(0) ;
carry(1) <= (outmux(1) and b(1)) or
(outmux(1) and carry(0)) or
(b(1) and carry(0)) ;
sum(2) <= outmux(2) xor b(2) xor carry(1) ;
carry(2) <= (outmux(2) and b(2)) or
(outmux(2) and carry(1)) or
(b(2) and carry(1)) ;
sum(3) <= outmux(3) xor b(3) xor carry(2) ;
s <= sum;
L0 : BLOCK ((ck = '0') and not ck'STABLE)
BEGIN
reg <= GUARDED not sum ;
END BLOCK ;
outreg <= not reg;
END;
9.3.B Modelati un latch tip D folosind o specificatie de bloc cu garda.
9.4.B Modelati un bistabil tip D folosind o specificatie de bloc cu garda.