+ All Categories
Home > Documents > Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in...

Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in...

Date post: 15-Feb-2019
Category:
Upload: lylien
View: 216 times
Download: 0 times
Share this document with a friend
43
Logica combinatoria in linguaggio Verilog Lucidi del Corso di Elettronica Digitale Modulo 7 Modulo 7 Università di Cagliari Dipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Elettronica (EOLAB) Laboratorio di Elettronica (EOLAB)
Transcript
Page 1: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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)

Page 2: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 3: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 4: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 5: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 6: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 7: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 8: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 9: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 10: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 11: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 12: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 13: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 14: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 15: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 16: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 17: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 18: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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)

Page 19: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 20: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 21: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 22: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 23: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 24: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 25: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 26: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 27: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 28: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 29: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 30: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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)

Page 31: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 32: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 33: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 34: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 35: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 36: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 37: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 38: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 39: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 40: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 41: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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)

Page 42: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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

Page 43: Logica combinatoria in linguaggio Verilog - diee.unica.it · di blocchi procedurali (always) in termini algoritmici (if…else, case, for). Si può partire da una descrizione descrittiva

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


Recommended