+ All Categories
Home > Documents > Tutorial Verilog

Tutorial Verilog

Date post: 14-Jul-2015
Category:
Upload: marceliny
View: 482 times
Download: 0 times
Share this document with a friend

of 45

Transcript

Lab1-OC A: Tutorial de Verilog. B: Introducere in FPGA-uri. Plci Altera DE2

Part A: Tutorial de Verilog1. Introducere1.1. Ce este Verilog-ul ? 1.2. Cateva caracteristici 1.3. Modelarea unui system digital cu Verilog 1.3.1. Modelul flux de date 1.3.2. Modelarea comportamentala 1.3.3. Modelarea structurala 1.3.4. Modelarea mixt

2. Elemente si artificii ale limbajului Verilog HDL prezentate prin exemple2.1. Modulul Verilog 2.2. Atribuiri de tip blocking i non-blocking 2.3. Tipuri de date 2.3.1. Tipuri net 2.3.2. Tipuri variabil 2.3.3. Diferena ntre reg i wire 2.3.4. Semnale pe mai muli bii 2.4. Operatori Verilog HDL 2.5. Clauza initial 2.6. Instruciuni procedurale 2.6.1. Instruciuni decizionale 2.6.2. Instruciuni repetitive 2.6.3. Instruciuni de tip bloc secvenial 2.7. Alte tipuri de instruciuni 2.8. Funcii i task-uri Verilog HDL 2.9. Task-urile i funciile sistem

3. Verificarea i simularea unui design Verilog HDL3.1. Modelarea ntrzierilor 3.2. Modulul de test (testbench)

Copyright @ Oana Boncalo & Alexandru Amaricai

Part A: Tutorial de Verilog

Obiective: dobndirea unor cunostine de baz prinvind modelarea sistemelor digitale folosind limbajul de descriere hardware Verilog. n cele ce urmeaz, prezentul material ofer o descriere succint a principalelor noiuni (subset Verilog) n vederea modelrii i sintezei unor sisteme digitale de complexitate medie.

1. Introducere1.1. Ce este Verilog-ul ? Verilog-ul este un limbaj de descriere hardware (HDL) care permite modelarea unui sistem digital la diferite niveluri de abstractizare: algoritmic, comportamental, port logic, nivelul comutator (switch level). Acesta se bucur de o mare popularitate n rndurile designerilor de hardware i a productorilor de tool-uri CAD. Din acest considerent, Verilog HDL a fost transformat ntr-un standard IEEE, ultima aciune de acest tip concretizndu-se prin standardul IEEE 1364-2001.

1.2. Cteva caracteristiciO scurt enumerare a principalelor trsturi ale limbajului Verilog HDL cuprinde: Primitive logice elementare, precum pori logice and, or i nand sunt definite n cadrul limbajului; Este un standard IEEE; Permite trei stiluri diferite de modelare: flux de date, comportamental, i structural; Prezint dou tipuri de date: net-ul care modeleaz conexiunea fizic ntre elementele de structur (firul/traseul fizic) i tipul variabil (un element de memorare al informatiei abstract); Permite mai multe niveluri de abstractizare, pornind de la nivelul comutator, la nivelul poart logic, nivelul transfer la nivel de regitri (register transfer level RTL), la nivel de algoritm; Pot fi scrise entiti de test (testbench-uri) i generai stimuli pentru procesul de verificare a designurilor; Trsturi precum execuia concurent i ntrzierile (timpul) pot fi modelate;

Copyright @ Oana Boncalo & Alexandru Amaricai

Faciliti de manipulare a fiierelor;

1.3. Modelarea unui sistem digital folosind Verilog HDLExist mai multe stiluri de a modela un sistem n Verilog. Elementul central in Verilog este constituit de noiunea de modul. Acesta poate fi folosit pentru a modela att elemente simple, ct i sisteme complexe. n esen un design Verilog complex poate fi asimilat cu o multitudine de module interconectate, reprezentnd subansamblele sale. n cadrul unui modul se pot ntalni urmtoarele stiluri de modelare: Modelarea sub form de flux de date; Modelarea comportamental; Modelarea structural; Modelarea mixt; Acestea vor fi succint prezentate prin nite exemple n cele ce urmeaz. 1.3.1. Modelul flux de date Mecanismul care este folosit pentru modelul flux de date se bazeaz pe instruciunea assign, de atribuire continu. Aceasta realizeaz evaluarea continu (reevalueaz expresia de fiecare dat cnd unul dintre operanzi i modific valoarea) a expresiei din dreapta egalului, i atribuie noua valoare unui net (vector de tip net). n dreapta putem avea att tipul net ct si tipul variabil. Sintaxa este urmtoarea: assign [delay] tipul_net = expresie; Specificarea unei ntrzieri este opional. Ea trebuie s fie precedat de o directiv de compilator care asociaz o unitate de timp. Aceasta apare naintea declaraiei de modul. `timescale 2ns/1ns Aceast directiv stabilete c unitatea de timp este egal cu 2 ns i c se lucreaz cu o precizie de 1 ns (toate ntrzierile sunt rotunjite la 1 ns). Aadar un exemplu de atribuire continu este urmtorul: assign #2 a=b; Atribuie lui a valoarea lui b cu o ntrziere de 2 cuante de timp (pentru directiva timescale din exemplul anterior dup 4 ns). Atribuirea continu reprezint o modalitate natural de modelare a logicii combinaionale. Operanzii corespunztori n exemplul urmtor este prezentat codul Verilog HDL pentru o celul sumator complet cu 3 intrri de date i dou ieiri. De asemenea sunt prevzute ntrzieri pentru operaiile logice din celula de nsumare.

Copyright @ Oana Boncalo & Alexandru Amaricai

s = a b cin

cout = ab + acin + bcin

Figura 1: Celul sumator pe 1 bit. Cod Verilog HDL pentru modelul de tip flux de date Operanzii corespunztori acestiu tip de descriere sunt de nivel jos: Atribuire condiionat: (expresie_condiie)? (valoare?adevrat): (valoare_fals); Ex.: assign out= sel? in1: in2; Operatori logici: ~, &, |, ^ (negare, i, sau, xor); Operatori aritmetici: +, +, *;

Exist i posibilitatea folosirii de construcii ncuibate. Trebuie insistat asupra faptului c aceste instruciuni se execut concurent (nu conteaz ordinea n care au fost scrise, ele bucurndu-se de calitatea de execuie paralel, - aspect similar cu execuia portilor logice dintr-un design hardware).

Copyright @ Oana Boncalo & Alexandru Amaricai

1.3.2. Modelarea comportamental Are la baz construcii de tip always. Acestea permit o descriere de nivel nalt a comportamentului unui dispozitiv hardware prin folosirea unor instruciuni care se execut secvenial similare cu cele ntlnite n limbajul C precum cele de decizie (if, case), repetitive (for, while), etc.. Exist dou tipuri de blocuri de cod Verilog HDL care sunt executate secvenial: initial este executat o singur dat, de regul la instanierea unei componente de tipul celei definite de modulul n care se afl blocul initial. Rolul lui este de a realiza o iniializare a componentei; always folosit pentru a descrie comportamentul unui dispozitiv (pri a acestuia) hardware; Pentru a exemplifica acet tip de modelare vom folosi acelai dipozitiv celula de nsumare complet.

Figura 2: Celul sumator pe 1 bit. Cod Verilog HDL pentru modelarea comportamental O clauz always trebuie s fie prevzut cu un fel de control pentru timp. Acesta poate fi reprezentat fie de ntrzieri (wait ateapt un interval de timp), fie de producerea unui eveniment (wait ateapt modificarea unui semnal din lista de senzitiviti). n lipsa acestora, codul este executat la infinit. Foarte important este i cuvntul cheie reg. Acesta nu face referire la regitri ntlnii n calculul digital. Acetia din urm i modific valoarea sincron cu un semnal de tact.Copyright @ Oana Boncalo & Alexandru Amaricai

Registri reg Verilog HDL nu necesit tact, nu li se induce o valoare ntr-un mod analog firelor fizice, i i pot modifica valoarea n orice moment al simulrii. n Verilog HDL, cuvntul cheie reg denot o variabil care poate memora o valoare la un moment dat. 1.3.3. Modelarea structural Verilog HDL suport pori logice elementare (primitive): and, nand, or, nor, xor, xnor, not, buf cu intrri multiple nanad3in(out, in1, in2, in3); buif1 i buif0 sunt bufere de tip tristate;

Copyright @ Oana Boncalo & Alexandru Amaricai

Figura 3: Celul sumator pe 1 bit. Cod Verilog HDL pentru modelarea structural Acestea sunt instaniate n componentele unui design, i sunt conectate prin net-uri. Acestea se declar folosind cuvntul cheie wire. Reprezint analogul firelor/traseelor din design-urile fizice. 1.3.4. Modelarea mixt De multe ori in descrierea HDL este folosita o abordare mixta, care presupune folosirea a oricror doua modaliti de descriere hardware n cadrul unui modul. n cele ce urmeaz extindem exemplul cu celula de nsumare pentru modelarea mixt.

Figura 4: Celul sumator pe 1 bit. Cod Verilog HDL pentru modelarea mixt

Copyright @ Oana Boncalo & Alexandru Amaricai

Dac instanierea altor tipuri de subsisteme declarate prin alte module nu ridic probleme, este important de realizat diferena dintre o atribuire la un reg, i o atribuire la un wire. Astfel aceast diferen este punctat n cele ce urmeaz: Pentru reg atribuirea se face la fiecare execuie a codului (de regul dintr-o clauz always); aadar ea este condiionat de apariia evenimentului dorit la unul sau mai multe semnale de gard (front cresctor de tact, modificarea palierului unui semnal funcie de realitatea modelat); Pentru wire atribuirea/evaluarea expresiei din dreapta este una continu;

Exemplele prezentate n aceast seciune i-au propus s realizeze o scurt trecere n revist a unui sub-set din trsturile i posibilitile oferite de Verilog HDL pentru descrierea dispozitivelor logice.

2. Elemente i artificii ale limbajului Verilog HDL prezentate prin exemple 2.1 Modulul VerilogReprezint unitatea de structur n Verilog HDL. Acesta prezint urmtoarea sintax: module nume_modul (list_porturi); declaraii_i_instruciuni endmodule Lista de porturi definete interfaa unui modul maniera prin care comunic cu exteriorul. Porturile pot fi de trei tipuri: Intrare input Ieire output Bidirecionale inout Un port este n mod implicit de tip net (reamintim c tipul net este asimilat unei conexiuni fizice vezi seciunea 2.3.1). Opional (dac este folosit n cadrul unei construcii always) porturile de ieire pot si declarate de tip reg. Declaraiile de porturi se pot face n cadrul listei de porturi, fir pot constitui parte a modulului (module port declaration style versus module port list style). n cele ce urmeaz cele dou stiluri vor fi exemplificate pentru a se evidenia diferenele. n Verilog HDL, pentru claritate i lizibilitate este proferabil s sie folosit module port declaration style, ntruct att porturile ct i tipurile de date sunt specificate ntr-un singur loc. Din punct de vedere al corectitudinii codului, cele dou tipuri de realizare a declaraiilor sunt echivalente.Copyright @ Oana Boncalo & Alexandru Amaricai

Figura 5: Exemplificarea modalitiilor de realizare a declaratiei porturilor unui modul. module port declaration style versus module port list style Verilog HDL ofer i posibilitatea parametrizrii designurilor, prin declararea unei liste de parametri afereni modulului. Acest lucru este convenabil pentru descrierea unor elemente de tip regitri, sumatoare, numrtoare, etc.. module nume_modul # (parameter param1=valoare1, param2=valoare2, ... parameter param3=valoare3, ...) (list_porturi); declaraii_i_instruciuni endmodule Un exemplu pentru folosirea parametrilor este prezrntat n cele ce urmeaz:

Figura 6: Exemplificarea modalitilor de realizare a parametrilor unui modul n continuare este prezentat modul n care se face instanierea unui modul. nume_modul nume_instan(list_asocieri_porturi); Asocierea porturilor din list se poate face implicit, prin poziia semnalelor asociate, sau explicit printr-o construcie de forma (prin nume):Copyright @ Oana Boncalo & Alexandru Amaricai

.nume_port(expresie_care_se_asociaz) Aceast expresie poate fi o variabil sau un net, un cmp sau sub-ir dintr-un ir, o concatenare a celor anterior precizate, sau o expresie (numai pentru porturile care sunt de intrare). Trebuie avut n vedere, faptul c nu este admis folosirea simultan n cadrul aceleiai instane a asocierii poziionale cu cea bazat pe nume. De asemenea, asocierea prin poziie reclam respectarea ntocmai a ordinii i tipului expresiilor asociate porturilor. Atribuirea prin poziie, admite schimbarea ordinii expresiilor asociate porturilor n raport cu declaraia de modul. n Verilog HDL porturile neconectate rmn: Nefolosite dac sunt de ieire; Conectate la valoarea z dac sunt de intrare; n continuare este prezentat un exemplu pentru un sumator de tip ripple carry pe 4 bii. Acesta folosete celula de nsumare descris n seciunea 1, modificat astfel nct s permit un parametru de timp ntrzierea pentru o poart logic.

a)

b) Figura 7: Sumator cu propagarea serial a transportului (ripple carry adder) a- schem bloc; b- structur sumator

Copyright @ Oana Boncalo & Alexandru Amaricai

a)

b) Figura 8: Sumator cu propagarea serial a transportului (ripple carry adder) a- modul care descrie celula de nsumare; b- modul care descrie sumator cu propagarea serial a ntrzierii. Exemplu pentru diferitele modaliti de realizare a instanierii. Ca i ultim remarc, Verilog HDL este foarte flexibil n ceea ce privete declararea i instanierea unui modul, oferind fiecrui programator posibilitatea de a-i organiza codul astfel nct s fie ct mai accesibil cu putin. Totui, este recomandat ca declaraiile s

Copyright @ Oana Boncalo & Alexandru Amaricai

fie grupate pe ct, i instanierile s fie realizate folosind specificarea prin nume mai clar, care nltur pericolul asocierii greite prin poziie a semnalelor. 2.1. Clauza always - Atribuiri de tip blocking i non-blocking Clauza always reprezint principalul mecanism de modelare comportamental a unui sistem digital. Un modul poate conine un numr arbitrar de astfel de declaraii. O declaraie always definete un black-box, i conine descrierea comportamentului unui sistem prin instruciuni procedurale (similare limbajului C - if, case, for, while, etc.). care se execut in-order similar cu un cod scris ntr-un limbaj de nivel nalt. Aadar, nu trebuie pierdu din vedere faptul c dei n interiorul unui bloc always instruciunile sunt executate secvenial (n ordinea n care sunt scrise), n interiorul modulului, instruciunile sunt executate concurent. always [control_timp] construcie_procedural O clauz always trebuie s fie prevzut cu un fel de control pentru timp. Acesta poate fi reprezentat fie de ntrzieri (wait ateapt un interval de timp), fie de producerea unui eveniment (wait ateapt modificarea unui semnal din lista de senzitiviti). n lipsa acestora, codul este executat la infinit. Cea mai folosit construcie procedural este blocul secvenial de tip - begin end. Lista de senzitiviti definete semnalele care determin execuia unui always. Aceasta poate fi sensibil la front (cresctor sau descresctor), sau la palierul unui semnal (pozitiv sau negativ). Este important de precizat c o list de sensitiviti nu permite att semnale care sunt sensibile la front ct i semnale sensibile la palier. Aceast diferen este deosebit de important n contextul circuitelor secveniale. Pentru logica combinaional regula este simpl i anume se vor trece n aceast list toate semnalele care produc o modificare a ieirilor. Realizm o scurt clasificare a principalelor elemente constructive secveniale: Latch-uri sunt asincrone i evalueaz n mod constant intrrile; Flip-flop-urile (FF) sunt sincrone cu un semnal extern (tact) i pot s fie sensibile pe: o front o palier Regitri sunt o colecie de FF. Cu toate c latch-urile sunt folosite pentru a construi regitri (configuraie master-slave), ele apar rareori ca elemente de sine stttoare n cadrul unui design digital. Atribuirile de tip blocking, respectiv non-blocking sunt deosebit de uzitate n descrierea circuitelor digitale folosind Verilog HDL (dar se regsesc sub forme similare i n alte limbaje de descriere hardware, precum VHDL-ul) prin construcii de tip always. Diferena dintre cele dou tipuri este cel mai uor de scos in relief n descrierea logicii

Copyright @ Oana Boncalo & Alexandru Amaricai

secveniale. Din aceste considerente, n ceea ce urmeaz, exemplele vor viza n special circuitele secveniale. Atribuirea de tip: Blocking uziteaz de operatorul = i presupune evaluarea i actualizarea imediat (instantanee) a valorii variabilei din stnga egalului;

Non-blocking uziteaz de operatorul


Recommended