Sunteți pe pagina 1din 31

Introducere n Verilog

Introducere
Scopul HDL: De a descrie circuitul la nivel algoritmic (ca n cazul limbajului c) i la nivel de pori logice (e.g. poart SI) Simulare Sintez Cuvintele sunt mai bune dect imaginile

Lexic

Comentarii:

Dou tipuri:
// Comentariu

/* Aaceste comentarii se
extind pe mai multe linii. Utile pentru invalidarea codului la depanare */

Setul de caractere:

0123456789ABCD..YZabcd...yz_$ Identificatorii nu pot ncepe cu $

Tipuri de date

Valorile datelor: Conexiuni (Wire)


Sunt sintetizate n conexiuni Folosite n descrieri structurale

module sample (a,b,c,d); input a,b; output c,d; wire [7:0] b; reg c,d; integer k;

0,1,x,z

Reg
Pot fi sintetizate n registre, bistabile sau conexiuni Folosite n descrieri procedurale

Intregi (Integer) Input, Output, Inout

Pe 32 bii folosii pentru indeci

Definesc porturile unui modul (implicit conexiuni)

Valori

0: valoare logic 0 sau condiie fals; 1: valoare logic 1 sau condiie adevrat; x: valoare logic necunoscut; z: stare de nalt impedan.

Numere

Numerele sunt definite prin numrul de bii


baza 2: desemnat de litera b sau litera B; baza 8: desemnat de litera o sau litera O; baza 10: desemnat de litera d sau litera D; baza 16: desemnat de litera h sau litera H.

[dimensiune] `<baza_de_numeratie> <valoare>

Valoarea lui 23: 5b10111 5d23 5h17

Numere ntregi

13 numrul 13 exprimat n baza 10 (n binar 1101) -13 numrul -13 exprimat n baza 10 (n binar, pe 5 bii 1011, iar pe 6 bii 10011) 4'b1010 numrul 10 exprimat n binar pe 4 bii 12'o327 numr exprimat pe 12 bii n baza 8 16'hBEEF numr exprimat pe 16 bii n baza 16 -8'd3 numr exprimat legal ca fiind complementul fa de 2 al numrului pozitiv 3, reprezentat pe 8 bii (echivalent cu 8'b1111_1101) 16 'h DEAD form legal cu spaii ntre dimensiune i caracterul ' i ntre baz de numeraie i valoare 8'b101 numr exprimat n baza 2 reprezentat pe 8 bii ca 8'b00000101

Numere ntregi

'b1010 form legal, dimensiunea poate lipsi (numrul este reprezentat pe numrul maxim de bii, n acest caz 4'hFF numr exprimat n baza 16 reprezentat pe 8 bii 8'b0000_0101 numr echivalent cu forma anterioar (caracterele _ sunt ignorate) 3'b0110_0101 numr echivalent cu 3'b101 (caracterele din stnga sunt trunchiate dac valoarea are mai muli bii dect dimensiunea precizat explicit) 8'b0_11_0_0101 folosire legal a caracterului de subliniere pentru delimitare 8'd260 numr echivalent cu 4 n baza 10 (provenit din trunchierea caracterului cel mai semnificativ al reprezentrii n binar 9'b1_0000_0100.) 8'bx valoare nedefinit extins pe 8 bii xxxxxxxx 4'bz valoare z extins pe 4 bii zzzz
8

Numere ntregi
Forme ilegale

8'd-3 numr exprimat ilegal (valoarea nu poate fi negativ) 4' b0010 form ilegal cu spaii ntre caracterul ' i baza de numeraie width'b1010 form ilegal, dimensiunea nu poate fi un parametru sau o expresie 8'b_0110_0101 folosire ilegal a caracterului de subliniere la nceputul valorii

Numere reale
Numere zecimale (cu virgul)

Exemple: 3.14, -0.268, 11.1512

Numere n format tiinific (cu exponent)

Exemple: 3.1415E2 (314,15), 1.0E 3 (1000), 5E-3 (0,005), 1_234.567_89,

Forme ilegale

5.3E-3, 5

Numerele reale nu sunt sintetizabile. Numerele reale sunt automat convertite la numere ntregi prin rotunjire.

10

Valorile datelor

Constante:

wire [3:0] t,d; assign t = 23; assign d= 4b0111;

Parameteri:

parameter n=4; wire [n-1:0] t, d; `define Reset_state = 0, state_B =1, Run_state =2, finish_state = 3; if(state==`Run_state)

11

Tipuri de date

Tipul net: Acest tip de date modeleaz o conexiune fizic ntre elementele structurale. Valoarea unei date de acest tip este determinat de sursa sa, care poate fi o specificaie de atribuire continu assign sau o instaniere de component. Dac nu exist nici o surs (driver de semnal) atunci data de tip net pstreaz valoarea implicit z. Cel mai folosit tip din aceast categorie este tipul wire.

12

Tipuri de date Verilog predefinite

Tipul register: Acest tip de date modeleaz un element abstract de stocare a datelor. Valorile obiectelor de acest tip pot fi atribuite din interiorul specificaiilor always i initial. Valoarea implicit a acestui tip de date este x. Tipul de date reg modeleaz caracteristicile hardware care permit unei valori logice s fie memorate ntr-un circuit bistabil sau circuit de zvorre (latch) Un reg este o abstracie pentru un element de memorare hardware dar nu corespunde direct unui element fizic de memorie. Dimensiunea implicit este 1 bit.
13

Tipuri de date Verilog predefinite

Net (conectivitate)

(11 tipuri) wire, tri, wand, wor, triand, trior, supply0, supply1, tri0, tri1, trireg

Register (memorare)

(5 tipuri) reg, integer, real, time, realtime

Observaie: Net i register nu sunt cuvinte rezervate n Verilog.

14

Tipuri de date Verilog predefinite

wire stabilete conexiuni, fr comportament logic sau funcionalitate implicat tri - stabilete conexiuni, fr comportament logic sau funcionalitate implicat. Are aceeai funcionalitate ca si wire dar este identificat distinctiv pentru a indica o conexiune hardware tri-state wand o legatur care are mai multe surse. Modeleaz cazul hardware ce presupune implementri de tip SI cablat (wired and), ex. tehnologia colector n gol (open collector)

15

Tipuri de date Verilog predefinite

wor - o legatur care are mai multe surse. Modeleaz cazul hardware ce presupune implementri de tip SAU cablat (wired or), ex. tehnologia emitori cuplai. triand -o legatur cu mai multe surse. Modeleaz cazul hardware SI cablat. Legtura este de tip tri-state trior - o legatur cu mai multe surse. Modeleaz cazul SAU cablat. Legtura este de tip tristate

Tipuri de date Verilog predefinite

supply0 o legtur global legat la masa circuitului supply1 o legtur global care este legat la sursa de alimentare tri0 o legtur legat la mas printr-o conexiune de tip pulldown tri1 o legtur legat la sursa de alimentare printr-o conexiune de tip pullup trireg o legtur care modeleaz sarcina stocat ntr-o conexiune fizic

Tipuri de date Verilog predefinite


reg memoreaz o valoare logic integer utilizat pentru calcule time memoreaz timpul sub forma unei mrimi fr semn reprezentat pe 64 de bii real memoreaz valorile (ex. ntrzieri) ca numere reale realtime memoreaz valorile timpului ca numere reale

Operatori

Verilog are un set robust de operatori pentru manipularea diferitelor tipuri de date Folosii:

n partea dreapt a expresiilor de atribuire continu i instruciuni procedurale n expresii booleene n instruciuni condiionale sau cu operatori condiionali

Operatori

Operator Aritmetic Pe bit Reducere Logic Relaional Deplasare Condiional

Argument 2 operanzi 2 operanzi 1 operand 2 operanzi 2 operanzi 1 operand 3 operanzi

Rezultat cuvnt binar cuvnt binar bit valoare boolean valoare boolean cuvnt binar expresie

Operatori aritmetici
+ - adunare * - nmulire, - - scdere / - mprire, % - Modulo

Operatori pe bit (bitwise)


~ - Nu (Not): ~5b11001 ==> 5b00110

^ - SAU EXCLUSIV (XOR) 5b11001 ^ 5b01101 ==> 5b10100 & - SI (AND) : 5b11001 & 5b01101 ==> 5b01001 | - SAU (OR): 5b11001 | 5b01101 ==> 5b11101 ~^ sau ^~ - SAU EXCLUSIV negat (echivalen) (XNOR): 5b11001 ~^ 5b01101 ==> 5b01001

Operatori de reducere

Operatorii unari ce ntorc o valoare pe 1 bit & : SI (AND) | :SAU (OR) ~& : SI-NU (NAND) ~| : SAU-NU (NOR) ^ : SAU-EXCLUSIV (XOR) &(010101)=0 |(010101)=1 ~&(010101)=1 ~|(010101)=0 ^(010101)=1

~^ : SAU-EXCLUSIV negat (XNOR)~^(010101)=0

Operatori logici

ntorc 1sau 0, consider toate valorile diferite de 0 ca fiind 1


! : NU (NOT) && : SI (AND) || : SAU (OR) '==: Egalitate !=: Inegalitate ===: Egalitate tip case !==: Inegalitate tip case !0==>1 !1==>0 !45==>0 27 && -3 ==> 1 27 || -3 ==> 1 27 == -3 ==> 0 27 == 27 ==> 1 27 != -3 ==> 1 27 1= 27 ==> 1 (10xx==10xx)==>x (10xx===10xx)==>1

Operatorii egalitate i inegalitate tip case sunt folosite pentru a determina dac dou cuvinte sunt identice la nivel de bit inclusiv biii care au valorile x i z.

Operatori (exemple)
reg [3:0] a, b, c, d; wire[7:0] x,y,z; parameter n =4; //operatori aritmetici c = a + b; d = a *n; //operatori logici If(x==y) d = 1; else d =0; //operatori la nivel de bit d = a ~^ b; //operatori logici i de reducere if ((x>=y) && (z)) a=1; else a = !x;
25

Operatori relaionali

<: mai mic <=: mai mic sau egal >: mai mare >=: mai mare sau egal

26

Operatori de deplasare

>>: deplasare la dreapta


1011_0011 >> ==> 0101_1001 1011_0011 >> 3==>0001_0110 1011_0011 << ==> 0110_0110 1011_0011 << 3==>1001_1000

<<: deplasare la stnga


27

Operatori condiionali

Implementeaz instruciuni de tip if-then-else

(cond) ? (rezultat cond adevarat) : (rezultat cond fals) X=(A==B) ? A:B; wire[15:0] bus_a= drive_bus_a ? data: 16'bz Efect drive_bus_a =1 drive_bus_a =0 drive_bus_a =x pune data pe bus_a pune bus_a pe stare de nalt impedan pune bus_a ntr-o stare nedeterminat

28

Operatori de concatenare
Construiete un singur cuvnt din doi sau mai muli operanzi. Util n a realiza magistrale

{ } (concatenare)

A=1011 B=0001 {A,B } ==>1011_0001

{ n{element} } (replicare de n ori a unui element)

{ 3{1011} } ==> 1011_1011_1011

29

Operatori (exemple)
module sample (a, b, c, d); input [2:0] a, b; output [2;0] c, d; wire z,y; // operatori de reducere assign z = ~| a; c = a * b; // opertori relationali If(a==b) d = 1; else d =0; operatori pe bit d = a ~^ b;
//operatori relationali si de reducere if ((a>=b) && (z)) y=1; else y = !x; // operatori de deplasare assign d << 2; //operator de concatenare assign {carry, d} = a + b; assign c = {2{carry},2{1b0}}; // c = {carry,carry,0,0} //operatori conditionali assign c= (inc==2)? a+1:a-1;
30

Precedena operatorilor
Nivel nalt Operator Unari Adunare, Scdere Deplasare Relaionali Sczut Condiionali Simbol +-!~ +<< >> < <=.... ?:
31

nmulire, mprire,modulo */%