joi, 10 februarie 2011

Capitolul III

 Semnale.
3.1    Noţiuni generale.

Orice în electronică este legat de recepţia, transformarea şi transmiterea semnalelor. Fără dubii se poate spune că semnalele sunt cele mai importante lucruri în sistemele electronice. De aceia vom dedica acest capitol semnalelor şi utilizării lor în Verilog.
În secţiunea 2 vom da  o întroducere în semnale şi rolul lor în electronica digitală.
În secţiunea 3 vom descrie detaliat particularităţile semnalelor specifice în Verilog. Se întroduc două clase principale de semnale, fire (nets) şi registre, se dau noţiuni mai detailate numai asupra firelor. Registrele au o utilizare mai specială în specificaţiile comportamentale, de aceia ele vor fi descrise separat.
Deoarece un sistem este compus din două părţi, corp şi interfaţă, de asemenea sânt două tipuri de semnale: interne şi externe. Semnalele interne sunt prezentate în secţiunea 3.
Secţiunea 4 este dedicată semnalelor externe pe care le vom numi porturi. Ele sunt utilizate pentru specificarea interfeţelor sistemelor.



3.2    Introducere în semnale.

3.2.1    Conceptul se semnale.

Procesul de comunicaţie este unul din cele mai importante fenomene în lume deoarece este in proces, în decursul căruia are loc schimbul de informaţie cu diferiţi indivizi.
Comunicarea, întodeauna, implică transmiterea informaţiei de la un emiţător spre un receptor. Indiferent de metodele utilizate, semnalul este prezent în oricare din ele.
Semnalele pot fi de diferită natură, optice, vocale, mecanice, electrice, etc. Indiferent de natura semnalului, totdeauna el poartă careva informaţie.
Ca exemplu de semnale pot fi: optice, spirituale, electrice.

3.2.2    Semnalele în Dispozitivele Electronice.
Comunicaţia există nu numai la creaturile vii. Maşinile la fel pot comunica. De exemplu un senzor de temperatură poate informa un circuit când temperatura a atins un oarecare nivel, şi deci circuitul ca urmare să primească un condiţioner.
Semnalele care sunt transmise între maşini şi dispozitive pot fi de diferite tipuri însă aşa cum e normal de aşteptat dispozitivele electronice operează numai cu semnalele electrice. Prin urmare toate semnalele de la un mediu la altul necesită o transformare în semnale electrice corespunzătoare. În interiorul unui dispozitiv aşa ca PC toate semnalele sunt electrice.

3.2.3    Importanţa semnalelor electrice.
Semnalele electrice joacă un mare rol în procesele ce au loc în dispozitivele electronice. De fapt, fără semnale electrice, un dispozitiv nu se poate numi electric sau electronic.
Fizic, un semnal electric este un flux de electroni care se supune unor anumite legi a fizicii. Însă când scriem un cod Verilog, nu trebuie să ne facem grijă despre aceste legi deoarece sinteza logică şi alte instrumente din domeniu automat vor avea grijă de tratarea fizică a circuitului. Tot de ce avem nevoie este să specificăm funcţionalitatea şi performanţa circuitului, utilizând un set de valori permise a semnalelor.

3.2.4    Valori permise a semnalelor.
Verilog este un limbaj pentru descrierea circuitelor digitale şi foloseşte semnale dintr-un set finit de valori. Numărul de valori necesar pentru specificarea circuitelor digitale este definit. Unele sistemele digitale utilizează seturi de 7, 9, 49  şi 126 valori.
Semnalele în Verilog pot avea doar 4 valori, suportând diferite puteri, necesare considerentelor tehnologice. Puterile sunt în afara conţinutului acestui curs.
Valorile suportate de Verilog sunt:
1 - ,,1’’ logic
0 - ,,0’’ logic
x – necunoscută
z – impedanţă înalta
Cu toate că Verilog este sensibil la registrul literelor, literele x, X şi z, Z au aceleaşi semnificaţii

3.2.5    Operaţii logice pe patru Valori de semnale
Chiar şi cele mai complexe circuite digitale pot fi desfăcute în porţi logice (descrise cu operatori logici). Fiecare proiectant a circuitelor digitale cunoaşte tabelele de adevăr pentru logică booleană bazată pe două valori , nu e chiar atât de clar, însă, care este comportarea acestor porţi când la intrări se aplică valori din setul de 4 valori 0, 1, x, z în afară de cele două obişnuite ,,0’’ şi ,,1’’.
Mai jos vom prezenta tabelele de adevăr pentru acest set de valori.

3.3    Semnale in Verilog
3.3.1    Clase se semnale
Fiecare semnal în Verilog aparţin uneori din clasele fire sau registre.
Firele (nets) reprezintă conexiuni fizice între elementele componente. Ele nu au capacitate de stocare în valoarea lor este determinată de driverul ei (sursa de semnal) sau de nivel de impedanţă înaltă (când firul nu este conectat la vre-o sursă).
Registrele pe de altă parte, sunt capabile să stocheze valori chiar şi în cazul când sunt deconectate. Valoarea adusă atribuită este păstrată până la atribuirea unei noi valori ca rezultat repausul se compară ca variabile în limbajele de programare.
Conceptul de registru în Verilog este diferite de un registru digital, care este construit pe un bistabil pe ceas. Registrele Verilog nu implică semnale de ceas.

3.3.2    Fire (Nets)
Majoritatea semnalelor într-un sistem pot fi clasificate ca fire (Nets), deoarece ele conectează dispozitivele componente în sistem şi sunt generate ca semnale de ieşire a unui dispozitiv. ,,Net’’ nu este un cuvânt cheie în Verilog. Este un nume a unei clase, unui grup de semnale, ce constau în următoarele tipuri:
- Wire şi tri – sunt cel mai frecvent utilizate semnale. Două denumiri diferite sunt propuse în scopuri indicative. Wire va fi utilizat iniţial pentru semnale de la sursă, şi tri pentru fire de la surse multiple.
- Wand / triand ş wor / trion – reprezintă fire (nets) ce presupun operaţiile logice ,,and’’ şi ,,or’’ respectiv. W şi tri au fost precăutate mai sus.
- Supply0, Supply1, tri0, tri1, trireg – usnt fire care au proprietăţi speciale pentru a simplifica specificaţiile de nivel jos aşa ca tranzistor sau tehnologii speciale de realizare a porţilor în acest curs nu vor fi precăutate aceste tipuri.

3.3.3    Specificarea semnalelor
Înainte ca ceva să fie utilizat într-o specificaţie Verilog mai întâi e necesară o declarare La fel este aplicabil şi pentru semnale. Aşa cum am supus mai sus, există două grupuri de semnale interne şi externe (interfaţă). Aici ne vom referi doar la semnalele interne.
Sintaxa declaraţiilor de semnale este foarte simplă: Ea începe cu cuvântul cheie care determină tipul semnalului urmată de numele semnalului. Mai multe semnale de acelaşi tip pot fi declarate împreună. În aşa caz identificatorii sunt separaţi prin virgulă. Declaraţia de semnale se termină cu punct virgulă (;).
Sintaxa lui Verilog permite de a declara semnalele interne oriunde în corpul modulului.
Wire bus1, bus2;

3.3.4    Semnale scalare şi vectori.
Până acum am vorbit numai despre fire singulare.  Un fir simplu (semnal scalar) esre reprezentat de o singură linie, care are o singură valoare logică în orice timp. Ca exemplu poate fi semnalul de ceas care sincronizează toate blocurile într-un sistem.
Mulţi proiectanţi folosesc semnalele de mai multe linii, numite şine (bus) sau vectori, care transmit informaţia comprimată în câteva valori logice. În aşa mod se pot transmite şi recepţiona valori şi coduri mai complexe. Un exemplu bun reprezintă un microprocesor. Când auzim despre un microprocesor pe 32 biţi asta înseamnă că (bus) de date transportă informaţie de câte 32 biţi odată. Toţi biţii sunt individual indexaţi şi gradul de la cel mai neînsemnat spre cel mai semnificativ. Tradiţional cel mai semnificativ bit este cel mai de stânga.




Wire [32:0]adress, [15:0]data;
Wire reset, clock, readwrite;

3.3.5    Specificaţii de vector.
Atunci când declarăm un vector în Verilog nu e nevoie de utilizat un tip special de semnale. De fapt un semnal scalar poate fi considerat un caz particular a unui Vector, care constă dintr-o linie, un fir, unde cel mai semnificativ bit este acelaşi cu cel mai puţin semnificativ.
Declaraţia trebuie specificată cu indecşi când un vector conţine mai mulţi biţi. Verilog permite o indexare flexibilă a biţilor într-un vector. Dacă e nevoie putem utiliza numere negative, zero sau pozitive pentru indexare. Mai mult de cât atât indexul celui mai semnificativ bit poate fi mai mic decât a celui mai puţin semnificativ. Din cauza unui asemenea indexării se poate confunda care este cel mai semnificativ bit.
Pentru a declara un vector, vom plasa indecşii în paranteze pătrate (‘[‘,’]’), şi îi vom separa cu două puncte (:).
Indecşii se plasează între tip şi nume într-un identificator.
Wire [5 : 3] count;
3.4    Semnale Externe (interfeţe)

3.4.1    Semnale interne şi externe.
Semnalele despre care am vorbit până acum au fost semnale interne care erau declarate în interiorul unui modul şi nu erau accesibile din afara lui. Erau deci utilizate pentru definirea corpului modulului.
Multe module, însă, comunică cu mediul extern şi au nevoie de un alt grup de semnale pentru a forma o interfaţă. Aşa semnale se numesc semnale externe, deoarece ele pot fi accesate din afara modulului (din exterior). Desigur aceste semnale pot de asemenea fi accesate din interiorul sistemului, ceia ce în termeni Verilog înseamnă că corpul sistemului poate fi specificat utilizând cât semnale interne atât şi externe.
Diferenţa între semnalele interne şi externe se reflectă în declaraţia lor – toate semnalele interne sunt declarate cu identificatori de semnale iar cele externe ca porturi ale modulului.

3.4.2    Porturile Modulului.
Toate semnalele de interfaţă a unui modul sunt numele porturi ale modulului. Prin aceste porturi modulul comunică cu mediul său extern. Porturile sunt caracterizate prin două proprietăţi: mărimea portului (de un singur bit scalar sau Vector) şi direcţia fluxului de date prin port (intrare, ieşire) fiecare port poate avea oricare din 3 direcţii:
-    input – citeşte datele din mediul sau prin porturile de intrare, nu există posibilitatea de a înscrie în aşa port oricare ar fi sistemul;
-    output – modulul transmite datele către mediul său prin porturile de ieşire, sistemul nu poate citi din asemenea porturi;
-    inout – permite citirea din, sau scrierea în port, un asemenea port mai este numit bidirecţional.

3.4.3    Specificarea porturilor.
Specificarea portului într-un modul constă în două elemente:
- Numele portului se conţine în lista porturilor urmată de numele modulului; lista este inclusă în interiorul parantezelor şi conţine numele tuturor porturilor separate prin virgule. Aceasta se sintetizează ca fir în cazul când modulul este instanţiat într-o specificaţie ierarhică, adică, când este inclus ca un subcomponent.
- Declararea portului specifică: direcţiile lui, mărimea (mărimea vectorului) şi numele portului. Declaraţiile porturilor formează prima parte a declaraţiilor modulului şi vin îndată după declaraţia de modul (header). Declaraţiile de porturi sunt specificate asemănător cu semnalele
;

Însă este o diferenţă importantă specificaţiile de semnal utilizează cuvântul chee pentru a indica tipul semnalului, declaraţia de port utilizează cuvântul chee pentru a indica direcţia portului care poate fi declarată ca input, output sau inout.

3.4.4    Ieşire Registru
Atunci când porturile sint de tip input sau output, implicit Verilog le asumă tipul de semnale wire.
Însă, sunt cazuri când tipul Wire nu specifică pe deplin specificarea semnalului deoarece firele trebuiesc generate (întreţinute, mereu. Altfel ele trec imediat în starea de inpendunţă înaltă. Asemenea comportament este de nedorit pentru majoritatea circuitelor secvenţiale, unde semnalul de ieşire trebuie păstrat la acelaşi nivel până la următorul front a semnalului de ceas, indiferent de schimbarea semnalelor de intrare. Acest lucru se face prin redeclararea portului cu reg. Însă deseori acest lucru este imposibil şi se recurge la alte căi.
Numai porturile de ieşire pot fi regiştri cuvântul cheie reg este utilizat la iniţierea declaraţiei portul de ieşire registru necesită o declaraţie suplimentară a semnalului.
Ex.
module Procesor (Clock, Reset, Read Write, Data, Address);
        input Clock;
        input Reset;
        output Read_Write;
        input [15 : 0] Data;
        output [19 : 0] Address;
        …
        reg [19 : 0] Address;
       endmodule
 

3.5    Test - Semnale
     Să se selecteze afirmaşiile corecte.
1.    Fiecare semnal în Verilog poate avea oricare din patru valori ,,0’’, ,,1’’, ,,x’’, ,,z’’.
2.    ,,x’’ şi ,,z’’ au acelaşi inţeles pentru operatorii logici.
3.    Un fir neconectat are valoarea ,,x’’.
4.    Atunci când un operant a unei operaţii logice este ,,x’’ rezultatul este la fel ,,x’’.
5.    Registrele Verilog îşi schimbă valoarea independent de semnalul de ceas.
6.    Firele sunt declarate cu cuvântul cheie ,,net’’.
7.    Wire şi tri se pot înlocui una pe alta.
8.    Fiecare semnal trebuie declarat separat.
9.    Bitul cel mai de stânga este mereu cel mai semnificativ bit.
10.    Declaraţiile porturilor trebuie să fie prima în declaraţiile de modul.
11.    Lista de porturi conţine numele de porturi şi mărimea lor.
12.    Toate porturile sunt iniţializate iniţial şi mărimea lor.
13.    Orice port poate fi Registru.
14.    Dacă un port este ieşire Registru, nu este posibilă citirea din interior.
15.    Indexul celui mai semnificativ bit în vector poate fi mai mic decât indexul celui mai puţin semnificativ bit.