











Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti di lezione del corso di sistemi elettronici digitali del corso di laurea magistrale in ingegneria elettronica del Politecnico di Bari, tenuto dalla professoressa Maria Rizzi. Descrizione e sintesi di contatori sincroni (binari, ring counter, twisted-ring counter, up and down) e asincroni, descrizione di registri SISO, SIPO, PIPO, PISO.
Tipologia: Sbobinature
1 / 19
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!












I contatori di per sè sono delle macchine sequenziali a stati finiti che hanno il compito di svolgere più di una determinata funzione. Il compito del contatore fondamentalmente è quello di contare gli eventi distinti. Un contatore, peró, può diventare un divisore di frequenza, ecc ed essere utilizzati per fare altro. Si possono classificare sulla tipologia di funzionamento in sincroni e asincroni. I contatori sincroni sono a tutti gli effetti delle macchine sincrone a tutti gli effetti, cioè fatti da una serie di flip flop, a seconda delle specifiche del contatore, caratterizzato dal fatto che il segnale di temporizzazione, idealmente, dovrebbe raggiungere contemporaneamente tutti gli elementi di memoria. I contatori asincroni, invece, sono impropriamente chiamati asincroni (spesso chiamati ripple counter), perchè non sono macchine asincrone (asincrono = non esiste un segnale di temporizzazione esterno che scandisce il funzionamento della macchina). Hanno lo stesso un clock, ma sono asincroni perchè il clock esterno raggiunge il primo flip flop, l’uscita del primo flip flop fungerà da clock per il secondo, ecc. Questo vuol dire che non è una macchina asincrona (sebbene sia formata da elementi sincroni) ma gli elementi di memoria al suo interno non commutano contemporaneamente: il contatore ripple non è nè una macchina sincrona nè una macchina asincrona. Saranno delle macchine particolari che progetteremo con una tecnica ad hoc. Emtrambi si differenziano sulla base del modulo : il numero massimo di eventi distinti contati. Si possono anche differenziare sul tipo di conteggio : conteggio in avanti (ad incremento, up) che conta in ordine crescente (0,1,2,3,…) oppure conteggio a decremento (down) che conta in ordine decrescente (… 3,2,1,0). Il modulo da’ la lunghezza (quanti eventi distinti conta) e il conteggio da’ il verso. Tra i contatori hanno particolare interesse i contatori decadici e i contatori binari. Contatore decadico: un contatore modulo 10 conta da 0 a 9 e poi ricomincia o da 9 a 0 e poi ricomincia. È un contatore BCD. Contatore binario: affinchè si possa definire binario, si devono verificare due condizioni (devono verificarsi entrambe).
Contatori sincroni Supponiamo di voler realizzare un contatore binario sincrono mod. 4 di tipo up. Contatore sincrono = FSM sincrona Modulo 4 = conta 4 eventi distinti e poi si resette Binario = ha 2 uscite (perchè mod 4) Up = conta da 0 a 3. In genere i contatori si realizzano come macchina di Moore perchè in molti casi lo stato coincide con l’uscita. Ovviamente nulla vieta di farlo con la macchina di Mealy. Scegliamo di sintetizzarlo con flip flop di tipo T. Non ha un ingresso esterno quindi evolve sulla base degli impulsi di clock. Supponiamo di stare nello stato A caratterizzato da un’uscita 00. Arriva il primo impulso di clock: la macchina deve contare l’evento e ai deve portare in uno stato in cui ha contato un altro evento. Introduciamo un nuovo stato caratterizzato da un’uscita pari a 01. Siamo in B/01, al successivo impulso di clock dovrà cotare il 2. Quindi si passa nello stato successivo caratterizzato da un’uscita 10. Siamo in C/10, all’impulso di clock conterà 3 e va in uno stato con uscita
Al successivo impulso di clock la macchina si porta nello stato iniziale con uscita 00, si resetta, e ricomincia a contare. Non c’è bisogno di minimizzare e lo vedo dalle uscite. Siccome è una macchina completamente specificata, basiamo il concetto sull’equivalenza e alla base dell’equivalenza c’è che gli stati saranno equivalenti se hanno le stesse uscite. Qua stati con le stesse uscite non ce ne sono, quindi sicuramente la macchina è già minima. Questo non vuol dire che nessun contatore deve essere minimizzato, perchè alcuni possono avere ingressi esterni. Operiamo un assegnamento naturale. Ci sono due variabili di stato e quindi useremo 2 flip flop. Quando abbiamo un qualsiasi contatore, se lo sintetizziamo come macchina di Moore avremo sempre che lo stato coincide con l’uscita.
Se faccio un contatore binario pù complesso, non saranno tutti collegati in cascata i flip flop. Per generare la funzione di eccitazione il terzo flip flop entrerà in gioco una AND. Quindi se facciamo un contatore generico 2^n , avremo a partire dal terzo flip flop una porta and che genererà l’uscita del flip flop n-esimo e avrà come ingressi le uscite dei due flip flop precedenti. Se avessi voluto fare un contatore con uscita ripple carry out avrei avuto:
Nel caso di contatori binari, il numero di flip flop che metto, qualsiasi tipo siano, è sempre il logaritmo in base 2 del modulo. Però all’aumentare del modulo si complica un po’ il contatore, cioè viene introdotta una parte combinatoria alla parte dello schema logico, che è la parte più lenta del contatore. Esistono dei contatori veloci, privi di parte combinatoria, che hanno però alcuni limiti. Questi sono caratterizzati dall’introduzione della parte combinatoria all’aumentare del modulo. Uno di questi viene chiamato contatore ad anello. È una macchina a stati ed è una cascata di flip flop di tipo D.
Notiamo quidni che è un contatore, perchè conta 4 eventi distinti e poi ricomincia: è un contatore modulo 4. È binario? Per il modulo potrebbe esserlo, ma l’uscita dovrebbe essere l’espressione binaria dell’evento contato, e non è il caso, anche perchè per contare 4 eventi distinti sono necessari 2 bit. Quindi è un contatore sincrono, modulo 4 ma non binario. Si dice che è un contatore con una codifica di tipo ONE HOT , perchè nel numero contato esiste un solo 1. Si nota che realizzare un contatore modulo 4 di tipo ring counter costa il doppio dei flip flop rispetto uno normale, ma è più veloce. Se dovessi realizzare un contatore modulo 8 ring counter dovrei utilizzare 8 flip flop.
Contatori asincroni Non ricadono nè nelle macchine sequenziali sincrone nè in quelle asincrone. Questo vuol dire che ci dobbiamo ingegnare per adattare qualcosa che già sappiamo per farlo funzionare come contatore asincrono, cioè fare in modo che conti ma che sia caratterizzato da una struttura con elementi di memoria sincroni, ma non temporizzato contemporaneamente. Supponiamo di avere una struttura composta da 3 TFF. Tutti i flip flop sono pilotati ad 1, quindi ad ogni impulso di clock commutano. Sono temporizzato in modo che il clock esterno arriva al primo elemento di memoria, quello del bit meno significativo. L’uscita di un flip flop fornirà l’uscita del contatore, ma fungerà anche da clock per il FF successivo. E così via. Supponiamo che i dispositivi siano tutti positive edge triggered e siano tutti cancellati inizialmente (0000) Sono tutti pilotati ad uno quindi ogni impulso di clock commutano.
Se invece volessi avere un contatore up invece che down? Ci sono vari metodi e uno di questi è quello di considerare il dispositivo così com’è, ma con dei negative edge triggered, oppure lasciando dei positive edge triggered e prelevare l’uscita negata da portare nel clock successivo. .
Contatori asincroni avanti-indietro In questo caso si utilizza l’xor che, a seconda di come viene pilotata, puó fungere da buffer. In questo modo a seconda di come viene pilotata, entrerà o il clock o il clock negato. Ma se facciamo entrare il clock negato vuol dire che abbiamo trasformato il flip flop in un negative edge triggered. In questo caso significa prendere l’uscita negata a seconda di come viene pilotata la xor (0=indietro, 1=up).
Contatori in cascata Spesso, quando si vuole realizzare dei contatori di dimensioni abbastanza grandi, invece di andare a progettare subito il contatore, è più conveniente realizzare dei contatori in cascata, ovvero mettere in cascata dei contatori di modulo inferiore in modo che il conteggio totale del contatore sia il modulo voluto. Verrà fuori che il conteggio totale risulterà essere il prodotto dei moduli dei contatori messi in cascata. Supponiamo di voler realizzare un contatore modulo 24. Invece di fare un contatore modulo 24, possiamo fare la cascata di due contatori, uno modulo 4 e uno modulo 6 o viceversa. Il contatore deve essere sincrono, quindi il clock deve arrivare contemporaneamente a tutti i flip flop della coppia. Dopodichè metteremo per esempio un’uscita di tipo ripple carry out che agisce sull’enable dell’altro. Quando arriva l’ impulso di clock e l’ingresso enable è 0, il clock arriva a tutti i flip flop, anche quelli non abilitati. Ogni impulso di clock il primo contatore conta 0 1 2 3, dopodichè l’uscita attiva l’enable che diventa 1 e l’altro contatore viene attivato e inizia a contare; l’altro contatore conta 1, poi viene disabilitata e il primo conta di nuovo 0 1 2 3, poi il secondo conta 2. Quindi alla fine stiamo contando 6 volte 4, quindi 24. Stesso discorso si puó fare con i contatori asincroni. Molto spesso questo è conveniente perchè si va a risparmiare sul numero di flip flop che si usano. In questo caso, è stato fatto un unico clock che clocka tutti i flip flop delle due strutture e l’abilitazione, per attivare il secondo, altre volte viene fatto quello che si chiama partizionamento del clock o clock gating , in cui si ha il clock del secondo blocco messo in AND con l’uscita del ripple carry out, in modo che arriva il clock solo quando ha finito di contare l’altro. Questo è logicamente giusto, ma non sempre funziona bene.
Progetto Si sintetizzi un circuito sequenziale sincrono con due ingressi x1 e x2, e con uscita Z. Agli ingressi giungono sequenze di 4 bit ciascuna, l’uscita si porta all’1 logico se il numero di bit uguali nella stessa posizione temporale nelle due sequenze è maggiore di 2, altrimenti permane nello zero logico. Scelgo di usare un automa di Mealy. Suppongo di stare nello stato iniziale A, nel quale ho resettato il contenuto della macchina (non è arrivato alcun bit). Avendo due ingressi abbiamo 4 combinazioni possibili (00 01 10 11). La macchina deve riconoscere i bit e ci da’ un’uscita pari a 1 se il numero di bit uguali nello stesso istante temporale nelle due sequenze è maggiore di 2. Questo significa che, arrivato l’impulso di clock, mi interessa porre l’attenzione sul fatto che quei bit siano uguali, quindi per me che arrivi uno 00 o un 11 non fa differenza. Se arriva invece 01 o 10, non è importante che il primo sia 1 e il secondo sia 0 o viceversa, per me significa che all’impulso di clock i bit arrivati sono diversi, quindi li mando nello stesso stato. Questo vuol dire che dallo stato, da dove dovrebbero uscire 4 frecce, in realtà ne bastano 2, perchè 00 e 11, 01 e 10 hanno lo stesso significato: bit uguali o bit diversi. Tutti gli stati avranno uscita 0, solamente all’ultimo impulso di clock avremo l’uscita 1.
Gli stati I e L sono uguali, perchè portano allo stesso stato con la stessa uscita. Siccome non è importante contare, la I significa che su tre impulsi c’è solo una coppia uguale, L invece significa che su tre impulsi non c’è nemmeno una coppia. Potremmo rinominare entrambi come “su tre impulsi di clock ci sono delle coppie di bit uguali che risultano essere inferiori a 3”. In questo caso risultano lo stesso stato. È una macchina completamente specificata in cui gli unici stati equivalenti sono la I e la L. Facciamo l’assegnamento e abbiamo 9 stati, 4 variabili di stato e supponiamo di voler scegliere come elementi di memoria 4 flip flop di tipo T. Dovremo sintetizzare 5 funzioni: T1, T2, T3, T4 e z tutte di 6 variabili. Nelle mappe di karnhaugh avremo dei don’t care perchè l’assegnamento non è completo.
La macchina è già minima e non si minimizza. Abbiamo 7 stati, 3 variabili di stato e quindi 3 flip flop. Lo voglio realizzare con mux 4:1. Abbiamo le 3 variabili di stato y1 y2 y3, poi abbiamo i due ingressi x1 e x2 e abbiamo da realizzare una serie di funzioni che sono le due uscite in più le 3 o le 6 (a seconda del flip flop che scegliamo) funzioni di eccitazione degli elementi di memoria, quindi minimo 5 funzioni, altrimenti potrebbero essere 8. Un mux 4x1 è caratterizzato da 4 ingressi, 1 uscita e 2 variabili di selezione. Di queste variabili dobbiamo decidere quali saranno le variabili di selezione del mux. Supponiamo di scegliere y2 e y3 come selezione, y1 in ingresso, ci rimangono altre due variabili. Con due variabili possiamo avere 4 combinazioni, quindi per ogni combinazione ho che il primo piano è costituito da 4 mux, ciascuno pilotato da y2 e y3, in ingresso avremo 0, 1 (la massa e Vcc), y1 e y1’, dopodichè le 4 uscite dei mux andranno in un altro mux sempre 4x1 pilotato peró da x1 e x2. Se avessi usato una macchina di Moore, la z sarebbe stata funzione di 3 variabili. Se l’avessi voluta fare con un mux 4x le varie z erano un solo mux (?). Rifare l’esercizio ipotizzando che il primo bit che arriva è il meno significativo
Registri I registri sono macchine sequenziali sincrone a stati e sono una cascata di elementi di memoria. Mentre i contatori possiamo realizzarli con qualsiasi tipo di flip flop (quello asincroni di tipo T, ma quelli sincroni con qualsiasi) e devono contare eventi distinti, i registri sono dei dispositivi la cui funzione è quella di memorizzare il dato , che non deve essere assolutamente manipolato. L’elemento che ha la funzione di mantenere il dato senza manipolarlo è il flip flop di tipo D, quindi in genere a livello funzionale i registri vengono realizzati con DFF, perchè è l’unico che mantiene il dato e non lo manipola (ritardatore temporizzato). Si distinguono sulla base della modalità di caricamento del dato , ovvero il modo in cui il dato viene scritto nel registro, che puó essere:
È sempre una macchina sequenziale sincrona, sempre formata da flip flop di tipo D. Con un solo impulso di clock carico la macchina indipendentemente dalla lunghezza della parola, e con un altro impulso di clock leggo il contenuto. In questo caso il registro, sia in fase di caricamento che infase di scaricamente, risulta essere del tutto indipendente dalla lunghezza della parola, lo shift register, invece è dipendente dalla parola sia in scrittura che in lettura, mentre il SIPO è dipendente solo in scrittura. PISO È sempre una macchina sequenziale sincrona, ha un unico impulso di clock che mi fa commutare i flip flop contemporaneamente. Questo registro ha anche una parte combinatoria, costituita in questo caso da un mux, perchè sulla base di come è stato realizzato, a seconda di come viene pilotato il mux, il dato o verrà acquisito dal registro, oppure shifterà all’interno del registro. Quando la variabile di selezione risulta essere 1 vengono abilitate tutte le porte, quindi il dato viene acquisito dal flip flop e viene scritta la memoria; quando invece la variabile di selezione riaulta essere 0, viene abilitata solo una porta e le altre sono disabilitate, quindi il dato all’interno del flip flop scorre nell’elemento di memoria. Ovviamente la variabile di selezione dipende da come è fatto il circuito. Anche in questo caso abbiamo la scrittura che avviene in un unico impulso di clock, invece per leggere l’intera parola ci vogliono tanti impulsi di clock quanti sono i bit da leggere.