Logica sequenziale: implementazione verilog

Documenti analoghi
Circuiti sequenziali e elementi di memoria

Verifica di Sistemi. 2. Il latch SR a porte NOR non accetta la condizione: a. S=0, R=0 b. S=1, R=1 c. S=0, R=1 d. S=1, R=0

I Bistabili. Maurizio Palesi. Maurizio Palesi 1

Calcolatori Elettronici Reti Sequenziali Asincrone

Chapter 1. Circuiti sequenziali: macchine a stati

Flip-flop Macchine sequenziali

Sequential Logic. 2 storage mechanisms positive feedback charge-based. Inputs. Outputs COMBINATIONAL LOGIC. Current State. Next state.

Flip-flop, registri, la macchina a stati finiti

Classe III specializzazione elettronica. Elettrotecnica e elettronica

CONTATORI ASINCRONI. Fig. 1

Registri. «a2» Copyright Daniele Giacomini --

Macchine sequenziali sincrone. Macchine sincrone

Reti sequenziali. Esempio di rete sequenziale: distributore automatico.

Architettura dei Calcolatori Reti Sequenziali Sincrone

Descrizioni VHDL Behavioral

Reti logiche e componenti di un elaboratore

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Esercitazione 1 (Capitolo 2) Reti Logiche

x y z F x y z F F = x z + y z + yz + xyz G = wyz + vw z + vwy + vwz + v w y z Sommario

A.C. Neve Esercizi Digitali 1

Introduzione ai microcontrollori

ISTITUTO ISTRUZIONE SUPERIORE "L. EINAUDI" ALBA ANNO SCOLASTICO 2015/2016

Corso di Laurea in Informatica Architetture degli Elaboratori

Macchine sequenziali

I CONTATORI SINCRONI

Reti sequenziali sincrone

bus interno bus esterno bus di sistema

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

FSM: Macchine a Stati Finiti

Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica. Metodologie e strumenti per il reengineering del workflow management

ESERCIZI DEL CORSO DI INFORMATICA

Simulazione di guasto

COMPITI D ESAME QUADRATO = 0.2um. ELETTRONICA DEI SISTEMI DIGITALI 1 Prova scritta 08/01/2004 COGNOME NOME MATRICOLA

Parte 1. Vettori di bit - AA. 2012/13 1.1

Lezione 2 Circuiti logici. Mauro Piccolo piccolo@di.unito.it

MINISTERO DELLA PUBBLICA ISTRUZIONE ISTITUTO TECNICO INDUSTRIALE. ARTURO MALIGNANI - UDINE Viale Leonardo da Vinci, Udine

Introduzione alle macchine a stati (non definitivo)

Il Linguaggio VERILOG

INTRODUZIONE AI SISTEMI OPERATIVI EMBEDDED

Calcolatori Elettronici A a.a. 2008/2009. RETI SEQUENZIALI: ESERCIZI Massimiliano Giacomin

Laboratorio di Architettura degli Elaboratori - A.A. 2012/13

Modulo 8. Elettronica Digitale. Contenuti: Obiettivi:

Introduzione al VHDL. Alcuni concetti introduttivi

FONDAMENTI DI LOGICA DIGITALE 1 DL 3155E20 LOGICA. Blocchi funzionali. Argomenti teorici

I metodi formali nel processo di sviluppo del software

T9 REGISTRI, CONTATORI, MEMORIE A SEMICONDUTTORE

Macchine a stati finiti sincrone

Architettura di un calcolatore

Introduzione al MATLAB c Parte 2

VERIFICA DEL FUNZIONAMENTO DI CONTATORI ASINCRONI E VISUALIZZAZIONE DEL CONTEGGIO SU VISUALIZZATORE A LED A 7 SEGMENTI

Programmazione modulare a.s

LATCH E FLIP-FLOP. Fig. 1 D-latch trasparente per ck=1

Calcolatori Elettronici B a.a. 2006/2007

Laboratorio di Architettura degli Elaboratori A.A. 2015/16 Circuiti Logici

Nome e Cognome. 2 Calcolare il valore efficace di una tensione sinusoidale con Vmax = 18 V

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

CAPITOLO 2 CIRCUITI SEQUENZIALI

Laurea Specialistica in Informatica

Ciclo di Istruzione. Ciclo di Istruzione. Controllo. Ciclo di Istruzione (diagramma di flusso) Lezione 5 e 6

L interruttore Microfonico

Lezione 8. La macchina universale

PROGRAMMAZIONE DISCIPLINARE ( modulo redatto da prof. A. Rossi)

Architettura dei Calcolatori Parte Operativa e Parte Controllo

Descrizione di un algoritmo

INTRODUZIONE ALLE MACCHINE A STATI

Testi di Esercizi e Quesiti 1

Reti Logiche A Appello del 24 febbraio 2010

Von Neumann. John Von Neumann ( )

Architettura degli Elaboratori

Controllo Remoto tramite Telefono Cellulare

Appunti di reti logiche. Ing. Luca Martini

Calcolatori Elettronici Parte IV: Logica Digitale e Memorie

Nastro trasportatore con ribaltamento cassetta.

INFORMATICA 1 L. Mezzalira

Introduzione alle FPGA mediante esempi

PROGRAMMAZIONE MODULARE

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Calcolatori Elettronici

1 Carattere 1 2 Carattere 2 4 Carattere 4 X Carattere diverso da 1, 2, 4. Porta chiusa Porta aperta

Macchine a stati finiti G. MARSELLA UNIVERSITÀ DEL SALENTO

Progetto e realizzazione di un sistema che rileva la temperatura a distanza

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Sistemi Web per il turismo - lezione 3 -

Lezione 7 Sommatori e Moltiplicatori

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

Reti Logiche A. Introduzione al VHDL

Esercitazione RSS FONDAMENTI DI INFORMATICA B. Università degli studi di Parma Dipartimento di Ingegneria dell informazione DIDATTICA A DISTANZA

Piani di input e piani di calcolo reale in FaTA-e

Arduino: Programmazione

DISPLAY REMOTO PILOTATO DALLA SERIALE. LCD_SERv10

Studio e sviluppo di un applicazione DTT client / server per l autenticazione tramite Carta Nazionale dei Servizi

UNIVERSITA DEGLI STUDI DI FIRENZE. Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica !" #$ & +

Calcolatori Elettronici M Modulo Linguaggio VHDL Parte 1/2

Linguaggio di bash per esempi. Tre modi per quotare. Esempio. quotare: significa trattare caratteri speciali come normali caratteri

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense

PD32. Interfacciamento con i dispositivi di I/O (V)

Sintesi di Reti Sequenziali Sincrone

Transcript:

Logica sequenziale: implementazione verilog Lucidi del Corso di Elettronica igitale Modulo 11 Università di Cagliari ipartimento di Ingegneria Elettrica ed Elettronica Laboratorio di Elettronica (EOLAB) Latch in verilog L implementazione di logica sequenziale in verilog si basa sull uso dei reg sfruttando il fatto che un reg a cui non venga assegnato un nuovo valore mantiene il valore precedentemente assegnatogli Siamo in grado quindi di implementare qualsiasi tipo di latch con i blocchi always, NON assegnando un nuovo valore all uscita per ogni combinazione di ingressi Ovviamente è anche possibile una descrizione in stile strutturale 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 2

Latch SR verilog module LSR(S,R,Q,QN); input S,R; output Q,QN; reg Q,QN; always @(S or R) case({s,r}) 2 b10: {Q,QN}=2 b10; 2 b01: {Q,QN}=2 b01; 2 b11: {Q,QN}=2 b00; case Non viene assegnato un valore per ogni possibile combinazione di S e R quindi si ottiene un elemento di memoria. (Questa versione non modella lo stato proibito) 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 3 Latch SR verilog: strutturale module LSR_struct(S,R,Q,QN); input S,R; output Q,QN; wire Q,QN,S,R; nor n1(q,r,qn); nor n2(qn,s,q); module LSR_struct(S,R,Q,QN); input S,R; output Q,QN; wire Q,QN,S,R; nand n1(q,s,qn); nand n2(qn,r,q); 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 4

Latch con enable module L(,EN,Q); input,en; output Q; reg Q; always @( or EN) if(en) Q=; Ogni volta che cambiano o EN viene assegnato a Q il valore di solo se EN=1. Sia EN che fanno parte della sensitivity list. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 5 Esempio: Latch con enable Variazioni di ignorate perché EN è basso e non viene eseguita la if EN EN=1 il latch diventa trasparente EN=0 il latch memorizza Q Q inizialmente indeterminato 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 6

Latch in verilog In generale avremo un latch ogni volta che un costrutto di if (annidate o meno) o un costrutto case non prevede un assegnamento dell uscita per ogni possibile percorso Un caso tipico è un costrutto case senza default 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 7 Latch con enable e clear module L2(,EN,CLR,Q); input,en,clr; output Q; reg Q; always @( or EN or CLR) if(clr) Q=1 b0; else if(en) Q=; Non tutti i possibili percorsi nelle if annidate assegnano un valore a Q (non c è la else nella seconda if). E un latch con clear (il segnale CLR) attivo alto 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 8

Latch con enable, clear e preset module L3(,EN,CLR,SET,Q); input,en,clr,set; output Q; reg Q; always @( or EN or CLR or SET) if(clr) Q=1 b0; else if(set) Q=1 b1; else if(en) Q=; Nell ultimo costrutto if manca un else quindi si ottiene un latch 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 9 Blocking e Non-blocking assignment Prima di affrontare la modellazione di flip-flop e registri sensibili ai fronti del segnale di clock è necessario introdurre un nuovo meccanismo di assegnamento di valore ai segnali di tipo variable: l assegnamento nonblocking (simbolo operatore <=). Assegnamento blocking L assegnamento blocking (=) congela l esecuzione delle istruzioni procedurali, dunque viene eseguito prima di fare avanzare la simulazione e passare all istruzione successiva. Assegnamento non-blocking L assegnamento non-blocking (<=) non ferma l esecuzione, dunque TUTTI gli assegnamenti di questo tipo, anche dentro un blocco procedurale, vengono eseguiti in PARALLELO. In pratica tutte l espressioni a destra dell operatore non-blocking sono valutate (campionate) contemporaneamente e solo successivamente i valori vengono assegnati alla variabile sul lato sinistro. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 10

Blocking e Non-blocking assignment In questo esempio, alla fine dell esecuzione, le variabili A e B varranno: Blocking: A=1, B=1 Non-blocking: A=1, B=0 reg A,B; initial A=0; B=1; //(delays) A=B; B=A; Assegnamento blocking reg A,B; initial A<=0; B<=1; //(delays) A<=B; B<=A; Assegnamento non-blocking 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 11 Assegnamento Blocking 1. Arrivati a questa istruzione la simulazione si CONGELA. A=B; B=A; 4. La simulazione RIPRENE. 2. Viene valutato il lato destro dell operatore =. 3. Il risultato viene assegnato al lato a sinistra dell operatore =. 5. Viene valutato il lato destro dell operatore =. 6. Il risultato viene assegnato al lato a sinistra dell operatore =. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 12

Assegnamento Non-blocking 1. Arrivati a questa istruzione la simulazione si CONGELA. 2. Vengono valutati tutti i lati a destra dell operatore <=. A<=B; B<=A; 3. Tutti i risultati vengono assegnati ai lati a sinistra dell operatore <=. 4. La simulazione RIPRENE. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 13 Blocking : esempio reg A,B; initial A=0; B=1; //(delays) A=B; B=A; A=0 e B=1 PRIMA viene eseguito A=B e quindi A diventa 1 OPO viene eseguito B=A, ma siccome A è già diventato 1 anche B diventa 1 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 14

Non-blocking: esempio reg A,B; initial A<=0; B<=1; //(delays) A<=B; B<=A; A=0 e B=1 I due assegnamenti sono non-blocking quindi vengono eseguiti in parallelo. Perciò le due espressioni a destra dell operatore <= vengono campionate allo stesso tempo. ato che, quando viene valutato il lato destro dell espressione, l assegnamento non è stato ancora eseguito, A assume il valore che aveva prima B (1) e B assume il valore che aveva prima A (0). 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 15 Blocking e non-blocking Come si vede dall esempio, il risultato delle stesso codice, implementato con assegnamenti di tipo blocking o non-blocking è differente. In particolare, nel caso dell assegnamento nonblocking il risultato finale NON dipe dall ordine con cui sono scritti assegnamenti contemporanei (cioè senza ritardi nel mezzo). 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 16

Flip-flop in verilog Anche per implementare dei flip-flop si fa uso di un blocco always con costrutti procedurali (if e case) in cui ad un reg non viene sempre assegnato un valore è necessario però potere definire la sensibilità ai fronti del clock e NON al livello Gli strumenti per definire i fronti sono i due modificatori posedge e negedge che indicano il fronte positivo e negativo di un certo segnale L assegnamento deve essere di tipo non-blocking per evitare qualsiasi tipo di ambiguità derivante dall ordine con cui è scritto il codice (il non-blocking NON dipe dall ordine). 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 17 Flip-flop module FF(,CLK,Q); input,clk; output Q; reg Q; Q<=; L always viene eseguito solo in corrispondenza dei fronti positivi del clock. non fa parte della sensitivity list perché l uscita deve essere aggiornata solo a causa di variazioni di CLK ( viene campionato sui fronti di CLK). L assegnamento è di tipo non-blocking 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 18

Esempio: Flip-Flop CLK campionato sui fronti di CLK Q Q inizialmente indeterminato 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 19 Flip-flop: blocking e non-blocking La differenza fra l uso di assegnamenti blocking e non-blocking è avvertibile quando viene assegnato, nello stesso modulo, più di un segnale. module FF(,CLK,Q); input,clk; output Q1,Q2; reg Q1,Q2; Q1=; Q2=Q1; module FF(,CLK,Q); input,clk; output Q1,Q2; reg Q1,Q2; Q1<=; Q2<=Q1; 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 20

Flip-flop: blocking e non--blocking Q1=; Q2=Q1; La prima assegnazione viene eseguita per prima, quindi Q1 campiona il valore di. La seconda assegnazione viene eseguita successivamente (blocking) dunque Q2 diventa uguale a Q1 ossia a. ENTRAMBI i flip-flop campionano l ingresso sul fronte del clock. Q1<=; Q2<=Q1; I lati destri delle espressioni vengono valutati contemporaneamente e POI assegnati a Q1 e Q2. Q1 campiona dunque il segnale. Q2, invece, campiona il valore che aveva Q1 PRIMA di campionare, ossia il valore di Q1 al precedente colpo di clock. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 21 Flip-flop: blocking e non-blocking clk Q Q1 Q Q Q1 Q2 Q Q2 clk 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 22

Flip-flop: blocking e non-blocking a notare che si preferisce l uso del non-blocking perché NON è ambiguo: comunque si scrivano le cose (in qualsiasi ordine) il circuito modellato è lo stesso. Nel caso dell assegnamento blocking, invece, l ordine con cui si scrivono le cose cambia il circuito modellato quindi NON può essere usato per modellare flip-flop o registri (a causa dell ambiguità). L eventuale problema di ambiguità dovuto all uso dell assegnamento blocking al posto del non-blocking si manifesta principalmente se si implementa più di un flip-flop nello stesso modulo e se le uscite dell uno vanno a pilotare in qualche modo gli ingressi dell altro. In ogni caso, la modellazione di logica sequenziale sensibile ai fronti, richiede OBBLIGATORIAMENTE l uso di assegnamenti non-blocking 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 23 Flip-flop: blocking e non-blocking [2] module FF(,CLK,Q); input,clk; output Q1,Q2; reg Q1,Q2; // Q1=; // Q2=Q1; // Inverto l ordine // cambia il risultato Q2=Q1; Q1=; module FF(,CLK,Q); input,clk; output Q1,Q2; reg Q1,Q2; // Q1<=; // Q2<=Q1; // Inverto l ordine // NON cambia il risultato Q2<=Q1; Q1<=; 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 24

Flip-flop: blocking e non blocking [2] Q2=Q1; Q1=; La prima assegnazione viene eseguita per prima, quindi Q2 campiona il valore di Q1. La seconda assegnazione viene eseguita successivamente (blocking) dunque Q1 diventa uguale a. I flip-flop campionano dati differenti. Q2<=Q1; Q1<=; I lati destri delle espressioni vengono valutati contemporaneamente e POI assegnati a Q1 e Q2. Q1 campiona dunque il segnale. Q2, invece, campiona il valore che aveva Q1 PRIMA di campionare, ossia il valore di Q1 al precedente colpo di clock. 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 25 Flip-flop: blocking e non-blocking [2] Q1 Q1 Q Q Q2 Q Q Q2 clk clk 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 26

Flip-flop con enable module FF2(,CLK,EN,Q); input,clk,en; output Q; reg Q; if(en) Q<=; In questo caso abbiamo un flip-flop (in quanto memorizza sui fronti del clock) con segnale di enable. In presenza di un fronte positivo di CLK viene valutato se il FF è abilitato (EN=1) ed in tal caso viene aggiornata l uscita 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 27 Flip-flop con reset sincrono module FF3(,CLK,RST,Q); input,clk,rst; output Q; reg Q; if(rst) Q<=1 b0; else Q<=; In questo caso viene sempre assegnato un valore all uscita ma abbiamo comunque un FF perché l always si attiva solo sui fronti di CLK. Se RST o cambiano senza che cambi CLK l uscita NON viene aggiornata. Il reset è SINCRONO (attivo alto) perché viene valutato solo sui fronti del clock 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 28

Esempio: FF- con reset sincrono CLK RST Il reset RST è attivo sincrono quindi ha effetto sul fronte di CLK Q 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 29 Flip-flop con reset asincrono module FF4(,CLK,RST,Q); input,clk,rst; output Q; reg Q; always @(posedge CLK or negedge RST) if(~rst) Q<=1 b0; else Q<=; Il reset è ASINCRONO (attivo basso) perché l always viene valutato se cambia RST anche in assenza di variazioni del clock 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 30

Esempio: FF- con reset asincrono CLK RST Il reset RST (attivo basso) è asincrono quindi ha effetto immediatamente a precindere da CLK Q 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 31 Flip-flop in verilog In generale si ottiene un flip-flop ogni qual volta si utilizza un segnale campionato su un fronte (posedge o negedge) nella sensitivity list di un always I segnali della sensitivity list devono essere tutti attivi sui fronti o tutti a livelli: non si possono avere sensitivity list miste Se altri segnali, oltre il clock, compaiono nella sensitivity list danno luogo ad azioni asincrone, cioé azioni attivate indipentemente dal clock 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 32

Registri Un registro non è altro che un insieme di N flipflop (o latch) che vengono scritti contemporaneamente con un solo segnale di clock (o di enable) La definizione di un registro sarà identica a quella di un flip-flop con l unica differenza che il dato e l uscita Q saranno vettori a N bit anzi che a singolo bit 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 33 Registro ad 8 bit module REG8(,CLK,RST,Q); input CLK,RST; input [7:0] ; output [7:0] Q; reg [7:0] Q; if(rst) Q<=8 b0; else Q<=; Registro ad 8 bit con segnale di reset sincrono (campionato sui fronti del clock) 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 34

Moduli parametrici La dimensione del registro può essere resa parametrica per generalità con la direttiva parameter All interno di un modulo si può definire uno costante per mezzo del comando parameter IM=8; Al momento dell istanziazione del modulo si può modificare il valore della costante my_mod #(16) uut(lista-ingressi); Assegna il valore del parametro, quindi sostituisce 16 a 8 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 35 Registro parametrico module REGN(,CLK,RST,Q); parameter N=8; input CLK,RST; input [N-1:0] ; output [N-1:0] Q; reg [N-1:0] Q; if(rst) Q<={N{1 b0}}; else Q<=; In fase di istanziazione si decide quale sia la dimensione del registro REGN #(16) A(d,c,r,q); Se nel codice è presente un solo registro, la differenza fra blocking e non-blocking non è avvertibile 11 icembre 2006 E - Logica sequenziale verilog Massimo Barbaro 36