Sunteți pe pagina 1din 13

Calculatoare Numerice 2 Introducere in limbajul Verilog

3. Verilog Concepte de baza


3.1 Conventii de sintaxa - sunt asemanatoare conventiilor limbajului procedural C - liniile de cod Verilog contin o serie de semne(eng. token), de exemplu: comentarii, delimitatoare, numere, siruri de caractere, etc - limbajul Verilog face diferenta intre caractere mici si mari (eng. case sensitive) => Spatii libere - spatiu gol \b - linie noua \n - tabulator \t => Comentarii - o linie de comentariu incepe cu grupul // - mai multe linii de comentarii incep cu grupul /* si se termina cu */ Exemple: a = b & c; //Comentariu pe o linie /*Comentariu pe mai multe linii*/ /* Comentariu /* GRESIT */ */

Calculatoare Numerice 2 Introducere in limbajul Verilog => Operatori - unari preced operandul - binari apar intre doi operanzi - ternari folosesc doi operanzi care separa trei operatori Exemplu: a = ~b; //~ = operator unar, b = operand a = b & c; //& = operator binar, b si c = operanzi a = b ? c : d; //? = operator ternar, b si c =operanzi => Moduri de specificare a constantelor numerice Exista doua moduri de specificare: a. cu specificarea dimensiunii fizice Sintaxa: <dimensiune>'<baza><numar> <dimensiune> = constanta numerica ce reprezinta dimensiunea in biti a numarului <baza> = poate fi: - zecimala se specifica 'd' sau 'D' - hexazecimala se specifica 'h' sau 'H' - octala se specifica 'o' sau 'O' - binara se specifica 'b' sau 'B' <numar> = numarul este specificat prin cifre consecutive, corespunzatoare bazei alese

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: 4'b1111 12'habc 16'd255 //Numar pe 4 biti specificat in binar //Numar pe 12 biti specificat in hexazecimal //Numar pe 16 biti specificat in baza 10

b. fara specificarea dimensiunii fizice - in acest caz numerele se considera implicit specificate in baza 10 - dimensiunea implicita a variabilei este dependenta de compilatorul Verilog folosit (>32 biti) Exemplu: 17862 //numar zecimal pe 32 biti 'hA98 //numar hexazecimal pe 32 biti 'o34 //numar octal pe 32 biti => Valorile speciale X si Z - constanta simbolica X semnifica o valoare necunoscuta (in binar, poate fi 0 sau 1) - constanta simbolica Z semnifica starea de inalta impedanta Exemplu: 12'h34x 6'hx 32'bz //numar pe 12 biti, specificat in hexazecimal, //avand ultimii 4 biti necunoscuti //numar pe 6 biti //numar pe 32 biti avand starea de inalta //impedanta

Calculatoare Numerice 2 Introducere in limbajul Verilog => Numere negative - se noteaza cu semnul minus in fata dimensiunii numarului - nu se accepta semnul minus intre <baza> si <numar> Exemplu: -6'd3 8'd-4 //numar negativ pe 6 biti, stocat in complement fata de 2 //specificare GRESITA

=> Siruri - sirul este o secventa de caractere de 1 octet incadrata de ghilimele duble - un sir nu poate fi scris pe mai multe linii Exemplu: Hello world! a / b //sir de caractere //un alt sir de caractere

=> Identificatori si cuvinte cheie - un identificator reprezinta un nume dat unui obiect pentru a fi referit in proiect - un identificator este alcatuit din caractere alfanumerice, _, $ si nu poate incepe cu o cifra sau cu $ Exemplu: reg value; //reg = cuvant cheie, value = identificator input clk; //input = cuvant cheie, clk = identificator

Calculatoare Numerice 2 Introducere in limbajul Verilog

3.2 Tipuri de date


Pentru a modela cat mai fidel functionalitatea circuitelor hardware, Verilog accepta 4 valori logice. Valoare logica 0 1 X Z Starea circuitului digital Zero logic, valoare FALS Unu logic, valoare ADEVARAT Valoare necunoscuta Inalta impedanta, valoare flotanta pe intrare

Fire Sunt folosite pentru conectarea elementelor de circuit. La fel ca in circuitele reale, nivelul logic aflat pe firele de legatura este in permanenta dat de iesirile conectate pe aceste fire. Exemplu: b c g1 a

Calculatoare Numerice 2 Introducere in limbajul Verilog Firul a este conectat la iesirea portii AND g1, astfel ca valoarea logica aflata pe a este incontinuu data de relatia b & c. - firele sunt declarate in Verilog cu ajutorul cuvantului cheie wire - implicit dimensiunea unui fir (latimea) este de 1 bit, insa se pot specifica vectori - daca nu este conectat la o iesire, un fir are implicit valoarea logica Z //declararea unui fir numit a pentru //circuitul din fig.X.X wire b,c; //declararea a doua fire b, c pentru circuitul //din fig.X.X wire d = 1'b0;//firul d este fixat la valoarea logica 0 //la declarare Registri Registrii sunt elemente de memorare care isi pastreaza valoarea inscrisa pana la o noua scriere. - registrul Verilog NU este acelasi cu registrul alcatuit din bistabili master-slave (nu are nevoie de un semnal de tip ceas) - valoarea logica aflata in registru se modifica oricand printr-o simpla atribuire - spre deosebire de un fir, un registru nu trebuie conectat la iesirea unui alt circuit - registrii Verilog se declara cu ajutorul cuvantului cheie reg - valoarea implicita a unui registru este X Exemplu: wire a;

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: reg reset; //declararea unei variabile 'reset' initial begin reset=1'b1; //initializeaza 'reset' cu '1' #100 reset=1'b0; //dupa 100 unitati de timp, 'reset' //devine '0' end Vectori Atat datele de tip 'reg' cat si 'wire' pot avea dimensiuni mai mari ca 1; implicit dimensiunea lor este 1 (scalar). Exemplu: wire a; //'fir' declarat implicit cu dimensiunea 1 wire [7:0] bus; //magistrala de 8 biti wire [31:0] busA, busB;//doua magistrale cu dimensiunea de //32 biti reg clock; //registru declarat implicit scalar //(dimensiunea 1) reg [0:40] virtual_addr; //registru vectorial cu //dimensiunea de 41 biti

Calculatoare Numerice 2 Introducere in limbajul Verilog Vectorii se declara astfel: [valoare_maxima:valoare_minima] [valoare_minima:valoare_maxima] Conventia la declarare este ca in stanga se afla intotdeauna cel mai semnificativ bit al vectorului. Se pot adresa portiuni din datele vectoriale astfel: //bitul 7 al magistralei busA //trei dintre cei mai putini semnificativi biti //ai magistralei 'bus', 'bus[0:2]' este GRESIT, //bitul semnificativ trebuie sa se afle in stanga virtual_addr[0:1] //doi dintre cei mai semnificativi biti //ai magistralei virtual_addr Variabile 'integer', 'real' si 'time' Variabilele intregi se declara folosind cuvantul cheie 'integer'. Desi se poate declara alternativ o variabila de tip 'reg', 'integer' este preferat in scopuri ca numararea. - dimensiunea implicita a variabilei 'integer' este depedenta de platforma pe care ruleaza compilatorul Verilog, dar este >=32 biti - spre deosebire de 'reg', 'integer' stocheaza numere cu semn busA[7] bus[2:0]

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: integer counter; //'counter' este declarat ca variabila //intreaga de uz general initial counter=-1; //in 'counter' se stocheaza valoarea '1' Variabile de tip 'real' (virgula mobila) - se specifica in notatie zecimala (de ex. '3.14') sua stiintifica (de ex. '3e6' 3 x 10 6) - numerelor reale nu li se pot specifica dimensiuni - valoarea implicita este 0 Exemplu real delta; //variabila reala numita 'delta' initial begin delta=4e10; //atribuire folosind notatia stiintifica delta=2.13; //atribuire folosind notatia zecimala end integer i; initial i=delta; //i ia valoarea 2 (numarul 2.13 a fost //rotunjit la 2)

Calculatoare Numerice 2 Introducere in limbajul Verilog Variabila de tip 'time' Orice simulare in limbajul Verilog se face in raport cu timpul de simulare. - timpul de simulare este stocat intr-un tip special de registru, care se declara folosind cuvantul cheie 'time' - timpul curent de simulare este preluat cu directiva '$time' - dimensiunea registrului pentru timp este >= 64 biti - utilizatorul stabileste relatia intre unitatile de timp de simulare si timpul real Exemplu time save_sim_time; //se declara o variabila de tip 'time' initial save_sim_time=$time;//se salveaza timpul curent de //simulare Siruri (eng. arrays) - pot fi declarate ca siruri variabile de tip 'reg', 'integer' si 'time', NU si variabile de tip 'real' - nu se pot declara in Verilog siruri multidimensionale - diferenta intre siruri si vectori: un vector este o variabila cu latimea declarata 'n', un sir este format din multiple elemente care pot avea dimensiunea 1n

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: integer count[0:7]; //sir de 8 variabile de tip 'integer' reg bool[31:0]; //sir de 32 de variabile pe 1bit time chk_point[1:100]; //sir de 100 variabile de tip 'time' reg [4:0] port_id[0:7]; //sir de 8 'port_id'; fiecare //'port_id' are lungimea de 5 biti integer matrix[4:0][4:0];//declaratie GRESITA NU se //admite sir multidimensional Count[5] chk_point[100] port_id[3] //elementul al 5-lea din sirul 'count' //elementul 100 din sirul chk_point de tip //'time' //al 3-lea element din sirul port_id; //valoare pe 5biti

Memorii In Verilog se pot modela memorii de tip RAM si ROM, acestea fiind simple siruri de variabile tip 'reg'. - un element al unui astfel de sir se numeste cuvant de memorie (eng.word) - pentru a adresa un cuvant din memorie se foloseste adresa acestuia pentru a indica pozitia in sir

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: reg mem1bit[0:1023]; //memorie de 1000 de cuvinte de //dimensiune 1bit reg [7:0] membyte[0:1023]; //memorie de 1000 cuvinte de //8bit (1 octet) membyte[511] //se adreseaza 1 octet aflat la adresa 511 Constante Verilog permite utilizarea constantelor definite prin cuvantul cheie 'parameter'. - valorile de tip 'parameter' nu se pot folosi ca variabile - aceste valori se pot rescrie la intializarea unui modul Exemplu: parameter port_id=5; //defineste constanta port_id parameter cache_line_width=256; Siruri de caractere Sirurile de caractere se stocheaza in variabile de tip 'reg'. - un caracter intr-un sir ocupa 1 octet - dimensiunea variabilei 'reg' trebuie sa fie cel putin egala cu lungimea sirului - daca dimensiunea variabilei > dimensiunea sirului, variabila este completata cu zerouri la stanga sirului de caractere - daca dimensiunea sirului > dimensiunea variabilei, Verilog trunchiaza caracterele aflat cel mai in stanga

Calculatoare Numerice 2 Introducere in limbajul Verilog Exemplu: reg [8*18:1] string_value; //variabila cu dimensiunea de 18 //octeti initial string_value=Hello Verilog World; Caractere speciale Caracter 'escape' \n \t %% \\ / \ooo Caracter afisat linie noua tabulator % \ caracter afisat pe 1-3 cifre octale

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