Logica combinatoria in linguaggio Verilog
Lucidi del Corso di Elettronica DigitaleModulo 7Modulo 7
Università di CagliariDipartimento di Ingegneria Elettrica ed Elettronica
Laboratorio di Elettronica (EOLAB)Laboratorio di Elettronica (EOLAB)
Logica CombinatoriaLogica combinatoria: un blocco di logica in cuile M uscite sono in ogni istante funzione logicale M uscite sono, in ogni istante, funzione logicadegli N ingressi in quell’istante e NON dellastoria passata degli ingressistoria passata degli ingressi
x1x2
y1y2Logica
xN
y2
yM
Logicacombinatoria
xN yM
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 2
Stili descrittivi di logica combinatoriaStrutturale: la funzione viene descritta comeinterconnessione di primitive logiche (and, or, not, nand,p g (nor, etc.). E’ necessario sintetizzare il circuito logico apartire dalla descrizione inizialeDataflow: la funzione viene descritta in termini diDataflow: la funzione viene descritta in termini ditrasformazioni algebriche degli ingressi per mezzo dicontinuous assigments (parola-chiave assign). E’g (p g )necessario sintetizzare il circuito logico a partire dalladescrizione iniziale (come la descrizione strutturale masi usano espressioni algebriche anzi che porte)si usano espressioni algebriche anzi che porte)Algoritmico/RTL: la funzione viene descritta per mezzodi blocchi procedurali (always) in termini algoritmicip ( y ) g(if…else, case, for). Si può partire da una descrizionedescrittiva del sistema senza necessariamente passaredalla sintesi logica
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 3
dalla sintesi logica
Descrizione strutturaleSi basa sull’uso di primitive logiche (AND,NAND OR NOR XOR XNOR BUF NOT) cheNAND, OR, NOR, XOR, XNOR, BUF, NOT) cherappresentano l’equivalente della porta logicadisegnata in uno schematicodisegnata in uno schematico.Tutti i segnali interni ed esterni sono NET( bbi t l i NET di ti i )(abbiamo usato solo i NET di tipo wire)Coincide con una descrizione testuale di unoschematico (l’equivalente di una netlist spicerispetto ad un circuito disegnato)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 4
Descrizione strutturale: esempioVediamo come esempio la descrizione di un half adderhalf-adder
AS
nABnA
S
B AnBnB
C
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 5
Descrizione strutturale: half-adder
module ha(A,B,C,S);input A,B;output C,S;
Ingressi e uscite a singolo bitSegnali interni (interconnessione fra porte)
wire A,B,C,S,nA,nB,nAB,AnB;not n1(nA,A);
fra porte)
not n2(nB,B);and a1(nAB,nA,B);
La parola chiave not indica il tipo di porta
and a2(AnB,A,nB);or o1(S,nAB,AnB); L’assegnazione dei nodi è
posizionale (come in SPICE): iland a3(C,A,B);endmodule
posizionale (come in SPICE): ilprimo segnale della lista èsempre l’uscita
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 6
Istanziazione di una primitiva logicaPer istanziare una primitiva logica, come in spice si scrive una riga (una per componente)spice, si scrive una riga (una per componente)
Tipo di porta Uscita (SEMPRE il primo della lista)Tipo di porta Uscita (SEMPRE il primo della lista)
and a1 (nAB, nA, B);
Nome del’istanza IngressiNome del istanza Ingressi
Il nome dell’istanze può essere omesso, ma è meglio metterlo per hi
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 7
chiarezza
Descrizione strutturaleA differenza di spice TUTTI i nodi interni devono esseredichiarati (subito dopo la definizione delle porte, all’inizio( p pdel modulo). Possono non essere dichiarati solo i wire adimensione di un solo bitPer connettere l’uscita di una porta con l’ingresso diPer connettere l uscita di una porta con l ingresso diun’altra gli si dà semplicemente lo stesso nome
nA nAB ….and a1(nAB nA B);
B Sand a1(nAB,nA,B);
….or o1(S nAB AnB);or o1(S,nAB,AnB);….
Nodo interno: wire
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 8
Descrizione strutturale: primitive
and: porta and (Z=AB)and: porta and (Z=AB)
or: porta or (Z=A+B)
nand: porta nand (Z=(AB)’)
nor: porta nor (Z=(A+B)’)nor: porta nor (Z (A B) )
xor: porta xor (Z=AB’+A’B)
xnor: porta xnor (Z=(AB’+A’B)’)
buf: buffer (Z=A)( )
not: porta not (Z=A’)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 9
Descrizione strutturaleUna descrizione strutturale può fare uso non solo delleprimitive ma anche di altri moduli precedentementep pdefiniti (nello stesso file, o in un altro file che fa partedello stesso progetto).Per istanziare un modulo si procede come per le altrePer istanziare un modulo si procede come per le altreprimitive: prima il nome del modulo, poi il nome dellasingola istanza di quel modulo seguito dalla lista deig q gterminaliCi sono due modi per associare un nodo ad unaparticolare porta di un moduloparticolare porta di un modulo
Posizionale: nella lista conta l’ordine quindi i segnali sonoassociati alla porta corrispondente nella definizione del moduloPer nome: si associano uno per uno i nodi alla portacorrispondente
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 10
Istanziazione di un modulomodule mio_modulo(A,B);input A;
Sottomodulo con 1 ingresso e 1 uscita (per input A;
output B;…..
ingresso e 1 uscita (per i moduli non è obbligatorio che l’uscita
endmodule
module top(X Y Z);
obbligatorio che l uscita sia in prima posizione)
Assegnazionemodule top(X,Y,Z);input X,Y;output Z;
Assegnazione posizionale:cc->A
wire aa,bb,cc,dd;mio_modulo m1(cc,dd);mio modulo m2( B(aa) A(bb));
dd->BAssegnazione per
mio_modulo m2(.B(aa), .A(bb));…endmodule
nome:bb->Aaa->B
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 11
endmodule aa->B
Sottomodulo: esempio
module sommatore(A,B,S);i t [3 0] A B
Ogni segnale internodeve essereinput [3:0] A,B;
output [4:0] S;i [2 0] C
deve essereesplicitamentedichiarato con la sua
wire [2:0] C;wire [3:0] A,B;
i [4 0] S
dimensione (numerodi bit).Q i di di A d diwire [4:0] S;
ha g1(A[0],B[0],C[0],S[0]);f 2(A[1] B[1] C[0] C[1] S[1])
Quindi di A devo diresia che è un ingresso(input) sia che è unfa g2(A[1],B[1],C[0],C[1],S[1]);
fa g3(A[2],B[2],C[1],C[2],S[2]);f 4(A[3] B[3] C[2] S[4] S[3])
(input) sia che è unfilo (wire).Solo i wire a singolo
fa g4(A[3],B[3],C[2],S[4],S[3]);endmodule
bit possono essereomessi
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 12
Descrizione dataflowSi basa sulla definizione algebrica delle uscite rispettoagli ingressi, le uscite sono direttamente definite cong gl’opportuna espressione algebricaIl nome dataflow (flusso di dati) deriva dal fatto che leuscite sono la trasformazione algebrica degli ingressiuscite sono la trasformazione algebrica degli ingressiTutti i segnali interni ed esterni sono NET (in particolareWIRE) il cui valore viene definito tramite un continuousWIRE) il cui valore viene definito tramite un continuousassignmentE’ simile alla descrizione strutturale, le porte logichesono sostituite da operatori logici all’interno diun’espressioneAd esempio per descrivere lo half adder si puòAd esempio per descrivere lo half-adder si puòdescrivere semplicemente l’espressione algebrica chegenera le due uscite a partire dagli ingressi
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 13
Dataflow: operatori logici
&: and fra due bit&: and fra due bit
|: or fra due bit
^: xor fra due bit
~^: xnor fra due bit: xnor fra due bit
~: not di un singolo bit
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 14
Dataflow: half-adder
module ha(A,B,C,S);input A,B;output C,S;wire A,B,C,S;assign C=A&B;
i S (( A)&B)|(A&( B))assign S=((~A)&B)|(A&(~B));endmodule
assign: parola-chiave necessaria per assegnare ad unsegnale (in questo caso di uscita, ma potrebbe essereg ( q , pun segnale interno) una espressione logica funzionedegli ingressi e di eventuali altri nodi interni
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 15
Descrizioni dataflow e strutturaleLe due descrizioni, per come le abbiamoutilizzate sono assolutamente EQUIVALENTIutilizzate, sono assolutamente EQUIVALENTIL’unica informazione che ci danno è infattiquella logica e funzionale ed abbiamo giàquella logica e funzionale ed abbiamo giàverificato che le diverse descrizioni possibili diuna funzione logica sono tutte equivalenti fino ag qche non vengono trasformate in circuiti etransistorPer il momento, anche la descrizione strutturalenon corrisponde a qualcosa di fisico (non èd tt h il i it à i l t t ldetto che il circuito sarà implementato con leporte istanziate)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 16
Descrizione algoritmica/RTLLa descrizione algoritmico/RTL fa uso di istruzioniprocedurali eseguite all’interno di un blocco alwaysprocedurali eseguite all interno di un blocco always(ovviamente NON in un blocco initial in cui le istruzionevengono eseguite una volta sola)Il blocco always quindi, se scritto seguendo opportuneregole, può essere usato per rappresentare un genericobl di l i bi t iblocco di logica combinatoriaLe regole per una corretta implementazione di un bloccocombinatorio sono fondamentali perché si rischia noncombinatorio sono fondamentali perché si rischia, nonseguendole, di rappresentare un blocco completamentedifferente (sequenziale) senza accorgersenedifferente (sequenziale) senza accorgersene
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 17
Always: sensitivity listI blocchi always che implementano logica combinatoriasono leggermente diversi da quelli utilizzati finora nellagg qgenerazione di testbench: la loro esecuzione vieneattivata solo in corrispondenza della variazione di uninsieme di segnali detto sensitivity listinsieme di segnali detto sensitivity listLa sensitivity list viene indicata fra parentesi tonde subitodopo il simbolo @ (at) che segue la parola-chiavep @ ( ) g palways. I nomi dei segnali della lista vengono separatidalla parola chiave or.Nella sensitivity list ovviamente andranno gli ingressiNella sensitivity list, ovviamente, andranno gli ingressialla funzione combinatoria (ogni volta che cambia unoqualsiasi tra gli ingressi devono essere aggiornate leq g g gguscite ossia eseguito l’always)Le uscite del blocco devono essere di tipo reg perchésono assegnate in un blocco procedurale (l’always)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 18
sono assegnate in un blocco procedurale (l’always)
Always: sensitivity listx1x y1x2 y2Logica
CombinatoriaxN yM
…always @(x1 or x2 or x3 … or xn)
Sensitivity list: l’always viene always @(x1 or x2 or x3 … or xn)
begin….
eseguito solo se cambia uno
l i i f iend
…
qualsiasi fra i segnali x1, x2,…, xn
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 19
xn
Always: assegnazione delle uscitex1x y1x2 y2Logica
Combinatoria
always @(x1 or x2 or x3 or xN)
xN yM
Le uscite devonoalways @(x1 or x2 or x3 … or xN)begin….
Le uscite devonosempre essereassegnate altrimenti il
y1= …. ;….
loro valoredipenderebbe dallastoria degli ingressi
yM=…. ;end
storia degli ingressiperché manterrebberoil valore precedente
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 20
il valore precedente
Esempio: half-adderL’implementazione con un always di un blocco combinatorio già implementato in dataflow e strutturale:combinatorio già implementato in dataflow e strutturale:
module ha(A,B,C,S);i t A B
C e S sono reg perché sono assegnati in un blocco proceduraleinput A,B;
output C,S;C S
assegnati in un blocco procedurale
reg C,S;always @(A or B)
begin
La sensitivity list contiene tutti gli ingressi al blocco
beginC=A&B;S=A^B;
L’assegnamento ad un reg NON richiede la parola chiave assignS=A^B;
endendmodule
richiede la parola chiave assign(usata solo per i wire) e viene fatto SOLO dentro un always o un initial
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 21
endmodule initial
Costrutti algoritmiciLa descrizione precedente non ha alcunvantaggio rispetto a quella strutturale e tantovantaggio rispetto a quella strutturale e tantomeno dataflow (anzi, la descrizione dataflow èpraticamente identica, con la sola differenza chep ,le uscite sono wire ed assegnate con unassign)Si ottiene un enorme vantaggio (in semplicità eleggibiltà di descrizione, facilità dii l t i ) f tt d t tti iùimplementazione) sfruttando costrutti piùraffinati che possono essere evidentementeusati solo in un blocco procedurale: if elseusati solo in un blocco procedurale: if…else,case, for
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 22
Istruzione condizionale (if…else)L’istruzione condizionale ha la stessa sintassi del linguaggio C:g gg
if(espressione)blocco1blocco1
elseblocco2
Se espressione è vera viene eseguito blocco1 altrimenti blocco2 (un blocco sono istruzioni racchiuse fra begin…end)
Se espressione è un segnale su N bit allora è vera se ilSe espressione è un segnale su N bit allora è vera se il numero rappresentato è diverso da zero, falsa se il numero è zero o se contiene delle X o Z
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 23
Esempio: multiplexermodule mux2_1(A,B,sel,Z);
input A B sel;Multiplexer: se
l 1 Ainput A,B,sel;output Z;reg Z;
sel=1 passa A altrimenti B
reg Z;always @(A or B or sel)
begin
Tutti gli ingressi sono specificati begin
if(sel)Z=A;
nella sensitivity list;
elseZ=B;
d
In qualsiasi ramo della if l’uscita viene assegnataend
endmoduleviene assegnata
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 24
IF…ELSE combinatorioPerché la struttura if…else implementiveramente della logica combinatoria bisognaveramente della logica combinatoria bisognache per qualsiasi combinazione degli ingressil’uscita (o le uscite) venga SEMPRE assegnatal uscita (o le uscite) venga SEMPRE assegnata.Se esistesse anche una sola combinazione dii i l’ it è tingresso per cui l’uscita non è assegnata,l’uscita stessa, essendo un reg, manterrebbe il
l t d t t i divalore assunto precedentemente quindidipenderebbe dalla storia del circuito (avremmod l i i l NONdunque logica sequenziale e NONcombinatoria)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 25
Esempio: multiplexermodule mux2_1(A,B,sel,Z);
input A B sel;Non è necessarioche ci siano tutti iinput A,B,sel;
output Z;reg Z;
che ci siano tutti irami della if ma chela Z sia semprereg Z;
always @(A or B or sel)begin
assegnata.In questo caso perprima cosa sibegin
Z=B;if(sel)
prima cosa siassegna B a Z e poi,se sel=1, si cambia il( )
Z=A;end
suo valore in A. Unassegnamento vienecomunque eseguito
endmodulecomunque eseguitoper ogni valore degliingressi
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 26
Esempio: multiplexer 4x1module mux4_1(A,B,C,D,sel,Z);
input A B C D;input A,B,C,D;input [1:0] sel;output Z;
always @(A or B or C or D or sel)if(sel[1])output Z;
reg Z;if(sel[1])
if(sel[0])Z=A;;
elseZ=B;
l…. elseif(sel[0])
Z=C;
endmodule
Z=C;else
Z=D;
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 27
endmodule
Istruzione CASESe i casi possibili sono molti più di due si possono usare delle if annidate oppurepossono usare delle if annidate oppure l’istruzione case
case (espressione)val1: blocco1; Se espressione non ricadeval1: blocco1;val2: blocco2;
Se espressione non ricade in uno dei valori elencati si esegue il default (blocco0).…
valN: bloccoN;default: blocco0;
g ( )
default: blocco0;endcase
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 28
Istruzione CASEA seconda del valore di espressione viene eseguito uno dei blocchi di istruzionieseguito uno dei blocchi di istruzioni.Se espressione non ricade in uno dei valori
l ti i il d f lt (bl 0)elencati si esegue il default (blocco0).Il match fra espressione e val è fatto bit a bit tenendo conto dei valori x e z, quindi:
Se val2=2’b01 e espressione=2’b01 eseguo blocco2Se val2=2’b01 e espressione=2’b0x NON eseguo blocco2Se val2=2’b0x e espressione=2’b01 NON eseguo blocco2
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 29
Esempio: multiplexer 4x1module mux4_1(A,B,C,D,sel,Z);
input A,B,C,D;Il default ènecessario perchép , , , ;
input [1:0] sel;output Z;
necessario perchécase confronta ibit considerando
h i l i Xreg Z;always @(A or B or C or D or sel)
( l)
anche i valori X eZ ed in questocaso non abbiamocase (sel)
2’b00: Z=D;2’b01: Z=C;
specificato azioniquando i bitassumono tali;
2’b10: Z=B;2’b11: Z=A;default: Z=A;
assumono talivalori (quindi nonabbiamodefault: Z=A;
endcaseendmodule
specificato tutte lecombinazioni diingresso)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 30
endmodule ingresso)
Istruzione CASEXL’istruzione casex permette di non specificare tutti i casi e raggruppare insiemi di casi in cuitutti i casi e raggruppare insiemi di casi in cui viene eseguita la stessa operazione
L diff lcasex (espressione)
val1: blocco1;
La differenza col casenormale consiste nelfatto che in valN sival1: blocco1;
val2: blocco2;fatto che in valN sipossono specificaregruppi di bit come X o…
valN: bloccoN;default: blocco0;
g ppZ ed in tal caso queibit non vengono
id ti (d ’tdefault: blocco0;endcase
considerati (don’tcare)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 31
Istruzione CASEXA seconda del valore di espressione viene eseguito unodei blocchi di istruzioni.dei blocchi di istruzioni.Se espressione non ricade in uno dei valori elencati siesegue il default (blocco0).g ( )Il match fra espressione e val è fatto bit a bit ma unvalore di X o Z viene interpretato come don’t care(qualsiasi valore abbia quel bit l’espressione corrispondese corrispondono gli altri bit)
S l2 2’b01 i 2’b01 bl 2Se val2=2’b01 e espressione=2’b01 eseguo blocco2Se val2=2’b01 e espressione=2’b0x NON eseguo blocco2Se val2=2’b0x e espressione=2’b01 ESEGUO blocco2Se val2 2 b0x e espressione 2 b01 ESEGUO blocco2
Il match avviene per qualsiasi valore di questo bit
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 32
valore di questo bit
Esempio: priority encodermodule pri_enc(A, Z);
input [1:0] A;Il priority encoder è uncodificatore che prendeinput [1:0] A;
output Z;reg Z;
codificatore che prendein ingresso N bit e mettein uscita M=log2N bith t lreg Z;
always @(A)casex (A)
che rappresentano lacodifica di quale bit diingresso è attivo (alto).( )
2’b1x: Z=1;2’b01: Z=0;d f lt Z
g ( )I bit di ingresso hannopriorità quindi se quelloa priorità massima è 1default: Z=x;
endcaseendmodule
a priorità massima è 1,a prescindere dal valoredegli ingressi si mette inendmoduleuscita la sua codifica
E’ utilizzato nella gestione delle interrupt17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 33
interrupt
Istruzione FORLa for equivale alla corrispondente istruzione C esegue cioè un certo numero di istruzioni per un determinatocioè un certo numero di istruzioni per un determinato numero di volte
for (i=start; espressione; i=newexpr)begin…end
La variabile i non può essere né un wire né un reg ma deve essere di tipo integer.Finché espressione è vera viene eseguito il blocco e viene valutato il nuovo valore di i con newexpr
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 34
Istruzione FORIl numero di iterazioni nel ciclo for deve esserepredeterminato a priori e NON può dipendere daipredeterminato a priori e NON può dipendere daisegnali di ingresso, altrimenti non avremmo logicacombinatoriaPoiché il ciclo for è troppo simile ad un istruzione dilinguaggio di programmazione deve essere usato con
lt tt i hé ò f il t d lmolto attenzione perché può facilmente dar luogo adescrizioni inesatte di logica combinatoria (gli sonopreferibili i costrutti if else e case)preferibili i costrutti if..else e case)Praticamente l’unico caso in cui useremo i cicli forsaranno i testbench (modulo 8) ossia i moduli usati persaranno i testbench (modulo 8) ossia i moduli usati perverificare il funzionamento di un modulo (è utile pergenerare tutte le possibili combinazioni di ingresso)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 35
Esempio: priority encodermodule pri_enc(A, Z);
input [7:0] A; K è un integerinput [7:0] A;output [2:0] Z;reg [2:0] Z;
K è un integer
Z èreg [2:0] Z;integer K;always @(A)
Z è sempre assegnato
y @( )begin
Z=3’bx;f (K 0 K 8 K K 1)
I bit più significativi di A hanno prioritàfor(K=0;K<8; K=K+1)
if(A[K])Z=K;
hanno priorità maggiore
Z=K;end
endmodule
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 36
endmodule
Descrizione algoritmica: sottomoduliNon è detto che l’intero blocco combinatorio debbaessere descritto con un unico always, è anche possibile
ddi id hi t il d l i tt d lisuddividere gerarchicamente il modulo in sottomoduli,ciascuno dei quali può a sua volta essere un moduloseparato o semplicemente un always dentro il modulottop
Modulo 1 Modulo 3I1I2
O1int1int2
M d l 2
int3
I3
Modulo 0Modulo 2I4 O2
3
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 37
Sottomodulimodule m1(A,B,X,Y);…endmoduleI1 O1
int1i t2 endmodule
module m2(A,B,X,Y);…
Modulo 1 Modulo 3I2O1int2
int3…endmodule
module m3(A,B,C,X);Modulo 0
Modulo 2I4 O2I3
odu e 3( , ,C, );…endmodule
d l 0(I1 I2 I3 I4 O1 O2)Ad esempio, si possono
module m0(I1,I2,I3,I4,O1,O2);…m1 g1(I1,I2,int1,int2);m2 g2(I3,I4,int3,O2);
p pscrivere 3 moduli, uno perogni sottomodulo, e
tt li i i l g ( , , , );m3 g3(int1,int2,int3,O1);…endmodule
metterli insieme nelmodulo top (m0)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 38
Sottomodulimodule m0(I1,I2,I3,I4,O1,O2);…I1 O1
int1i t2
always @(I1,I2)begin
Modulo 1 Modulo 3I2O1int2
int3…end
always @(int1 int2 int3)Modulo 0
Modulo 2I4 O2I3
always @(int1, int2, int3)begin…end
■ Oppure si può scrivere ununico modulo contenente 3
always @(I3,I4)begin
unico modulo contenente 3always differenti, uno per ognisottomodulo.■ La sensitivity list del singolo …
end…endmodule
■ La sensitivity-list del singoloalways contiene solo gliingressi al sottomodulo
ifi i l t t
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 39
specifico implementato
Espressioni: operatori
Aritmetici (2 operandi, risultato su N bit) + (somma) (Es 5+2=7)+ (somma) (Es. 5+2=7)- (sottrazione)* (moltiplicazione)(moltiplicazione)/ (divisione)
Bitwise (bit a bit) (2 operandi, risultato su N bit)~ (negazione) (Es. ~(0100)= 1011)& (and) (Es. (0111)&(1101)= 0101)| (or)^ (xor)^ (xor)~^,^~ (xnor)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 40
Espressioni: operatori
Riduzione (1 operando, risultato su 1 bit)& (and) (Es &(01101)=0 &(1111)=1)& (and) (Es. &(01101)=0 , &(1111)=1)~& (nand)| (or) (Es |(0101)=1 |(0000)=0)| (or) (Es. |(0101)=1 , |(0000)=0)~| (nor), ^ (xor)~^,^~ (xnor), ( )
Logici (2 operandi, risultato 1 bit)! (negazione logica) (Es. !3 è falso, !0 è vero)&&, || (and e or di due espressioni)==,!= (uguaglianza e disuglianza di espressioni, se
un operatore contiene x o z risulta falsa)un operatore contiene x o z risulta falsa)===,!== (uguaglianza e disuguaglianza con verifica
bit a bit dei valori x e z)
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 41
bit a bit dei valori x e z)
Espressioni: operatori
Relazionali (2 operandi, risultato 1 bit) < (minore)< (minore)<= (minore uguale)> (maggiore)(maggiore)>= (maggiore uguale)
Shift (2 operandi, risultato su N bit) >> (shift destro) (Es. 0110>>2 = 0001)<< (shift sinistro) (Es 0110<<1 = 1100)<< (shift sinistro) (Es. 0110<<1 = 1100)(i bit inseriti negli shift destro e sinistrosono sempre 0 per uno shift devo indicare di quantisono sempre 0, per uno shift devo indicare di quantibit voglio shiftare )
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 42
Espressioni: operatori
Condizionale (3 operandi, risultato è un’espressione)(espressione)?S1:S2(espressione)?S1:S2se espressione è vera valuta S1 altrimenti S2Esempio:Esempio:Z=(sel==1)?A:B; (multiplexer, se sel=1 assegna A
altrimenti B))Concatenazione
{,} concatena i due vettoriE i Z {A B}Esempio: Z={A,B};
Replica{int{ }} ripete int volte un certo vettore{int{ }} ripete int volte un certo vettoreEsempio: Z={3{A}} -> Z={A,A,A}
17 Novembre 2009 ED - Verilog combinatorio Massimo Barbaro 43