Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AeronauticaComunicatiiElectronica electricitateMerceologieTehnica mecanica


Modelarea dataflow-Bistabilul de tip D

Electronica electricitate



+ Font mai mare | - Font mai mic



Modelarea dataflow-Bistabilul de tip D

In primul laborator a fost prezentata modelarea cu ecuatii a sumatorului de un bit si circuitul de test asociat.

In prezenta lucrare este prezentata modelarea dataflow a bistabilui de tip D, modelarea structurala a unui circuit latch pe 8 biti, precum si circuitele de test asociate.



1 Specificatii

Asa cum am precizat anterior, in continuare se prezinta bistabilul D cu intrari Clear si Preset asincrone, active pe 0 logic.

Structura bistabilului D este prezentata in figura 1.


Fig.1 Bistabil D

2 Implementarea bistabilului de tip D

Declaratia de entitate a bistabilului este:

(fisier D_FF.vhd)

1 library IEEE;

2 use IEEE.std_logic_1164.all;

3 entity DFF is

4 port (Preset: in Bit;

5 Clear: in Bit;

6 Clock: in Bit;

7 Data: in Bit;

8 Q: out Bit;

9 QBar: out Bit);

10 end DFF;

14 architecture Dataflow of DFF is

16 signal A ,B ,C ,D: Bit;

17 signal QInt, QBarInt: Bit;

19 begin

21 A<= not (Preset and D and B) after 1 ns;

22 B <= not (A and Clear and Clock) after 1 ns;

23 C<= not (B and Clock and D) after 1 ns;

24 D<= not ( C and Clear and Data) after 1 ns;

26 QInt <= not (Preset and B and QBarInt ) after 1 ns;

27 QBarInt <= not (QInt and Clear and C) after 1 ns;

29 Q <= QInt;

30 QBar <= QBarInt;

32 end;

Ca si in reprezentarea cu ecuatii a sumatorului complet, pentru a modela comportamentul bistabilului sint utilizate specificatiile de atribuire de semnale ( liniile 21-30).

Spre deosebire de modelul sumatorului pe un bit, in modelul bistabilului exista o corespondenta unu la unu intre atribuirea de semnale si porti. Semnalele utilizate in specificatiile atribuire reprezinta caile de date ale bistabilului.

In consecinta, aceasta descriere poarta denumirea de descriere dataflow ("dataflow decription" ).

Declaratia de semnal de la linia 16 defineste semnalele interne ale bistabilului, utilizate pentru interconectarea portilor. Declaratia de semnal de la linia 17 are un scop diferit.

Mai intii se observa faptul ca semnalele din interfata ( Q si QBar) sint declarate ca mod out, deci pot fi doar modificate (scrise) dar nu pot fi citite. Un port de mod out se afla intotdeauna in partea stinga a instructiunii de atribuire pentru semnale. Examinind schema interna a bistabilului putem observa ca semnalele Q,QBar intra in bucla de reactie ceea ce implica modificarea (scrierea) dar si citirea lor. Un semnal intern sau un port de mod in sau inout, pentru a putea fi citit, trebuie sa fie plasat in partea dreapta a instructiunii de atribuire pentru semnale.

Solutia prezentata introduce semnale interne si atribuirea valorilor lor porturilor de iesire (liniile 29 si 30).

Specificatiile de atribuire (cu exceptia ultimilor doua) au asociate clauza "after 1 ns". Aceasta reprezinta intirzierea de propagare a portii (timpul de intirziere dintre sosirea frontului de unda la intrare si aparitia unei modificari la iesirea ei), dar si intirzierea inertiala ( latimea celui mai ingust puls propagat prin poarta).

Astfel, considerind instructiunea de atribuire de la linia 21, daca un front de unda al semnalului ajunge la intrarea "Preset" la momentul de timp de 42ns, "A" nu se va modifica decit la momentul de timp de 43ns.

Lipsa unei clauze after semnifica implicit existenta unei clauze after 0ns.

Totusi, lipsa clauzei nu inseamna modificarea imediata a iesirii odata cu semnalul de intrare. Toate atribuirile de semnale au asociate o intirziere implicita infinitezimala Δ.

O caracteristica a intirzierii Δ este aceea ca oricite cicluri delta apar succesiv la un moment dat de timp real ele nu avanseaza in timp real.

Astfel, timpul in VHDL poate fi considerat ca avind doua dimensiuni, prima reprezentind timpul real, a doua reprezentind intervalele delta. Fiecare avans in timp real seteaza numarul curent al intervalelor delta la zero.

3 Testarea bistabilului de tip D

Circuitul de test pentru bistabil este prezentat mai jos :

(fisier Test_D_FF.vhd)

library IEEE;

use IEEE.std_logic_1164.all;

37 entity Test_DFF is end;

41 architecture Driver of Test_DFF is

43 component DFF

44 port (Preset , Clear, Clock, Data: in Bit;

45 Q,QBar: out Bit);

46 end component;

48 signal Preset, Clear : Bit :='1';

49 signal Clock, Data, Q, QBar :Bit;

51 begin

53 UUT: DFF port map (Preset, Clear, Clock, Data, Q, QBar);

55 Stimulus:

56 process

57 begin

61 Preset <= '0' ; wait for 5 ns;

62 Preset <= '1' ; wait for 5 ns;

63 Clear <= '0' ; wait for 5 ns;

64 Clear <= '1' ; wait for 5 ns;

68 Preset <='0'; Clear <='0' ; wait for 5 ns;

69 Preset <='1' ;Clear <='1' ; wait for 5 ns;

73 Clear <= '0' , '1' after 5 ns; wait for 10 ns;

77 Data <= '1'; Clock <= '0' after 1 ns, '1' after 5 ns ;

78 wait for 10 ns;

79 Data <= '0' ; Clock <= '0' after 1 ns, '1' after 5 ns;

80 wait for 10 ns;

-- clear

84 Clear <='0', '1' after 5 ns; wait for 10 ns;

88 Data <= '0';

89 Preset <= '0', '1' after 10 ns;

90 Clock <= '0', '1' after 5 ns; wait for 10 ns;

-- stop simulation

94 wait;

96 end process;

98 end;

Nu am mai utilizat metoda de codare a stimulilor si raspunsurilor intr-un tabel, ei fiind descrisi liniar. Aceasta deoarece testele pentru un circuit secvential (asa cum este bistabilul D), in special cerintele de timp, sint mai complexe decit pentru un circuit combinational.

Semnalele de pe linia 48 (Preset si Clear) sint initializate explicit cu valoarea '1'. In partea dreapta a instructiunii de atribuire de pe linia 77 sint prezentate elemente de forma de unda multiple, o forma convenabila de a atribui forme de unda complexe unui semnal.

Constructia din partea dreapta a instructiunii de atribuire este denumita forma de unda, iar fiecare element al formei "expression after time" este denumit element al formei de unda. Elementele sint delimitate prin punct si virgula.

Putem rescrie atribuirea de semnal lui "Clock" fara a utiliza forme de unda multiple, dar codul rezultat este mult mai complex:

Clock <= '0' after 1 ns;

wait for 1 ns;

Clock <= '1' after 4 ns;

Nu este corecta urmatoarea versiune:

Clock <= '0' after 1 ns;

Clock <= ''1' after 5 ns;

La momentul executiei celei de a doua instructiuni, prima nu a fost executata dupa semnalul de tact. Cind a doua instructiune este executata, se tine cont de faptul ca intirzierea de 5 ns reprezinta nu numai intirzierea de propagare dar si intirzierea inertiala.

La momentul 1 ns ,'0' nu va apare la iesire, deoarece VHDL il va interpreta ca un spit cu durata mai mica de 5 ns.

Daca nu este specificata nici o limita de rejectie intr-o instructiune de atribuire inertiala, atunci intirzierea primului element de forma de unda devine implicit limita de rejectie.

Rezultatele simularii entitatii Test_DFF cu arhitectura Driver sint prezentate in figura


Fig.2 Forme de unda obtinute in urma rularii circuitului de test

Modelarea structurala1-Latch pe 8 biti

4 Specificatii

Circuitul latch este un automat asincron care modeleaza functionarea unui zavor (sau "latch"). Zavorul are doua pozitii: una pentru inchis si alta pentru deschis. Prin impingere zavorul este inchis si orice efort ulterior de inchidere nu mai are nici un efect, dar prin aplicarea unui efort in sens invers (tragere) zavorul este deschis si va ramine deschis indiferent de cite ori se va mai trage.

Nu poate fi definita pozitia zavorului daca simultan se aplica si o tragere si o impingere. In concluzie, rezulta ca dintr-o serie de actiuni succesive, fie de impingere, fie de tragere, are efect doar prima, iar aplicarea simultana celor doua actiuni opuse provoaca o nedeterminare in fixarea pozitiei zavorului.

Pentru a modela un latch pe 8 biti utilizam modelul bistabilului de tip D descris anterior.

Structura latch-ului pe 8 biti este prezentata in figura 3.


Fig.3 Latch pe 8 biti

5 Implementare

Declaratia de entitate a latchului pe 8 biti este:

(fisier Latch8.vhd)

Library IEEE;

use IEEE.std_logic_1164.all;

3 entity Latch8 is

4 port (D: in Bit_Vector (7 downto 0);

5 Clk:in Bit;

6 Pre: in Bit;

7 Clr: in Bit;

8 Q: out Bit_Vector ( 7 downto 0) );

9 end Latch8;

13 architecture Structure of Latch8 is

15 component DFF

16 port (Preset : in Bit;

17 Clear : in Bit;

18 Clock: in Bit;

19 Data: in Bit;

20 Q: out Bit;

21 QBar: out Bit );

22 end component;

24 signal QBar: Bit_Vector (7 downto 0);

26 begin

28 F7: DFF port map ( Pre, Clr, Clk, D (7), Q (7), QBar (7) );

29 F6: DFF port map ( Pre, Clr, Clk, D (6), Q (6), QBar (6) );

30 F5: DFF port map ( Pre, Clr, Clk, D (5), Q (5), QBar (5) );

31 F4: DFF port map ( Pre, Clr, Clk, D (4), Q (4), QBar (4) );

32 F3: DFF port map ( Pre, Clr, Clk, D (3), Q (3), QBar (3) );

33 F2: DFF port map ( Pre, Clr, Clk, D (2), Q (2), QBar (2) );

34 F1: DFF port map ( Pre, Clr, Clk, D (1), Q (1), QBar (1) );

35 F0: DFF port map ( Pre, Clr, Clk, D (0), Q (0), QBar (0) );

37 end;

Arhitectura modelului este descrisa in intregime ca interconexiuni intre instantele componentelor. Acest tip de descriere poarta denumirea de descriere structurala.

Semnalele "D", "Q", "QBar" sint de tip predefinit "Bit_Vector", care este un tablou unidimensional de biti. Indexul acestui vector de biti parcurge elementele in ordine descrescatoare. Ordinea elementelor lui "D" este deci urmatoarea: D(7), D(6), ,D(0).

In corpul arhitecturii este declarata componenta DFF a carei interfata corespunde cu cea a modelului modelului bistabilului D prezentat anterior. Acum este posibila crearea a 8 instante bistabilului.

Fiecare instanta a bistabilului este este din punct de vedere logic distincta de oricare alta.

Evenimentele dintr-o instanta nu afecteaza evenimentele din alta instanta.

Specificatia de instantiere a unei componente se refera la o componenta declarata

intr-o declaratie de componenta si nu la o entitate declarata intr-o declaratie de entitate.

Trebuie precizat in consecinta, pentru fiecare instantiere a unei componente, ce declaratie de entitate, din ce biblioteca si ce arhitectura asociata entitatii sa fie selectate.

Procesul prin care in VHDL se construiesc aceste copii multiple, distincte, unei componente, se numeste detaliere ("elaboration") si implica determinarea perechii entitate-arhitectura desemnata instantei respective.

Apoi, o copie a perechii entitate-arhitectura este creata si atribuita instantei. In final, sint aplicate particularizarile fiecarei instante (cum ar fi conexiunile semnalelor) .

Atribuirea perechii entitate-arhitectura instantei poate fi efectuata in intregime de utilizator, dar poate fi subiectul regulilor implicite ale VHDL. Conform acestor reguli, o entitate cu urmatoarele caracteristici este selectata pentru a fi atribuita unei instante a unei componente date, daca:

entitatea are acelasi nume cu cel al componentei

pentru fiecare port al componentei exista un port al entitatii cu acelasi nume, acelasi mod (directie) si tip.

Pentru o entitate data este utilizata arhitectura cel mai recent compilata. Inexistenta unei arhitecturi este o eroare.

6 Testare

Mai jos este prezentat un circuit de test pentru latch-ul pe 8 biti :

(fisier Test_Latch8.vhd)

library IEEE;

use IEEE.std_logic_1164.all;

42 entity Test_Latch8 is end ;

46 architecture Driver of Test_Latch8 is

48 component Latch8

49 port ( D: in Bit_Vector (7 downto 0);

50 Clk : in Bit;

51 Pre : in Bit;

52 Clr: in Bit;

53 Q: out Bit_Vector ( 7 downto 0));

54 end component;

56 signal D, Q: Bit_Vector (7 downto 0);

57 signal Clk, Pre, Clr: Bit := '1' ;

59 begin

61 UUT: Latch8 port map (D, Clk, pre, Clr, Q);

63 Stimulus:

64 process

65 variable Temp : Bit_Vector ( 7 downto 0);

66 begin

68 --set the latch--

70 Pre <= '0', '1' after 5ns;

70 wait for 10ns;

73 --clear the latch--

75 Clr <= '0', '1' after 5 ns;

76 wait for 10 ns;

78 --load the latch--

80 Temp := '00010011';

81 for i in 1 to 8 loop

82 D <= temp;

83 Clk <= '0' after 0 ns, '1' after 5 ns;

84 wait for 10 ns;

85 assert Q = Temp report 'Load failed';

86 Temp := Temp(0) & Temp ( 7 downto 1);

87 end loop;

89 wait;

91 end process;

93 end;

Dupa setare si initializare este incarcat stimulul "00010011" si se verifica corectitudinea raspunsului. Apoi, se deplaseaza cu o pozitie fiecare bit la dreapta, se reincarca stimulul si se verifica raspunsul.

Aceasta secventa de deplasare, incarcare si verificare are loc pina la epuizarea tuturor permutarilor circulare a bitilor stimulului.

In modelul de mai sus sint introduse declaratiide variabile. Acestea sint elemente de memorare locale proceselor si nu au corespondenta in hardware. In VHDL, variabilele prezinta aceleasi proprietati ca in limbajele de programare Pascal, C sau C++.

Spre deosebire de instructiunile de atribuire pentru semnale unde acestea aveau loc dupa un interval de timp (masurabil in intervale de timp Δ), in cazul variabilelor atribuirea are loc instantaneu.

Astfel daca instructiunile de atribuire in cazul semnalelor:

A <=B ;

B <=A ;

au ca efect interschimbarea valorilor variabilelor A si B, iar in cazul variabilelor

A :=B;

B :=A;

au ca efect plasarea valorii lui B in A .

In arhitecturile structurale din VHDL semnalele sint asimilate interconexiunilor. In consecinta, obiectele de tip semnal prezinta semnificatie fizica.

In arhitecturile comportamentale semnalele pot fi interpretate ca variabile de stare.

Variabila este incarcata cu vectorul de test. Instructiunea assert prezinta clauza report. Mesajul " Load Failed" este afisat de fiecare data cind conditia testata de assert este falsa.

La linia 86 are loc deplasarea circulara a bitilor. Expresia din partea dreapta a instructiunii de atribuire "Temp := Temp(0) & Temp ( 7 downto 1);" utilizeaza operatorul de concatenare "&" care este definit pentru pentru tablouri unidimensionale de orice tip.

Operandul din stinga ,Temp(0), furnizeaza bitul cel mai la dreapta al variabilei Temp. Operandul din dreapta, Temp (7 downto 1), furnizeaza primii 7 biti din stinga ai variabilei Temp.

Operatorul de concatenare genereaza un rezultat a carui lungime este suma lungimii operanzilor (aici 8), ale carui elemente sint formate din cele ale operandului din stinga urmate de elementele operandului din dreapta.

Astfel, aceasta expresie deplaseaza cu o pozitie la dreapta variabila Temp. Noua valoare obtinuta prin deplasare este memorata apoi in Temp.

6 Sarcini de efectuat la laborator

Introduceti fisierele sursa de mai sus si salvati-le sub denumirea indicata.

Compilati si incarcati (simulati) fisierele sursa.

Examinati cu atentie formele de unda din fereastra Wave si explicati-le.

Deschideti fisierul netlist in care sint tiparite rezultatele simularii.

Descrieti o noua arhitectura denumita Comportamental a entitatii DFF utilizind constructia process in locul instructiunilor de atribuire concurentiale pentru semnale.

Scrieti codul VHDL pentru latch-ul pe 16 biti si circuitul de test asociat. Ce constructie VHDL va poate ajuta la ultima cerinta?   



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1764
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved