Documente Academic
Documente Profesional
Documente Cultură
Bistabilul D
Obiective:
Referinţe:
Echipament necesar:
1
Noţiuni teoretice:
I. Latch-ul NAND
Latch-ul este cel mai simplu circuit secvenţial. Latch-ul are două intrări, SET şi RESET
şi două ieşiri complementare Q şi nQ. Dacă latch-ul funcţionează normal ieşirile se află în stări
logice opuse. Un astfel de circuit poate fi construit folosind porţi NOR (latch activ-HIGH)
sau NAND (latch activ -LOW) .
Schema unui latch NAND realizată în forma echivalentă a lui De Morgan:
Intrările acesui tip de latch(nS,nR) sunt activ-LOW iar ieşirile sunt activ-HIGH. O intrare
LOW la poarta corespunzătoare ieşirii Q face Q=1, prin urmare aceasta este intrarea SET, iar
intrarea celeilalte porţi este RESET.
Pentru a întelege modul de funcţionare al circuitului ţinem cont de faptul că acesta este
similar cu al unui buton cu două funcţi, START (SET) şi STOP (RESET). Să presupunem că
butonul este folosit pentru a controla un motor. Când se apasă butonul START (nS devine LOW)
motorul porneşte (Q devine HIGH) şi îşi menţine starea chiar dacă butonul START este eliberat
(nS redevine HIGH). Dacă repentăm apăsarea butonului START (nS devine LOW şi apoi din nou
HIGH) motorul îşi menţine starea precedentă de funcţionare (Q =HIGH). Motorul se opreşte (Q
devine LOW) doar la apăsarea butonului STOP (nR devine LOW). Acesta îşi menţine starea
chiar dacă butonul STOP este eliberat (nR redevine HIGH) sau dacă se apasă din nou butonul
STOP. Dacă nu se apasă niciun buton (nS şi nR sunt HIGH) motorul îşi păstrează strea
precedentă (Q=Qprecedent). Este interzisă apăsarea simultană a butonelor (nS=LOW şi
nR=LOW).
Funcţiile latch-lui ţinând cont de combinaţia de intrare sunt sintetizate în tabela de mai
jos:
2
Figura9.2 Tabela de funcţii a Latch-ului NAND
Latch-ul NAND are două stări stabile posibile. În ambele cazuri intrările SET şi RESET
sunt HIGH.
Tranziţia unui latch NAND de la starea de RESET la cea de SET este reprezentată în
figura de mai jos
3
Figura9.4 Tranziţia RESET-SET a latch-lui NAND
Realizarea tranziţiei SET-RESET în cazul unui latch NAND se evidenţiază mai jos:
În reprezentările din figurile 9.4 şi 9.5 s-au luat în considerare întârzierile determinate de
porţile XOR.
În funcţionarea unui latch NAND poate există şi starea interzisă reprezentată în figura
următoare; aceasta apare de fapt atunci când intrările care sunt ambele LOW se schimbă :
4
Figura9.6 Starea interzisă a latch-ului NAND
II. Latch-ul D
Latch-ul D poate funcţiona în două moduri. Atunci când intrarea ENABLE este HIGH,
latch-ul este transparent, ieşirea Q urmăreşte intrarea D; când ENABLE este LOW latch-ul
păstrează datele anterioare. Intrarile D şi ENABLE sunt asincrone.
Stările de funcţionare posibile ale latch-ului D pot fi uşor înţelese urmărind figurile de
mai jos.
5
Figura 9.8 Funcţionare latch D
III. Bistabilul D
6
Un circuit bistabil este un latch a cărui ieşire se modifică pe frontul semnalului de ceas.
Diferenţa dintre un latch şi un bistabil este aceea că primul este sensibil la nivel sau
“static”, iar cel din urmă este sensibil la frontul semnalului de ceas sau “dinamic”.
Spre deosebire de latch-ul D ieşirile bistabilului D se schimbă pe frontal crescător al
semnalului de ceas. Dacă în cazul latch-ului D ieşirea Q urmărea intrarea D atâta timp cât
intrarea ENABLE era HIGH, în cazul bistabilului intrarea D este reprodusă în ieşirea Q doar pe
frontul crescător al semnalului de ceas. Bistabilul D poate avea în plus şi un circuit detector de
front care transformă frontul activ al semnalului de ceas într-un impuls.
7
Figura 9.13 Funcţionarea bistabilului D
8
Modelare-simulare în MATLAB-Simulink
I. Latch-ul NAND
Se propune realizarea modelării şi simulării latch-ului NAND cu ajutorul figurii de mai
jos în care se va ţine cont de legile algebrei booleane şi de figura 9.1.
Pasul 1:
-se porneşte MATLAB-Simulink din linia de comandă folosind comanda >>simulink sau
butonul Simulink din bara de butoane.
Pasul 2:
9
- se creează un nou model File->New->Model sau prin combinaţia de taste Ctrl+N
10
În fereastra apărută se completează câmpurile parametrilor astfel:
11
Blocurile introduse au nevoie de anumite setări. Pentru a seta parametrii corespunzatori
se dă dublu-click pe bloc şi se deschide fereastra Block Parameters.
Figurile de mai jos indică modul în care trebuie aleşi parametrii blocurilor utilizate în schemă.
12
13
Pasul 5: După realizarea schemei pentru a vizualiza rezultatul se procedează astfel:
- se dă dublu click pe blocul Scope pentru a deschide osciloscopul ;
- se dă click pe butonul Run din bara de butoane pentru a porni simularea.
14
Din figura de mai jos obţinută în urma simulării se pot observa funcţiile latch-ului NAND
prezentate în partea teoretică a lucrării.
II. Latch-ul D
15
În continuare se propune realizarea modelării şi simulării latch-ului D cu ajutorul figurii
de mai jos în care se ţine cont de legile algebrei booleane şi de figura 9.7.
Pentru a îndeplini sarcina se vor urma paşii de la latch-ul NAND cu anumite modificări:
- la pasul 2 se salvează fişierul cu numele latchd.mdl;
- la pasul 4 se adaugă în plus blocul următor:
16
- pentru celelalte două blocuri Step se modifică astfel : Step time: 2 respectiv 5, Initial
Value:1 respectiv 0 şi Final Value: 0 respectiv 1.
17
Urmând paşii corespunzători în urma simulării s-a obţinut figura de mai jos în care se pot
observa funcţiile latch-ului D prezentate în partea teoretică a lucrării.
Observaţie:
18
III. Bistabilul D
Se va realiza ultimul model Simulink propus în lucrarea de laborator, bistabilul D cu
ajutorul figurii următoare în care s-a ţinut cont de legile algebrei booleane şi de figurile 9.11 şi
9.12.
19
o se observă din schema bistabilului D faptul că semnalul de ceas negat este
întârziat cu un număr de întârzieri egal cu 100; se setează în blocul Integer Delay
parametrul Number of delays: 100.
o pentru blocul Scope, osciloscopul multicanal, se setează parametrul Number of
axes: 5
o pentru blocul From Audio Device se folosesc setările de mai jos:
În final s-a obţinut figura de mai jos în care se pot observa funcţiile bistabilului D
prezentate în partea teoretică a lucrării.
Observaţie:
Se observă din figura de mai jos că bistabilul D este activ pe frontul crescător al
semnalului de ceas.
20
Concluzii:
Prin modelele realizate şi simulate cu ajutorul soft-ului MATLAB-Simulink s-au
identificat din nou funcţiile latch-ului şi ale bistabilului observate în prima parte a lucrării de
laborator.
21
Modelare-simulare în Xilinx ISE 10.1
I. Latch-ul NAND
În continuare se va realiza schema logică a latch-ului de tip NAND.
Pasul 1: Se deschide aplicaţia Xilinx ISE 10.1
Pasul 2: Din bara de meniuri a aplicaţiei se selectează File New Project...
22
Pasul 4: În noua fereastra de dialog se completează câmpurile conform modelului următor şi se
dă click pe butonul Next.
24
Pasul 8: Se realizează schema din figura 9.1 folosind două porţi OR2B2, fire şi I\O markere:
- se introduc în schemă porţile logice; pentru a face acest lucru se scrie numele porţii în
câmpul Simbol Name Filter;
- se dă click pe simbolul apărut;
- folosind tehnica drag and drop se introduce poarta în schemă.
Schema finală a latch-ului de tip NAND trebuie să arate precum cea din figura următoare:
Acum se va crea un fişier de tip test bench waveform pentru a verifica funcţionarea
corectă a latch-ului NAND. Se vor introduce date experimentale de intrare şi se va verifica dacă
ieşirea corespunde indicaţiilor teoretice.
26
Pentru a crea fişierul de test trebuie parcurgeţi următorii paşi:
Pasul 1: Se dă click dreapta ca în figură şi se selectează New Source
Pasul 3: Se selectează fişierul sursă pentru care se crează test bench-ul, se dă click pe Next, apoi
Finish
27
Pasul 5: Se selectează datele de intrare nSet şi nR:
- în dreptul fiecărei intrări există zona semnalelor de intrare. Aceste semnale pot fi
modelate prin simpla apăsare în zona dreptunghiurilor albastre. Printr-un click pe această
zonă semnalul basculează din 0 logic în 1 logic şi invers. Se încearcă urmărirea în
realizarea semnalului toate combinaţiile de intrare posibile prezentate în figura 9.2. Un
exemplu ar putea fi cel de mai jos.
Observaţie: S-a folosit notaţia nSet pentru a evita o eroare la simulare cauzată de confuzia lui nS
cu ns(nano-secunda).
28
- se dă click pe Test Bench-ul proiectului şi (pentru acesta) se porneşte simularea (prin
dublu-click pe Simulate Behavioral Model).
Dacă s-au urmărit paşii anteriori ar trebui să se obţină rezultatele din fereastra de mai jos.
Semnalele cu verde arată simularea comportamentului latch-ului NAND.
29
Analiza rezultatelor obţinute permite să se observe funcţiile posibile ale latch-ului
NAND.
Se observă că atunci când nSet devine 0 logic (LOW), iar nR rămâne 1 logic (HIGH), Q
devine 1 logic (HIGH) realizându-se astfel funcţia SET. Atunci când nSet devine din nou 1 logic
latch-ul îşi păstrează ieşirea anterioară (Q=HIGH).
30
În cazul în care nR devine 0 logic (LOW), iar nSet rămâne 1 logic (HIGH), Q devine 0
logic (LOW) realizându-se astfel funcţia RESET. nR poate deveni din nou 1 logic (HIGH) caz în
care latch-ul îşi păstrează starea anterioară (LOW).
Atunci când nR şi nSet devin simultan 0 logic (LOW) şi nR devine 1 logic (HIGH)
înaintea lui nSet, latch-ul îndeplineşte funcţia de SET (Q devine HIGH).
o Caz2:
31
Atunci când nR şi nSet devin simultan 0 logic (LOW) şi nSet devine 1 logic (HIGH)
înaintea lui nR, latch-ul îndeplineşte funcţia de RESET (Q devine LOW).
o Caz3:
Atunci când nR şi nSet devin simultan 0 logic (LOW) şi apoi devin simultan 1 logic
(HIGH) ieşirile Q şi nQ vor oscila până când una dintre intrări va deveni 0 logic (LOW) latch-ul
trecând astfel la îndeplinirea funcţiei respective.
II. Latch-ul D
32
Se propune realizarea implementării latch-ului D în VHDL.
Pasul 1: Similar procedurii anterioare se începe prin crearea unui nou proiect.
Pasul 2:
- se completează câmpul Project name cu numele proiectului, dLatch;
- se selectează locaţia în care se doreşte salvarea proiectului ,
D:\Laboratoare\Laborator9\;
- pentru câmpul Top-level source type se alege opţiunea HDL;
- se dă click pe butonul Next.
Pasul 3:Se completează câmpurile feresteri New Project Wizard-Device Properties urmărind
modelul prezentat la crearea proiectului pentru latch-ul NAND.
33
Pasul 5:
- se alege ca tip de fişier VHDL Module;
- se completează câmpul File nume cu numele fişierului, dLatch_vhdl;
- se dă click pe butonul Next.
Pasul 6: În fereastra de mai jos se introduc numele intrărilor şi ieşirilor precum şi tipul de date
apoi se dă click pe butonul Next.
34
Pasul 7: Se dă click pe butonul Finish în fereastra cu specificaţii despre fişierul VHDL nou creat.
Dacă s-a procedat corect se obţine o fereastră ce conţine codul VHDL parţial.
35
Pasul 8: Se completează codul VHDL ca mai jos.
36
Dacă în urma verificării codului nu se găsesc erori urmează să se creeze fişierul de test
pentru a analiza funcţionarea corectă a latch-ului D. Se va proceda ca în cazul creării fişierului de
test pentru latch-ul NAND.
Pasul 1:
- se selectează tipul fişierului Test Bench Waveform;
- se completează câmpul File Name cu numele fişierului de test, dLatch_tbw;
- fişierul va fi salvat în locaţia: D:\Laboratoare\Laborator9\dLatch
- se dă click pe butonul Next.
Pasul 2: Se selectează sursa pentru care se doreşte crearea fişierului de test şi se dă click pe
butonul Next şi apoi se dă click pe butonul Finish.
37
Pasul 3: În fereastra nou apărută se completează conform modelului următor şi se dă click pe
butonul Finish (pentru ceas se selectează modul Combinatorial, iar pentru lungimea testului
4000ns ).
Pasul 4: Apare fereastra în care se stabilesc semnalele de intrare (enable şi d) pentru lach-ul D
conform indicaţiilor din exemplul anterior(Latch-ul NAND); se propune realizarea tuturor
combinaţiilor posibile pentru ca urmărind ieşirea (q) să se poată evalua cât mai bine funcţionarea
latch-ului respectiv.
Pasul 5:
- după ce s-au setat intrările se dă click pe Sources;
- se selectează modul Behavioral Simulation;
- se dă click pe Test Bench-ul proiectului şi (pentru acesta) se porneşte simularea (prin
dublu-click pe Simulate Behavioral Model).
38
În graficul de mai sus se poate observa faptul că ieşirea Q urmăreşte intrarea D atâta timp cât
semnalul ENABLE este HIGH(1 logic); atunci când ENABLE devine LOW(0 logic)
ultima valoare a intrării D este păstrată până în momentul în care ENABLE devine din nou
HIGH
Cele două intrări (D şi ENABLE ) sunt asincrone. Se poate observa acest lucru din codul
VHDL, ambele intrări se regăsesc în lista de sensibilităţi a procesului: process(d,enable), deci se
urmăresc posibile modificări ale ambelor intrări.
Observaţie:
39
Rezultatul obţinut este cel de mai jos:
III. Bistabilul D
40
Pasul 3: Se completează câmpurile ferestrei New Project Wizard-Device Properties urmărind
modelul prezentat la crearea proiectului pentru latch-ul NAND.
Pasul 6: - în fereastra Define Module se introduce numele intrărilor, ieşirilor şi tipul de date;
- se dă click pe butonul Next;
- se dă click pe butonul Finish în fereastra cu specificaţii despre fişierul VHDL nou
creat.
41
cu următoarea secvenţă de cod:
process(clock)
begin
if(clock’EVENT and clock=’1’) then
q<=d;
end if;
end process;
Codul VHDL final trebuie să aibă conţinutul de mai jos
42
Pasul 8: Pentru a verifica corectitudinea codului scris :
- se selectează fişierul dbistabil_vhdl în fereastra Sources;
- se extinde Synthesize-XST din fereastra Sources;
- se dă dublu-click pe Check Syntax sau click-dreapta şi Run în fereastra Processes.
Pasul 2:
- se dă click pe butonul Next;
44
Pasul 3: În fereastra nou apărută se completează conform modelului următor şi se dă click pe
butonul Finish (pentru ceas se selectează modul Single Clock, iar pentru lungimea testului
4000ns ).
Pasul 4: Apare fereastra în care se stabilesc semnalele de intrare (clock şi d) pentru lach-ul D
conform indicaţiilor din exemplul anterior(Latch-ul NAND); se propune să se realizeze toate
45
combinaţiille posibile pentru ca urmărind ieşirea (q) să se poată evalua cât mai bine funcţionarea
bistabilului .
Pasul 5:
- după ce s-au setat intrările se dă click pe tabul Sources;
- se selectează modul de lucru Behavioral Simulation;
- se dă click pe Test Bench-ul proiectului şi (pentru acesta) se pornește simularea (tabul
Processes expandaţi Xilinx ISE Simulator apoi dublu-click pe Simulate Behavioral Model sau
click-dreapta şi Run).
46
Observaţie:
Partea marcată astfel: în simulare indică faptul că valoarea semnalului este
necunoscută din cauza faptului că intrarea tocmai a fost iniţializată şi nu s-a propagat încă în
ieşire.
Observaţie:
! O altă metodă de implementare a codului presupune instanţierea primitivei FD din
biblioteca UNISIM.
Declaraţia componentei LD este următoarea:
component FD
PORT (Q: out STD_ULOGIC;
C: in STD_ULOGIC;
D: in STD_ULOGIC);
end component;
Codul VHDL corespunzător acestei variante de implementare:
47
Rezultatul obţinut este cel de mai jos:
Concluzii:
Circuitul secvenţial este acel circuit logic care poate genera ieşiri diferite pentru aceeaşi
intrare în funcţie de secvenţa în care au fost aplicate intrările cu alte cuvinte ieşirea nu depinde
doar de combinaţia prezentă a ieşirilor ci şi de stările anterioare.
Latch-ul şi bistabilul sunt circuite logice similare folosite pentru stocarea unui bit de
informaţie. Difererenţa dintre ele este dată de condiţia pentru care bit-ul stocat se schimbă.
48
Se propune în continuare să se experimenteze câteva elemente de bază din cadrul
co-simulării integrând două unelte puternice de design-Simulink şi ModelSim.
Versiunile de software folosite:
MATLAB:
Versiunea :R2009b
ModelSim:
Versiunea :ModelSim SE 6.3f
I. Latch-ul D
Se va realiza mai întâi co-simularea pentru Latch-ul D. În acest scop este nevoie de
fisierul VHDL creat anterior dLatch_vhdl.vhd. Acesta trebuie copiat în folder-ul în care se va
lucra pentru realizarea co-simulării. În continuare se vor urma cu atenţie paşii de mai jos.
Pasul 1:
Pentru deschiderea unui model Simulink se urmăresc paşii prezentaţi în partea de
modelare şi simulare în Simulink, se salvează fişierul LatchDCosimulare.mdl în folder-ul
de lucru;
49
Pasul 2:
se setează parametrii simulării din meniul Simulation->Configuration Parameters;
fereastra apărută trebuie completată după modelul de mai jos:
Pasul 3:
se introduc în schemă blocurile necesare şi se fac conexiunile corespunzător schemei:
o Simuluink->Sinks->Scope;
o Simulink->Sources->Pulse Generator;
o Simulink->Signal Atributes->Data Type Conversion;
o EDA Simulator Link->For Use with Mentor Graphics ModelSim->HDL
Cosimulation;
o Signal Processing Blockset->Signal Processing Sources->From Audio Device.
50
o pentru blocul Data Type Conversion se setează parametrul Output Data Time:
Boolean;
o pentru blocul From Audio Device se foloseşte modelul următor:
51
o setarea parametrilor blocului HDL Cosimulation este cea mai importantă. Acesta este
blocul care face legătura între componentele hardware care simulează concurent în
ModelSim şi restul componentelor modelului Simulink.
52
o în tabul Timescales se completează corespondenţa Simulink-ModelSim
conform modelului următor:
Observaţie:
Reprezentarea timpului de simulare diferă mult între Simulink şi ModelSim. În
ModelSim unitatea de simulare este referită ca fiind tick-ul; durata acestuia este definită de
limita de rezoluţie a carei valoare implicită este 1 ns. Rezoluţia limită poate fi modificată:
Simulate->Start Simulation->Resolution.
În modelul de faţă s-a ales pentru reprezentarea timpului modul relativ. O secundă în
Simulink = N tick-uri în ModelSim (N factor de scalare).
53
!Dacă se specifică în Simulink o perioada de eşantionare care nu poate fi exprimată ca
număr întreg de tick-uri se va genera o eroare.
Se foloseşte blocul Zero-Order hold în cazul semnalelor continue care sunt aplicate
blocului HDL Cosimulation.
o în tabul Connections se stabileşte tipul conexiunii cu ModelSim astfel:
54
După ce s-a realizat modelul Simulink (care ar trebui să arate precum cel de mai jos) se
face legătura cu ModelSim conform paşilor de mai jos.
Pasul 5:
se setează directorul de lucru
se crează o bibliotecă de design şi compilăm codul VHDL
57
Se va obţine fereastra de mai jos
58
Conexiunea ilustrată mai jos este stabilită şi se poate rula acum co-simularea.
Pasul 6:
în fereastra Simulink se dă click pe butonul Run şi se obţine rezultatul următor. Se
observă că ieşirea q este întârziată cu o secundă de blocul HDL Cosimulation, dar
conform funcţiilor latch-ului D atunci când enable=1 intrarea este reprodusă în ieşire, iar
când enable=0 se păstrează în ieşire starea anterioară a intrării D.
59
Pasul 7:
se închide simularea corect: în ModelSim Simulate->End Simulation şi apoi se închide
ModelSim; în final se închide fereastra cu modelul Simulink.
60
II. Bistabilul D
Se va realiza acum co-simularea pentru bistabilul D. În acest scop este nevoie de fisierul
VHDL creat anterior dbistabil_vhdl.vhd. Acesta trebuie copiat în folder-ul în care se va lucra
pentru realizarea co-simulării. În continuare se vor urma cu atenţie paşii de mai jos.
Pasul 1:
Pentru crearea modelului Simulink se urmăresc paşii prezentaţi în partea de modelare şi
simulare în Simulink, se salvează fişierul nostru BistabilDCosimulare.mdl în folder-ul de
lucru;
Pasul 2:
se setează parametrii simulării, Simulation->Configuration Parameters; fereastra apărută
trebuie completată după modelul de mai jos:
61
Pasul 3:
se introduc în schemă blocurile necesare şi se fac conexiunile corespunzător schemei:
o Simuluink->Sinks->Scope;
o Simulink->Sources->Pulse Generator;
o Simulink->Signal Atributes->Data Type Conversion;
o EDA Simulator Link->For Use with Mentor Graphics ModelSim->HDL
Cosimulation;
o Signal Processing Blockset->Signal Processing Sources->From Audio Device.
62
o pentru blocul Data Type Conversion se setează parametrul Output Data Time:
Boolean;
o pentru blocul From Audio Device se foloseşte modelul următor:
63
o setarea parametrilor blocului HDL Cosimulation :
o în tabul Ports se setează parametrii astfel(d,clock şi q sunt semnalele de
intrare respectiv ieşire folosite în codul VHDL):
64
o în tabul Connections se stabileşte tipul conexiunii cu ModelSim astfel:
După ce s-a realizat modelul Simulink (care ar trebui să arate precum cel de mai jos) se
face legătura cu ModelSim conform paşilor prezentaţi în continuare.
65
Pasul 4 : Deschiderea ModelSim
în mediul de lucru MATLAB se stabileşte ca folder curent folderul de lucru
(D:\Laboratoare\Laborator9\ dBistabil\Cosimulare) în care se afla fişierul VHDL;
se foloseşte apoi comanda vsim pentru a deschide ModelSim.
Pasul 5:
se setează directorul de lucru
se crează o bibliotecă de design şi se compilează codul VHDL
66
se încearcă entitatea instanţiată, dbistabil_vhdl, pentru cosimulare
67
Se va obţine fereastra de mai jos
Pasul 6:
în fereastra Simulink se dă click pe butonul Run şi se obţine rezultatul următor. Se
observă că ieşirea q este întârziată cu o secundă de blocul HDL Cosimulation, dar
conform funcţiilor bistabilului D atunci când apare frontul crescător al semnalului de ceas
intrarea este reprodusă în ieşire,
68
Dacă se urmăreşte simularea în ModelSim se observă aceeasi funcţionare. Aici însă
ieşirea q nu este întârziată.
Pasul 7:
conform precizării de la latch-ul D se închide simularea: în ModelSim Simulate->End
Simulation şi apoi se închide ModelSim ;în final se închide fereastra cu modelul
Simulink.
Observaţii:
!Pentru variantele mai vechi de MATLAB blocul HDL Cosimulation are drept
corespondent blocul de mai jos aflat în Simulink->Link for ModelSim:
69
!S-a realizat co-simularea folosind codul VHDL scris anterior. O altă variantă care nu a
fost tratată aici presupune generarea automată de cod VHDL din linie de comandă în MATLAB
sau din modelul Simulink din fereastra Configuration Parameters conform prezentării succinte
de mai jos.
70
Concluzii:
Se foloseşte co-simularea pentru a ajusta codul VHDL al unui circuit logic (creat sau
generat automat) până în momentul în care simularea funcţională este satisfăcătoare pentru a
putea trece la implementarea în FPGA. Co-simulării are la bază ideea conectării unor entităţi
care acţionează concomitent.
71
Implementarea în FPGA
- portul paralel al PC-ului se identifică uşor, având codul de culoare roz sau mov după
caz;
- în final, dacă s-au conectat cablurile la porturile care trebuie, placa trebuie să arate în
felul următor cu toate conexiunile făcute:
Partea a II-a
73
A. Implementarea pe placa Spartan-3 FPGA a bistabilu-lui D
Pasul 2. Crearea unui nou proiect pentru implementarea pe placa Spartan-3 FPGA
Se poate folosi fişierul VHDL creat în prima parte a lucrării de laborator sau putem crea
unul nou astfel:
- se va deschide softul Xilinx ISE 10.1 şi se va crea un nou proiect ca în figura
următoare:
75
- în final se dă din nou click pe Next;
- va apărea următoatea fereastră:
- după ce s-a dat click pe Finish se merge în stînga sus la panel-ul Sources;
- se dă click dreapta şi se selectează Add Source… ca în figura următoare:
76
- se va deschide o fereastră unde se caută fişierul cu extensia .vhd care se va adăuga la
proiect:
- se dă click pe OK;
77
- va apărea codul VHDL conţinut în fişierul respectiv:
78
- dacă codul este corect va apărea imaginea următoare:
- până în acest moment s-a încărcat fişierul bistabiu-lui D şi s-a verificat codul conţinut
în acesta;
- în următoarea etapă se va pregăti programul care va fi încarcat pe placa Spartan-3
FPGA.
79
- după ce s-a selectat Run se va deschide următoarea fereastră:
80
- se alege opţiunea ca în imaginea de mai sus: XST Optional{};
- se închide fereastra respectivă.
81
- din tabul Processes se expandează User Constraints şi se deschide Edit Constraints
prin dublu click;
82
- se salvează , apoi se rulează din nou comanda Generate Programming File;
- dacă nu sunt erori va apărea ca imaginea următoare:
- se dă click dreapta pe Configure Target Device din tabul Processes ca în figura de mai
jos:
83
- se dă click pe Run;
- va apărea următoarea imagine:
- se dă click pe OK;
- va apărea fereastra următoare:
- se dă click pe Finsh;
- iMPACT trebuie să detecteze automat placa FPGA şi să ceară selectarea fişierelor
de configurare pentru cele două dizpozitive;
- când apare meniul de select, se alege fişierul cu extensia .bit;
84
- se dă click pe Open;
- pentru al 2-lea dizpozitiv(Flash-ROM-ul de pe placă) se selectează opţiunea Bypass
deoarece nu s-a generat nimic pentru el.
- se asigură că s-a selectat Device 2(Prom, xcf02S) şi s-a debifat tot de la casuţele din
coloana Value, ca în imaginea de mai sus.
Observa ţie
! La debifarea opţiunii Verify va apărea un warning care se ignoră dând click pe OK.
85
- se dă click dreapta pe primul dizpozitiv xc3s200;
- apoi se dă click pe Program ca în figura următoare:
Observaţie
! La unele PC-uri s-ar putea să nu ruleze din prima încercare din motive ce ţin de softul
folosit, versiunea de Windows, memoria RAM a calculatorului, conectivitatea cu placa FPGA,
etc…
- în cazul în care vă apare imaginea următoare:
86
- se selectează din nou dizpozitivul xc3s200;
- se dă click dreapta şi se selecteaza opţiunea Program din nou;
- după ce a apărut imaginea:
87
- pentru switch, sus înseamnă 1 iar jos înseamnă 0;
- led-ul se aprinde atunci cînd q=1 iar ramîne stins atunci cînd q=0;
- pentru buton, o apăsare reprezintă un front crescător iar dacă butonul rămâne apăsat,
atunci semnanul de ceas rămâne pe frontul său superior ca în figura următoare:
- face o analogie între feedback-ul plăcii şi ce afişează blocul Scope din schema
MATLAB-Simulink pentru a înţelege mai bine rolul său;
88
- în blocul Scope sunt reprezentate intrările şi ieşirile ca în figura următoare:
Ieşirea “q” va reproduce intrarea “d” la apariţia frontului crescător al ceasului clock.
Dacă intrarea se modifică ,se va reflecta la ieşire doar cînd va fi activ un nou front crescător al
ceasului. Ieşirea va reproduce intrarea corespunzătoare ultimului front crescător al ceasului.
c). d=1(switch în sus), se va apăsa butonul “clock” => ieşirea “q”=1.Se ţine butonul clock apăsat
şi se modifică intrarea “d”=0(switch în jos) şi se observă că nu se modifică ieşirea “q”, ci va
ramane cea de dinainte (q=1).
89
B.Implementarea pe placa Spartan-3 FPGA a latch-ului D
90
Pasul 3. Adăugarea fişierului sursă cu codul VHDL al latch-ului D
91
o se dă click pe OK;
o va apărea codul VHDL conţinut în fişierul respectiv:
92
Pasul 4.Setarea intrărilor şi ieşirilor pentru placa Spartan-3 FPGA
93
Pasul 7.Testarea programului pe placa Spartan-3 FPGA
- se va face o recapitulare a intrărilor “d” , “enable” şi a ieşirii “q”
94
- pentru switch, sus înseamnă 1 iar jos înseamnă 0;
- led-ul se aprinde atunci cînd q=1 şi ramîne stins atunci cînd q=0;
- se va face o analogie între feedback-ul plăcii şi ce afişează blocul Scope din schema
Matlab-SIMULINK pentru a înţelege mai bine rolul său;
- în blocul Scope exista reprezentate intrările şi ieşirile ca în figura următoare:
a) Enable=1(switchul este în sus), se va face intrarea D=1 (switch sus). Se obsevă că ledul se va
aprinde deci ieşirea Q va reflecta intrarea D, în cazul de faţă Q=1.
d) Enable=0, Q=0, D=1(cazul c) .), se va face Enable=1 (switch sus). Se observă că ledul se va
aprinde reflectând starea intrării D.
95
96
Proiect realizat de :
Dinulescu Maria
Ganea Madălin
Ionică Monica
Tănase Irina
Popa-Mare Mircea
97