Sunteți pe pagina 1din 4

APARATE DE LABORATOR ŞI MEDIUL

VERIWELL PENTRU MODELARE VERILOG

1. Scopul lucrării
Instruirea studenţilor pentru activităţile de laborator, discutând despre
principalele norme de protecţie a muncii. Prezentarea aparatelor folosite în lucrările de
laborator şi prezentarea simulatorului Veriwell pentru descrierea circuitelor digitale în
limbajul Verilog HDL.

2. Aparate necesare
- calculator compatibil Pentium
- sistem de operare Windows 95 sau superior
- programul VeriWell 2.0, produs de Wellspring Solutions, versiunea
freeware
- platforme de laborator
- surse de alimentare
- generatoare de semnal
- osciloscoape

3. Consideraţii teoretice
Funcţionarea principalelor aparate folosite în laboratorul de circuite digitale a
fost prezentată studenţilor şi la alte discipline parcurse în anul I, cum ar fi Tehnologie
Electronică. În acest modul de laborator se reamintesc principiile de funcţionare a
surselor de alimentare cu tensiune continuă de valoare mică (sub 30V), a
generatoarelor de semnal sinusoidal sau dreptunghiular şi a osiloscoapelor digitale.
Apoi se prezintă aparatele existente în laborator şi se explică utilizarea lor pentru
montajele folosite la diferite lucrări care se vor desfăşura în acest semestru.

Metodele manuale de sinteză a sistemelor numerice, care presupun tehnici de


minimizare a funcţiilor binare, utilizarea tabelelor de tranziţii etc., nu permit
proiectantului conceperea unor sisteme de mare complexitate. Pentru automatizarea
proiectării au fost concepute instrumente sub forma unor limbaje de descriere a
hardware-ului, numite limbaje HDL (Hardware Description Languages). Aceste
limbaje permit specificarea riguroasă a funcţionalităţii sistemelor numerice, permit
simularea acestor circuite (prin vizualizarea formelor de undă în timp se verifică dacă
funcţionarea circuitului corespunde aşteptărilor noastre), precum şi sinteza circuitelor,
generând conexiunile necesare pentru o structură programabilă, sau măştile necesare
pentru construcţia unui circuit integrat ASIC. Rezultatul compilării programului nu
este un cod maşină, ci schema de conexiuni a unui circuit numeric. Sursele limbajelor
HDL nu sunt reprezentări grafice de scheme logice, ci fişiere text, care respectă
sintaxa limbajului respectiv şi care oferă, fie posibilitatea descrierii structurii
circuitului digital, legată mai mult de schema circuitului, fie posibilitatea descrierii
comportamentului circuitului.

1
A S1
p1
B p3 F
S2
C p2

Fig. 3.1 Schema logică a unei structuri combinaţionale

Descrierea structurală poate fi preferată de unii proiectanţi, mai ales pentru


porţiuni simple de circuit, dar pentru circuite complexe, descrierea
comportamentală uşurează mult munca proiectantului, economisind timp şi resurse
hardware.

La ora actuală sunt standardizate două limbaje HDL: Verilog HDL, uşor de
învăţat, cu o sintaxă asemănătoare limbajului C, şi limbajul VHDL (Very High Speed
Integrated Circuit Hardware Description Language), ceva mai dificil, cu o sintaxă
bazată pe limbajul Ada. În lucrările de laborator vom folosi numai limbajul Verilog,
iar simulatorul pe care vom testa funcţionarea circuitelor este Veriwell, un program
freeware, singura limitare impusă fiind numărul de 1000 linii de cod pentru fiecare
fişier Verilog (un proiect conţine în general mai multe fişiere).
Să considerăm circuitul combinaţional simplu cu 3 intrări şi o ieşire din figura
3.1. Pentru sinteza şi analiza acestui circuit trebuie să generăm două fişiere sursă, pe
care le-am numit clc1.v şi test_clc1.v, iar conţinutul lor este reprezentat în figura
3.3. Cele două fişiere sunt incluse într-un proiect nou, numit clc1.prj.

Interfaţa grafică a mediului VeriWell 2.0 este prezentată în figura 3.2. Primul
pas constă în crearea unui proiect nou, alegând opţiunea Project şi apoi New Project.
Am numit proiectul clc1.prj, iar fişierele componente sunt listate în fereastra din
dreapta-sus: clc1.v şi test_clc1.v. Orice fişier Verilog nou, adică orice fişier *.v,
poate fi creat cu opţiunea File şi apoi New, şi poate fi adăugat la proiectul curent
prin

2
Fig. 3.2 Câteva ferestre din mediul VeriWell 2.0
clc1.v test_clc1.v
module CLC_1(inA,inB,inC,outF); module test_CLC_1;

input inA,inB,inC; reg A,B,C;


output outF; wire F;

wire outF,S1,S2; initial


begin
nor p3(outF,S1,S2); $vw_dumpvars;
and p1(S1,inA,inB); $monitor ($time,
not p2(S2,inC); "A = %b B = %b C = %b F = %b",
A, B, C, F);
endmodule
#10 A = 0; B = 0; C = 0;
#10 C = 1;
#10 A = 1;
#10 B = 1;
#10 A = 0;
#10 B = 0;
#10 C = 0;
#10 $finish;
end

CLC_1 testat(A,B,C,F);

endmodule

Fig. 3.3 Fişierele sursă ale proiectului clc1.prj

opţiunea Project şi apoi Add file…. Comanda Run din meniul Project determină
compilarea fişierelor sursă, iar rezultatul apare în ferestra de consolă VeriWell
Console din partea stângă-jos a ecranului. Se observă lipsa erorilor din procesul de
compilare a proiectului, se raportează modulul ierarhic superior, în cazul nostru
test_clc_1 şi se listează nivelurile logice ale semnalelor de intrare A, B, C şi de ieşire
F pentru 80 unităţi de timp, aşa cum s-a cerut în fişierul sursă test_clc1.v. Aceste
semnale pot fi vizualizate în fereastra wavefile.wmf, reprezentată în partea dreaptă-
jos, obţinută prin comanda Open Wave File… din meniul File. Fereastra Signal
Browser din stânga-sus permite alegerea semnalelor pe care vrem să le vizualizăm.

Putem observa că fişierul clc1.v realizează o descriere structurală a


circuitului, iar fişierul test_clc1.v realizează testarea circuitului, prin aplicarea
la anumite intervale de timp a unor stimuli pe intrări. Observăm că orice circuit
sau sistem se defineşte ca un „modul”, care începe şi se termină cu cuvintele cheie
module şi respectiv endmodule (după endmodule nu se mai pune “;”).
Porţile logice din schemă nor, and, not sunt predefinite în limbajul Verilog.
Alte porţi logice predefinite sunt : nand, or, xor, xnor şi buf. Observăm că
fiecare poartă are un nume şi o listă de intrări/ieşiri. Ieşirea este pusă prima în
listă. Cu excepţia bufferelor, toate porţile au o singură ieşire. Bufferele repetă
semnalul de intrare pe mai multe ieşiri, de exemplu: buf BUF1 (out1, out2,
out3, in); Prin input şi output se declară intrările şi ieşirile din blocul
combinaţional CLC_1. Variabilele care reprezintă semnale numerice sunt de două
tipuri: wire (fir) sau reg (registru). O variabilă de tip wire modelează un semnal
combinaţional, iar atribuirea ei se face cu instrucţiunea assign, care înseamnă că

3
la fiecare modificare de variabilă se reevaluează valoarea atribuirii şi se modifică
dacă este cazul. O variabilă de tip reg modelează o celulă de memorie, iar
atribuirea se face procedural, ca în limbajele de programare uzuale.
Dacă vrem să ţinem seama şi de întârzierile datorate timpilor de propagare prin
porţi, este suficient să introducem la definirea porţii o întârziere egală cu acest timp de
propagare. De exemplu, instrucţiunea nor #2 p3(outF,S1,S2) introduce un timp de
propagare de 2 unităţi pentru poarta p3. Dacă o intrare se modifică la t = 6, atunci
ieşirea porţii se modifică la t = 8.

Pentru o descriere comportamentală a circuitului, în interiorul modulului


CLC_1 se păstrează numai declaraţiile semnalelor de intrare şi de ieşire input şi
output. Restul liniilor din interiorul modulului se înlocuiesc prin instrucţiunea
assign outF = ~((inA&inB)|~inC). Programul este scris mai uşor şi mai compact,
pentru că acum ne interesează funcţia şi nu conexiunile interne ale circuitului.
Al doilea fişier al proiectului, test_clc1.v, generează semnalele de testare a
circuitului. Sistemul de testare este tot un modul. Instrucţiunile care generează
semnalele de test sunt cuprinse între begin şi end. Cuvântul cheie initial determină
execuţia instrucţiunilor de la t = 0. Funcţia de sistem $monitor permite monitorizarea
variabilelor. Simbolurile specifice %... ne trimit la lista de variabile unde se caută o
valoare zecimală (d) sau binară (b). Monitorizarea urmăreşte în permanenţă valoarea
variabilelor, repetând instrucţiunea la fiecare modificare a variabilelor. Numele
modulului testat, CLC_1 şi lista de semnale în aceeaşi ordine, apare înainte de ultima
comandă endmodule din fişierul test_clc1.v. Instrucţiunea $vw_dumpvars
permite vizualizarea semnalelor prin forme de undă în fereastra wavefile.wmf. Dacă
ea lipseşte din fişierul de test, atunci rezultatul simulării se poate vedea numai în
fereastra de consolă ca un fişier text, iar fereastra wavefile.wmf conţine formele de
undă de la simulări anterioare.

4. Modul de lucru
4.1. Se citesc instrucţiunile de protecţie a muncii în laboratorul de Circuite
Integrate Digitale şi se insistă pe chestiunile importante legate de protecţia contra
electrocutării, paza şi stingerea incendiilor, comportarea la cutremur, căile de acces în
caz de urgenţă. Studenţii semnează în tabelul care confirmă efectuarea instructajului
periodic de protecţie a muncii.

4.2. Se face o prezentare a aparatelor din laborator care vor fi folosite la


efectuarea lucrărilor practice. Se prezintă principalele caracteristici şi modul de
utilizare, mai ales dacă există aparate noi pentru studenţi, care nu au mai fost folosite
până acum.

4.3. Se pornesc calculatoarele şi se lansează programul Veriwell. Se identifică


mediul de lucru, principalele ferestre ale programului şi se rulează proiectul
clc_1.prj, descris la punctul 3. Se verifică funcţionarea corectă a circuitului prin
rezultatele afişate în fereastra de consolă şi prin evoluţia formelor de undă în timp. Se
fac modificările propuse la punctul 3 în fişierul clc1.v şi se observă din nou
rezultatele obţinute.

S-ar putea să vă placă și