joi, 10 februarie 2011

Capitolul II

2.    Un sistem şi reprezentarea lui în Verilog

2.1    Privire generală
Verilog a fost elaborat pentru descrierea circuitelor şi sistemelor digitale. De aceea vom începe cu o introducere în reprezentarea unui sistem.
Mai întâii în secţiunea 2 vom da nişte noţiuni generale a unui sistem. Verilog tratează un sistem ca o cutie neagră (black box) cu o interfaţă. De asemenea vom precăuta noţiunile de bază a reprezentării sistemelor, numite module Verilog.
În secţiunea următoare (secţiunea 3) vom precăuta structura modulelor Verilog, care include elemente şi statutul de bază pentru nume de module şi alte obiective Verilog. Aici vom învăţa cum putem documenta proiectul prin comentarii.
Şi în sfârşit în secţiunea 4) vom da enunţul diferitor metode de specificare black box. Sunt 3 tipuri principale de specificări a modulelor: 1) structural; 2) comportamental; 3) transfer de date. Aici vom da o privire generală a descrierii acestor specificaţii de sistem. O descriere mai detaliată va fi prezentată în următoarele capitole.



2.2    Anatomia sistemului

2.2.1    Sistem, circuit, modul
HDL este utilizat pentru descrierea sistemelor electronice. Se referă în general la sisteme cu cantităţi. Deşi un HDL poate fi apreciat la un sistem non-electronic, acesta este în afara acestui curs. Când un sistem electronic nu este prea complicat de obicei este numit circuit deci vom utiliza ambele noţiuni ca echivalente.
Dicţionarul Oxford descrie un sistem ca un grup de lucruri ori părţi componente care funcţionează după o relaţie regulată. Specificaţia unui sistem împreună poate descrie elementele lui şi relaţiile dintre ele. Aici vom prezenta cum se fac specificaţiile unui sistem în Verilog. Specificaţiile care se vor referi la sisteme sunt şi modulele Verilog.

Hard disc                               Auto pilot
  module hard_disc          module autopilot
  …………                        …………..
  …………                         ………….
  endmodule                        endmodule

Telefon                                 Procesor
module Phone                  module procesor
  ………….                     ………………
  ………….                     …………….
  endmodule                        endmodule

2.2.2    Comunicarea sistemelor cu mediul.
Indiferent de funcţiile sistemului el primeşte date de intrare de la mediul lui şi returnează datele cu răspuns. Cu alte cuvinte sistemul trebuie să comunice cu mediul său.
Acea reacţiune a specificaţiei sistemului care se referă la comunicare se numeşte interfaţă. Fără o interfaţă sistemul va fi inutil – numai imaginitativă cel mai puternic calculator fără keyboard, mouse sau monitor. E clar că interfaţa are o mare importanţă.

2.2.3        Corpul unui sistem.
Pentru ca un sistem să funcţioneze, informaţia sau datele lui trebuie să se supună unor transformări în sistem. Aceste transformări şi implementarea funcţiilor dorite sunt descrise în Verilog în corpul sistemului, care este specificat de declaraţiile modulului.
Funcţionalitatea modulului poate fi atât de simplă ca conectare sau deconectarea unui întrerupător; sau atât de complicată ca un autopilot la bordul unui jetliner. Totuşi, în orice caz un sistem este compus din corp (body) şi interfaţă (interface).
2.2.4    Suport extern.
Unele sisteme pot căpăta calităţi adăugătoare prin elemente de suport. Un bun exemplu de elemete de suport este o cartelă plug – în care se accelerează operaţiile grafice a unui PC.
Aşa cum o cartelă devine o parte a unui sistem cînd este inserată, ea este specificată separat. Prin urmare, inserarea cartelei în PC este reprezentată în Verilog cu o includere a specificaţiei cartelei în specificaţia PC-ului.
2.2.5    Interfaţa şi corpul sistemului în modulul Verilog.
Întrucât un modul Verilog reprezintă un sistem, este evidentă şi reprezentarea interfeţei şi corpului posibilitatea sistemului.
Porturile modulului, care sunt incluse în paranteze după numele modulului, reprezintă interfaţa. O descriere mai detaliată este sub headezul modulului. Această descriere conţine informaţii despre direcţiile portului şi tipul acestuia.
Corpul sistemului trebuie specificat după declaraţia de porturi. Deoarece necesităţile voastre pot varia, puteţi prefera să specificaţi într-un mod mai optimal pentru aplicaţii algoritmice sau strucuturale, utilizând primitive sau operatorii şi expresii, etc. Toate aceste metode de specificare vor fi precăutate în rectiliniile următoare.
2.3    Structura unui modul

2.3.1    Definirea unui modul
Un modul (module) este construcţia de bază în Verilor. El poate specifica un sistem de cea mai mare complexitate – de la un singur tranzistor până la blocuri. Indiferent de complexitatea lui, specificaţia modului are tot timpul aceiaşi structură.
Fiecare modul începe cu cuvântul cheie module urmat de numele modulului şi se termină cu alt cuvânt cheie endmodule (fără spaţiu între ,,end’’ şi ,,module’’). Între aceste două cuvinte cheie sunt localizate trei elemente care au fost introduse în secţiunile precedente:
-    interfaţa constă în declaraţia de porturi şi parametrii lor.
-    corpul – specificaţia părţii interne a modulului.
-    opţional componente adăugătoare; specificate undeva în modul cu directiva de compilator include
2.3.2    Numele modulului
Numele de modul formal numit identificator serveşte pentru ţeluri documentale, Bazându-ne pe asta, cu nume de modul putem utiliza un cuvânt sau mai multe care descrie mai bine ce face sistemul. Pentru ca să fie mai citeţ folosim litere mari şi mici, de exemplu FastBynaryCntr.
Fiecare identificator în Verilog inclusiv numele de modul trebuie să respecte următoarele reguli:
-    el trebuie să fie compus din litere, cifre, semn dolar ($) şi caracterul sublinie (_);
-    poate să înceapă cu o literă sau semnul (_);
-    nici un spaţiu în identificator;
-    literele mari şi mici sunt diferite;
-    cuvintele rezervate nu pot fi utilizate ca identificator.
Caracterele escape permit utilizarea a altor caractere şi cuvinte cheie în interiorul numelui de modul însă nu este recomandabilă utilizarea lor deoarece codul devine nu prea citeţ.

2.3.3    Comentarii în Verilog
Un design nu se socoate prea bun dacă nu este bine documentat, o documentare bună este nu numai câteva pagini de descriere, dar şi comentariile în interiorul specificaţiei. Este veridic faptul cît pentru limbajele de programare, cât şi pentru limbajele de descriere HDL, inclusiv Verilog. Verilog oferă două tipuri de comentarii:
Comentarii de o linie şi blocuri de comentarii. Comentariile de o linie încep cu dublu slash (//) şi se termină cu sfârşitul liniei.
Blocurile de comentarii încep cu slash asterisc (/*) şi se termină cu asterisc urmat de slash (*/). Ele se pot extinde pe mai multe linii şi pot conţine în interior chiar şi comentariile de o linie.
Comentariile pot fi localizate practic oriunde cu excepţia: în interiorul unui identificator sau a unui cuvânt cheie.

2.3.4    Descrierea unui sistem
Documentarea proiectului reprezintă unul din cele mai importante puncte forte în proiectarea Verilog. Ea este reflectată de construcţia bogată a limbajului şi de descrierea sistemului inclusă de obicei la începutul fiecărui fişier Verilog.
Descrierea in acest limbaj deseori nu cere o documentare amănunţită. Totuşi, este pe larg acceptat ca o specificaţie Verilog bună, trebuie la fel de bine documentată.
Nu există un oarecare standard fix de a documenta un sistem însă careva elemente de bază trebuie de avut în vedere. Pentru a scrie o documentaţie profesională e recomandabil de a consulta documentaţia unde este descris cum se face acest lucru.

2.3.5    Interfaţa Modului
Declaraţia de interfaţă a modului are două componente:
-    lista porturilor; lista conţine numai numele de porturi şi este specificată în paranteze după numele modului;
-    declaraţia porturilor; reprezintă primul grup de declaraţii într-un modul. Toate porturile sunt descrise aici în detaliu (declarate). Declaraţia specifică direcţia parcurgerii datelor prin port şi mărimea lui.
Pe lângă numele de porturi trebuie ca fiecare din ele să fie descris şi preferabil comentat cu o linie de comentariu. O descriere mai detailată a interfeţelor de module va fi prezentată mai târziu (secţiunea 3.4)
2.4    Stiluri de cod.

2.4.1    Un limbaj mai multe stiluri de cod
Circuitele de diferită complexitate ( de la placă de siliciu şi un singur tranzistor până la sisteme complete) cer diferite tipuri de specificare.
Ce este specific pentru un circuit mic, poate fi imposibil de aplicat într-un sistem care constă din mii de porţi. De exemplu, fiecare circuit în special cel cu nivel înalt de abstracţie poate fi specificat conform structurii sale interne (adică interconexiuni între blocuri de nivele fost sau comportamentului lui şi nu are legătură cu structura sa internă.
Reieşind din posibilităţile de construcţie a limbajului Verilog orice circuit poate fi specificat prin câteva metode:
•    Utilizând primitive şi instanţe de modul de nivel jos (stil structural)
•    Specificând semnalele de ieşire după o transformare a semnalelor de intrare (stil flux de date)
•    Specificând algoritmic comportamentul circuitului. (stil comportamental)

 2.4.2    Stil structural
Specificaţiile Verilog în stil structural reprezintă implementarea fizică a circuitelor la nivel de poartă şi mai sus. Seamănă cu desenarea schemotehnică continuând componente interconectate şi semnale.
Componentele într-o specificare structurală pot fi privite sau instanţe de modul. Unele fiind componente mai simple de tipul bistabile (sau blocuri de complexitate mică), şi altele de o complexitate mai înaltă.
O schimbare a oricărui semnal de intrare a componentului activează componentul. Dacă două sau mai multe componente concomitent ele sunt activate la fel concomitent adică în procese concurate.
Stilul structural a unui modul va fi examinat mai târziu în capitolul 4.

2.4.3    Stil flux de date (Data Flow)

Un circuit poate fi specificat prin descrierea unei relaţii care transformă intrările atribuind valori diferite ieşirilor. Asemenea specificare se numeşte stil flux de date (Data Flow). În acest stil circuitele nu sunt specificate prin componente interconectate cu semnale interne dar se exprimă prin o poartă de ieşire şi expresii care transformă valorile de intrare către ieşirile dorite.
Expresiile pot fi bazate pe un set (platformă) de operatori de tipul operatorilor logici, operatori pe biţi, rotire, aritmetici, condiţionali de concatenare etc. Toţi aceştia pot fi aplicaţi în expresii de atribuire făcând stilul de flux date mai universal decât ecuaţiile logice.
Mai pe larg stilul flux de date va fi analizat mai târziu în cap. 5.

2.4.4    Stil comportamental

Printre cele trei stiluri de cod, stilul comportamental este cel mai avansat şi mai flexibil. El este apropiat de cel utilizat în limbajule de programare deoarece conţine relaţii secvenţiale  şi oferă combinaţii cu relaţii condiţionale de tipul if, de selecţie – case şi cicluri.
Stilul comportamental descrie un circuit din punct de vedere a comportamentului lui, adică acţiunilor la care este supus când este activ. Acţiunile sunt specificate în blocurile iniţial şi always care sunt compuse din comportamentale relativ secvenţiale sau concurente. Pentru a scrie o specificaţie comportamentală a unui circuit deseori e destul de a  descrie o descriere obişnuită în programare în echivalentul său Verilog, urmând sintaxa specifică limbajului.
Acestea se va prezenta în cap. 6

2.5    Test – Module
         Să se selecteze afirmaţiile corecte:
1.    Fiecare sistem şi circuit în Verilog este specificat ca modul.
2.    Componentele adăugătoare (odd-on) trebuie specificate chiar la începutul modulului.
3.    Fiecare port inclus în listă trebuie descris.
4.    Un identificator nu poate să conţină semnul dolar $.
5.    Un identificator trebuie să înceapă cu o literă sau o cifră.
6.    ,,MyDes’’ şi ,,mydes’’ sunt identificatori diferiţi pentru un simulator Verilog.
7.    Comentarii de o linie blocuri de comentarii nu pot fi incluşi în acelaşi modul.
8.    Un comentariu de tip bloc este identic cu comentariul de o linie însă se termină înaintea sfârşitului liniei.
9.    Lista de porturi conţine numele şi tipul lor.
10.    O primitivă este un component cu o interfaţă şi comportament specificat.
11.    Stilul flux de date este o denumire Verilog pentru ecuaţii logice.
12.    O specificaţie comportamentală este inclusă în blocuri ,,Iniţial’’ şi ,,Always’’.
13.    Relaţiile de atribuire definesc ieşirea după o transformare a intrărilor.
14.    Orice modul poate fi utilizat ca instanţă în alte module.
15.    Orice stil de cod este la fel de bun pentru sinteză.