Logica combinatoria in linguaggio Verilog -...

22
Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Elettronica (EOLAB) Logica combinatoria in linguaggio Verilog Lucidi del Corso di Elettronica Digitale Modulo 8 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 2 Logica Combinatoria Logica combinatoria: un blocco di logica in cui le M uscite sono, in ogni istante, funzione logica degli N ingressi in quell’istante e NON della storia passata degli ingressi x 1 x 2 x N y 1 y 2 y M Logica combinatoria

Transcript of Logica combinatoria in linguaggio Verilog -...

Page 1: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

Università di CagliariDipartimento di Ingegneria Elettrica ed Elettronica

Laboratorio di Elettronica (EOLAB)

Logica combinatoria in linguaggio Verilog

Lucidi del Corso di Elettronica Digitale

Modulo 8

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 2

Logica Combinatoria

Logica combinatoria: un blocco di logica in cui le M uscite sono, in ogni istante, funzione logica degli N ingressi in quell’istante e NON della storia passata degli ingressi

x1

x2

xN

y1y2

yM

Logicacombinatoria

Page 2: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3

Stili descrittivi di logica combinatoria

Strutturale: la funzione viene descritta come interconnessione di primitive logiche (and, or, not, nand, nor, etc.). E’ necessario sintetizzare il circuito logico a partire dalla descrizione inizialeDataflow: la funzione viene descritta in termini di trasformazioni algebriche degli ingressi per mezzo di continuous assigments (parola-chiave assign). E’necessario sintetizzare il circuito logico a partire dalla descrizione iniziale (come la descrizione strutturale ma si usano espressioni algebriche anzi che porte)Algoritmico/RTL: la funzione viene descritta per mezzo di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva del sistema senza necessariamente passare dalla sintesi logica

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 4

Descrizione strutturale

Si basa sull’uso di primitive logiche (AND, NAND, OR, NOR, XOR, XNOR, BUF, NOT) che rappresentano l’equivalente della porta logica disegnata in uno schematico.

Tutti i segnali interni ed esterni sono NET(abbiamo usato solo i NET di tipo wire)

Coincide con una descrizione testuale di uno schematico (l’equivalente di una netlist spicerispetto ad un circuito disegnato)

Page 3: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 5

Descrizione strutturale: esempio

Vediamo come esempio la descrizione di un half-adder

A

B

S

C

nAB

AnBnB

nA

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 6

Descrizione strutturale: half-adder

module ha(A,B,C,S);

input A,B;

output C,S;

wire A,B,nA,nB,nAB,AnB;

not n1(nA,A);

not n2(nB,B);

and a1(nAB,nA,B);

and a2(AnB,A,nB);

or o1(S,nAB,AnB);

and a3(C,A,B);

endmodule

Ingressi e uscite a singolo bit

Segnali interni (interconnessione fra porte)

La parola chiave not indica il tipo di porta

L’assegnazione dei nodi èposizionale (come in SPICE): il primo segnale della lista èsempre l’uscita

Page 4: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 7

Istanziazione di una primitiva logica

Per istanziare una primitiva logica, come in spice, si scrive una riga (una per componente)

and a1 (nAB, nA, B);

Tipo di porta

Nome del’istanza

Uscita (SEMPRE il primo della lista)

Ingressi

Il nome dell’istanze può essere omesso, ma è meglio metterlo per chiarezza

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 8

Descrizione strutturale

A differenza di spice TUTTI i nodi interni devono essere dichiarati (subito dopo la definizione delle porte, all’inizio del modulo). Possono non essere dichiarati solo i wire a dimensione di un solo bitPer connettere l’uscita di una porta con l’ingresso di un’altra gli si dà semplicemente lo stesso nome

B

nA nAB

S

….and a1(nAB,nA,B);

….or o1(S,nAB,AnB);….

Nodo interno: wire

Page 5: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 9

Descrizione strutturale: primitive

and: porta and (Z=AB)

or: porta or (Z=A+B)

nand: porta nand (Z=(AB)’)

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’)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 10

Descrizione strutturale

Una descrizione strutturale può fare uso non solo delle primitive ma anche di altri moduli precedentemente definiti (nello stesso file, o in un altro file che fa parte dello stesso progetto).Per istanziare un modulo si procede come per le altre primitive: prima il nome del modulo, poi il nome della singola istanza di quel modulo seguito dalla lista dei terminaliCi sono due modi per associare un nodo ad una particolare porta di un modulo

Posizionale: nella lista conta l’ordine quindi i segnali sono associati alla porta corrispondente nella definizione del moduloPer nome: si associano uno per uno i nodi alla porta corrispondente

Page 6: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 11

Istanziazione di un modulo

module mio_modulo(A,B);input A;output B;…..endmodule

module top(X,Y,X);input X,Y;output Z;wire aa,bb,cc,dd;mio_modulo m1(cc,dd);mio_modulo m2(.B(aa), .A(bb));…endmodule

Sottomodulo con 1 ingresso e 1 uscita (per i moduli non èobbligatorio che l’uscita sia in prima posizione)

Assegnazione posizionale:cc->Add->B

Assegnazione per nome:bb->Aaa->B

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 12

Sottomodulo: esempio

module sommatore(A,B,S);input [3:0] A,B;output [4:0] S;wire [2:0] C;wire [3:0] A,B;wire [4:0] S;ha g1(A[0],B[0],C[0],S[0]);fa g2(A[1],B[1],C[0],C[1],S[1]);fa g3(A[2],B[2],C[1],C[2],S[2]);fa g4(A[3],B[3],C[2],S[4],S[3]);endmodule

Ogni segnale interno deve essere esplicitamente dichiarato con la sua dimensione (numero di bit).Quindi di A devo dire sia che è un ingresso (input) sia che è un filo (wire).Solo i wire a singolo bit possono essere omessi

Page 7: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 13

Descrizione dataflow

Si basa sulla definizione algebrica delle uscite rispetto agli ingressi, le uscite sono direttamente definite con l’opportuna espressione algebricaIl nome dataflow (flusso di dati) deriva dal fatto che le uscite sono la trasformazione algebrica degli ingressiTutti i segnali interni ed esterni sono NET (in particolare WIRE) il cui valore viene definito tramite un continuousassignmentE’ simile alla descrizione strutturale, le porte logiche sono sostituite da operatori logici all’interno di un’espressioneAd esempio per descrivere lo half-adder si può descrivere semplicemente l’espressione algebrica che genera le due uscite a partire dagli ingressi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 14

Dataflow: operatori logici

&: and fra due bit

|: or fra due bit

^: xor fra due bit

~^: xnor fra due bit

~: not di un singolo bit

Page 8: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 15

Dataflow: half-adder

module ha(A,B,C,S);

input A,B;

output C,S;

wire A,B,C,S,nA,nB,A1,A2;assign C=A&B;

assign S=((~A)&B)|(A&(~B));

endmodule

assign: parola-chiave necessaria per assegnare ad un segnale (in questo caso di uscita, ma potrebbe essere un segnale interno) una espressione logica funzione degli ingressi e di eventuali altri nodi interni

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 16

Descrizioni dataflow e strutturale

Le due descrizioni, per come le abbiamo utilizzate, sono assolutamente EQUIVALENTIL’unica informazione che ci danno è infatti quella logica e funzionale ed abbiamo giàverificato che le diverse descrizioni possibili di una funzione logica sono tutte equivalenti fino a che non vengono trasformate in circuiti e transistorPer il momento, anche la descrizione strutturale non corrisponde a qualcosa di fisico (non èdetto che il circuito sarà implementato con le porte istanziate)

Page 9: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 17

Descrizione algoritmica/RTL

La descrizione algoritmico/RTL fa uso di istruzioni procedurali eseguite all’interno di un blocco always(ovviamente NON in un blocco initial in cui le istruzione vengono eseguite una volta sola)

Il blocco always quindi, se scritto seguendo opportune regole, può essere usato per rappresentare un generico blocco di logica combinatoria

Le regole per una corretta implementazione di un blocco combinatorio sono fondamentali perché si rischia, non seguendole, di rappresentare un blocco completamente differente (sequenziale) senza accorgersene

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 18

Always: sensitivity list

I blocchi always che implementano logica combinatoria sono leggermente diversi da quelli utilizzati finora nella generazione di testbench: la loro esecuzione viene attivata solo in corrispondenza della variazione di un insieme di segnali detto sensitivity listLa sensitivity list viene indicata fra parentesi tonde subito dopo il simbolo @ (at) che segue la parola-chiave always. I nomi dei segnali della lista vengono separati dalla parola chiave or.Nella sensitivity list, ovviamente, andranno gli ingressi alla funzione combinatoria (ogni volta che cambia uno qualsiasi tra gli ingressi devono essere aggiornate le uscite ossia eseguito l’always)Le uscite del blocco devono essere di tipo reg perchésono assegnate in un blocco procedurale (l’always)

Page 10: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 19

Always: sensitivity list

always @(x1 or x2 or x3 … or xn)begin

….

end…

Sensitivity list: l’always viene eseguito solo se cambia uno qualsiasi fra i segnali x1, x2,…, xn

x1

x2

xN

y1y2

yM

LogicaCombinatoria

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 20

Always: assegnazione delle uscite

always @(x1 or x2 or x3 … or xN)begin….

y1= …. ;

….

yM=…. ;

end

x1

x2

xN

y1y2

yM

LogicaCombinatoria

Le uscite devono sempre essere assegnate altrimenti il loro valore dipenderebbe dalla storia degli ingressi perché manterrebbero il valore precedente

Page 11: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 21

Esempio: half-adder

L’implementazione con un always di un blocco combinatorio già implementato in dataflow e strutturale:

module ha(A,B,C,S);

input A,B;

output C,S;

reg C,S;

always @(A or B)beginC=A&B;

S=A^B;end

endmodule

C e S sono reg perché sono assegnati in un blocco procedurale

La sensitivity list contiene tutti gli ingressi al blocco

L’assegnamento ad un regnon richiede la parola chiave assign (usata solo per i wire)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 22

Costrutti algoritmici

La descrizione precedente non ha alcun vantaggio rispetto a quella strutturale e tanto meno dataflow (anzi, la descrizione dataflow èpraticamente identica, con la sola differenza che le uscite sono wire ed assegnate con un assign)Si ottiene un enorme vantaggio (in semplicità e leggibiltà di descrizione, facilità di implementazione) sfruttando costrutti piùraffinati che possono essere evidentemente usati solo in un blocco procedurale: if…else, case, for

Page 12: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 23

Istruzione condizionale (if…else)

L’istruzione condizionale ha la stessa sintassi del linguaggio C:

if(espressione)blocco1

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 il numero rappresentato è diverso da zero, falsa se il numero è zero o se contiene delle X o Z

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 24

Esempio: multiplexer

module mux2_1(A,B,sel,Z);

input A,B,sel;

output Z;

reg Z;

always @(A or B or sel)beginif(sel)

Z=A;else

Z=B;end

endmodule

Multiplexer: se sel=1 passa A altrimenti B

Tutti gli ingressi sono specificati nella sensitivitylist

In qualsiasi ramo della if l’uscita viene assegnata

Page 13: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 25

IF…ELSE combinatorio

Perché la struttura if…else implementi veramente della logica combinatoria bisogna che per qualsiasi combinazione degli ingressi l’uscita (o le uscite) venga SEMPRE assegnata.

Se esistesse anche una sola combinazione di ingresso per cui l’uscita non è assegnata, l’uscita stessa, essendo un reg, manterrebbe il valore assunto precedentemente quindi dipenderebbe dalla storia del circuito (avremmo dunque logica sequenziale e NON combinatoria)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 26

Esempio: multiplexer

module mux2_1(A,B,sel,Z);

input A,B,sel;

output Z;

reg Z;

always @(A or B or sel)beginZ=B;if(sel)

Z=A;end

endmodule

Non è necessario che ci siano tutti i rami della if ma che la Z sia sempre assegnata.In questo caso per prima cosa si assegna B a Z e poi, se sel=1, si cambia il suo valore in A. Un assegnamento viene comunque eseguito per ogni valore degli ingressi

Page 14: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 27

Esempio: multiplexer 4x1

module mux4_1(A,B,C,D,sel,Z);

input A,B,C,D;input [1:0] sel;

output Z;

reg Z;

….

endmodule

always @(A or B or C or D or sel)if(sel[1])

if(sel[0])Z=A;

elseZ=B;

elseif(sel[0])

Z=C;else

Z=D;

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 28

Istruzione CASE

Se i casi possibili sono molti più di due si possono usare delle if annidate oppure l’istruzione case

case (espressione)val1: blocco1;val2: blocco2;…valN: bloccoN;default: blocco0;

endcase

Se espressione non ricade in uno dei valori elencati si esegue il default (blocco0).

Page 15: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 29

Istruzione CASE

A seconda del valore di espressione viene eseguito uno dei blocchi di istruzioni.

Se espressione non ricade in uno dei valori 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 blocco2

Se val2=2’b01 e espressione=2’b0x NON eseguo blocco2

Se val2=2’b0x e espressione=2’b01 NON eseguo blocco2

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 30

Esempio: multiplexer 4x1module mux4_1(A,B,C,D,sel,Z);

input A,B,C,D;input [1:0] sel;

output Z;

reg Z;

always @(A or B or C or D or sel)case (sel)

2’b00: Z=D;2’b01: Z=C;2’b10: Z=B;2’b11: Z=A;default: Z=A;

endcase

endmodule

Il default ènecessario perchécase confronta i bit considerando anche i valori X e Z ed in questo caso non abbiamo specificato azioni quando i bit assumono tali valori (quindi non abbiamo specificato tutte le combinazioni di ingresso)

Page 16: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 31

Istruzione CASEX

L’istruzione casex permette di non specificare tutti i casi e raggruppare insiemi di casi in cui viene eseguita la stessa operazione

casex (espressione)val1: blocco1;val2: blocco2;…valN: bloccoN;default: blocco0;

endcase

La differenza col case normale consiste nel fatto che in valN si possono specificare gruppi di bit come X o Z ed in tal caso quei bit non vengono considerati (don’t care)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 32

Istruzione CASEX

A seconda del valore di espressione viene eseguito uno dei blocchi di istruzioni.

Se espressione non ricade in uno dei valori elencati si esegue il default (blocco0).

Il match fra espressione e val è fatto bit a bit ma un valore di X o Z viene interpretato come don’t care(qualsiasi valore abbia quel bit l’espressione corrisponde se corrispondono gli altri bit)

Se val2=2’b01 e espressione=2’b01 eseguo blocco2

Se val2=2’b01 e espressione=2’b0x NON eseguo blocco2

Se val2=2’b0x e espressione=2’b01 ESEGUO blocco2

Il match avviene per qualsiasi valore di questo bit

Page 17: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 33

Esempio: priority encoder

module pri_enc(A, Z);

input [1:0] A;output Z;

reg Z;

always @(A)casex (A)

2’b1x: Z=1;2’b01: Z=0;default: Z=x;

endcaseendmodule

Il priority encoder è un codificatore che prende in ingresso N bit e mette in uscita M=log2N bit che rappresentano la codifica di quale bit di ingresso è attivo (alto).I bit di ingresso hanno priorità quindi se quello a priorità massima è 1, a prescindere dal valore degli ingressi si mette in uscita la sua codifica

E’ utilizzato nella gestione delle interrupt

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 34

Istruzione FOR

La for equivale alla corrispondente istruzione C esegue cioè 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

Page 18: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 35

Istruzione FOR

Il numero di iterazioni nel ciclo for deve essere predeterminato a priori e NON può dipendere dai segnali di ingresso, altrimenti non avremmo logica combinatoria

Poiché il ciclo for è troppo simile ad un istruzione di linguaggio di programmazione deve essere usato con molto attenzione perché può facilmente dar luogo a descrizioni inesatte di logica combinatoria (gli sono 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 per verificare il funzionamento di un modulo (è utile per generare tutte le possibili combinazioni di ingresso)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 36

Esempio: priority encoder

module pri_enc(A, Z);

input [7:0] A;output [2:0] Z;

reg [2:0] Z;integer K;

always @(A)begin

Z=3’bx;for(K=0;K<8; K=K+1)

if(A[K])Z=K;

end

endmodule

K è un integer

Z è sempre assegnato

I bit piùsignificativi di A hanno prioritàmaggiore

Page 19: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 37

Descrizione algoritmica: sottomoduliNon è detto che l’intero blocco combinatorio debba essere descritto con un unico always, è anche possibile suddividere gerarchicamente il modulo in sottomoduli, ciascuno dei quali può a sua volta essere un modulo separato o semplicemente un always dentro il modulo top

Modulo 0

Modulo 1

Modulo 2

Modulo 3

I1I2

I4 O2

O1int1

int2

int3

I3

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 38

Sottomodulimodule m1(A,B,X,Y);

endmodule

module m2(A,B,X,Y);

endmodule

module m3(A,B,C,X);…endmodule

module m0(I1,I2,I3,I4,O1,O2);…m1 g1(I1,I2,int1,int2);m2 g2(I3,I4,int3,O2);m3 g3(int1,int2,int3,O1);…endmodule

Ad esempio, si possono scrivere 3 moduli, uno per ogni sottomodulo, e metterli insieme nel modulo top (m0)

Modulo 0

Modulo 1

Modulo 2

Modulo 3

I1I2

I4 O2

O1int1

int2

int3

I3

Page 20: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 39

Sottomodulimodule m0(I1,I2,I3,I4,O1,O2);

always @(I1,I2)

begin

end

always @(int1, int2, int3)begin…end

always @(I3,I4)begin…end

…endmodule

■ Oppure si può scrivere un unico modulo contenente 3 always differenti, uno per ogni sottomodulo.■ La sensitivity-list del singolo always contiene solo gli ingressi al sottomodulo specifico implementato

Modulo 0

Modulo 1

Modulo 2

Modulo 3

I1I2

I4 O2

O1int1

int2

int3

I3

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 40

Espressioni: operatori

Aritmetici (2 operandi, risultato su N bit) + (somma) (Es. 5+2=7)- (sottrazione)* (moltiplicazione)/ (divisione)

Bitwise (bit a bit) (2 operandi, risultato su N bit)~ (negazione) (Es. ~(0100)= 1011)& (and) (Es. (0111)&(1101)= 0101)| (or)^ (xor)~^,^~ (xnor)

Page 21: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 41

Espressioni: operatori

Riduzione (1 operando, risultato su 1 bit)& (and) (Es. &(01101)=0 , &(1111)=1)~& (nand)

| (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)===,!== (uguaglianza e disuguaglianza con verifica

bit a bit dei valori x e z)

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 42

Espressioni: operatori

Relazionali (2 operandi, risultato 1 bit) < (minore)<= (minore uguale)> (maggiore)>= (maggiore uguale)

Shift (2 operandi, risultato su N bit) >> (shift destro) (Es. 0110>>2 = 0001)<< (shift sinistro) (Es. 0110<<1 = 1100)

(i bit inseriti negli shift destro e sinistrosono sempre 0, per uno shift devo indicare di quantibit voglio shiftare )

Page 22: Logica combinatoria in linguaggio Verilog - diee.unica.itbarbaro/eolab2/ESD/07/08ed_comb_verilog_2p.pdf · 01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 3 Stili descrittivi

01 Novembre 2006 ED - Verilog combinatorio Massimo Barbaro 43

Espressioni: operatori

Condizionale (3 operandi, risultato è un’espressione)(espressione)?S1:S2

se espressione è vera valuta S1 altrimenti S2Esempio:Z=(sel==1)?A:B; (multiplexer, se sel=1 assegna A

altrimenti B)Concatenazione

{,} concatena i due vettoriEsempio: Z={A,B};

Replica{int{ }} ripete int volte un certo vettoreEsempio: Z={3{A}} -> Z={A,A,A}