






















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
Il concetto di macchine sequenziali in informatica, con particolare attenzione ai combinatori, alle macchine a stati finiti e agli automi di moore. Le caratteristiche di queste macchine, i loro tipi, le loro funzioni e le loro applicazioni. Viene anche discussa la minimizzazione del numero di stati e la tabella di flusso per la progettazione di macchine sequenziali.
Tipologia: Sbobinature
1 / 30
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!























Si dividono in due fondamentali categorie:
Ci sono due macro-blocchi:
La parte di memoria fornirà dei nuovi ingressi alla parte combinatoria e alcune delle sue uscite diventeranno nuovi ingressi. Oltre agli ingressi esterni che possiamo gestire, la parte combinatoria ha, dunque, anche ingressi interni, che rappresentano lo stato in cui si trova la macchina. Allo stesso modo, produrrà delle uscite apprezzabili all'esterno ed un nuovo stato. Supponendo di avere una macchina sincrona, quando arriva un impulso di clock la macchina verrà abilitata a leggere gli ingressi esterni e lo stato della macchina. Sulla base degli ingressi esterni e dei bit che rappresentano lo stato presente della macchina, fornirà un uscita e la macchina di porterà in una nuova condizione (stato futuro) che verrà memorizzato nella memoria e reso disponibile quando arriverà il successivo impulso di clock, diventando il nuovo stato presente. L'esempio più semplice di memoria è costituito da due semplici NOT in cascata retroazionati: Viene utilizzata maggiormente la seconda configurazione poiché per poter cambiare il dato memorizzato alla prima configurazione devo intervenire sull'hardware, cioè devo aprire il circuito, ma può essere deleterio. Siccome voglio che la mia memoria sia in grado di memorizzare sia gli uni che gli zeri e non voglio intervenire fisicamente ogni volta, si utilizza il secondo sistema che è il più semplice in assoluto.
È un dispositivo costituito da due porte NOR a due ingressi caratterizzato dal fatto che uno dei due ingressi alle due porte sono ingressi esterni e l'altro è la retroazione dell'altra porta. Si chiama S-R perché il dispositivo funziona con SET e RESET.
Posso battezzare ora U2=Q e U1=Q'. Siccome quando S=1, l'uscita viene portata a 1, S viene chiamato ingresso di SET (settare una variabile vuol dire portarla all'1 logico. R verrà chiamato ingresso di RESET perché quando R=1 cancella (resetta) il contenuto e porta a 0 l'uscita. Questo sistema, però, in realtà ha 3 ingressi : 2 ingressi esterni (S,R) e uno interno (Q). Quello che c'era prima nella macchina viene portato in ingresso. Allora il funzionamento sarà caratterizzato da una tabella a 3 ingressi: EQUAZIONE CARATTERISTICA: espressione booleana in cui viene espresso lo Stato futuro in funzione degli ingressi e dello stato presente della macchina TABELLA DI PILOTAGGIO: una tabella che ci dice quali ingressi devo avere quando dallo stato presente vogliamo spostarci in un certo stato futuro; ci dice come dobbiamo pilotare gli ingressi per fare in modo che da uno stato passo ad un altro.
Siccome il latch è un sistema funzionalmente completo, si potrebbe anche fare con porte NAND. Qualsiasi circuito può essere trasformabile in logica NAND. Dato questo per vero, facciamo la trasposizione porta a porta in logica NAND. La porta NOR non è altro che una porta OR seguita da un invertitore. Quindi in logica NAND avró una NOR preceduta da due invertitori. Se prendo le uscite Q e Q’ come mostrato nel primo circuito, prima avrò una cascata di due NOT, che posso semplificare, lasciando solo le ultime due porte con l’uscita che vi entra direttamente. Avrò quindi il circuito ottimizzato. I due circuiti, a e b, pur avendo ingressi negati, hanno le stesse uscite. Questo vuol dire che i due latch avranno comportamento duale: il latch b ha la condizione di indeterminazione per 00 (don’t care), per 01 sarà settato (1), per 10 verrà resettato (0), e condizione di determinazione per 11 (Q). GATED LATCH Sono dei dispositivi sempre di memoria, ma sincroni. Questo vuol dire che esiste un segnale di temporizzazione che abilita i cambiamenti di stato. Gli ingressi vengono acquisiti e letti dalla macchina in modo controllato dal clock, temporizzato. Per semplicità useremo un’onda quadra come segnale di clock. Per poter far entrare questo ingresso di temporizzazione sarà necessario mettere due porte logiche AND in cui entrerà il clock e gli ingressi dell’SR avendo quindi un altro piano di logica. Quando il clock è zero, qualunque siano S ed R, quello che entra nel latch sarà sempre zero e mantiene lo stato. Se il clock invece è ad 1, il latch risponderà alla tabella della verità. Questo dispositivo è, quindi, un dispositivo sincrono che gode della proprietà di trasparenza
Ha come base sempre l’SR. Ha 3 ingressi che sono J, K, e Q retroazionato, che è lo stato futuro: nella AND dove c’è K retroazioniamo Q , nella AND dove c’è J retroazioniamo Q’. Quando Q=0, indipentemente dal valore di K, R=0, perchè è l’uscita di una AND dove vi entra Q=0. J, invece sara uguale a K, perchè se Q=0, Q’=1, che entra nella AND insieme al clock, che se funziona è 1, allora S=J. R=0, S=0, allora mantiene lo stato Q=0. R=0, S=1, in uscita Q= Se Q diventa 1, allora Q’=0, e quindi quello che esce dalla AND di sotto, indipendentemente da J è zero, quindi S=0. Compattando: Quando J e K sono zero, Q=Q+; Quando J=0 e K=1, indipendentemente da Q , l’uscita è 0. Quando J=1 e K=0, l’uscita è 1; Quando J e K sono entrambi 1, quando Q=0, Q+=1 e quando Q=1, Q+=0: commuta la memoria. Quindi possiamo dire che si comporta come un SR nelle prime tre configurazioni (J=S e K=R); cambia in corrispondenza della condizione 11 che nell’SR era indeterminata, qui ha un comportamento deterministico e cambia il contenuto della memoria. Equazione caratteristica: Ci dice come evolve la macchina sulla base degli ingressi. Due implicanti primi essenziali che sono dei subcubi di ordine 1: La tabella di pilotaggio ci dice come dobbiamo pilotare J e K per avere questi cambiamenti di stato. Analizziamo le configurazioni:
T sta per Toggler che vuol dire bilancio, perche il suo funzionamento quando abbiamo due uni in ingresso oscilla in continuazione. Ha sempre come base il JK ed è caratterizzato dal fatto che J e K sono cortocircuitati, cioè sono lo stesso ingresso. Usiamo come base il JK perchè nell’SR la combinazione 11 non è ammissibile e funzionerebbe solo con 1 e 0. Di questa tabella non saranno ammissibili tutte, ma solo le righe in cui J=K:
Dispositivo sincrono, ma con un sincronismo molto meno dilatato, di tipo Edge triggered, che viene abilitato al cambiamento di stato sul fronte del clock, cioè quando il clock o sale da 0 a 1 (fronte di salita = positive edge triggered) o quando scende da 1 a 0 (fronte di discesa = negative edge triggered). Il flip flop è un dispositivo che ha dell’hardware dentro, quindi ha bisogno di un certo tempo per leggere il clock che lo abilita per poter funzionare correttamente e leggere gli ingressi. Il clock percorre in modo impulsivo il fronte di salita così come quello di discesa, quindi non avrebbe il tempo il dispositivo di leggere gli ingressi, quindi serve un ritardo per mantenere il clock abilitato e permettere al dispositivo di leggere gli ingressi. Questo ritardo di salita o di discesa, a seconda che il dispositivo sia positive o edge triggered, sarà quello necessario per leggere gli ingressi. Sfruttiamo il ritardo di salita o di discesa per leggere gli ingressi. Il flip flop master slave è costituito da una cascata di due gated latch: uno funziona da master l’altro da slave. Mettiamo due gated latch in cascata in modo tale che le uscite di uno siano gli ingressi del successivo e che il dispositivo sia clockato dallo stesso segnale di temporizzazione, il primo normale e l’altro negato. Chiamamo con C1 il clock che va al primo elemento di memoria e C2 il clock che va al secondo, che è il complemento di C1. Per semplicità di trattazione trascuro il ritardo introdotto dall’invertitore. Considero due positive lever triggered. Supponiamo che inizialmente la condizione memorizzata sia 0 e supponiamo di settare la macchina e di porre J=1 e K=0 (ci aspettiamo un cambiamento di stato). Quando il primo gated latch riesce a leggere l’10, nonappena il clock va ad 1, legge 10 e mi da un 1 in Q1. Questo 1 arriva nel secondo latch e si ferma perchè il C2 risulta 0. Q1=1 rimane là finchè lo slave non viene abilitato alla lettura dal clock, cioè nonappena il C2 sale. Avremo quindi Q2=Q=1. Vedrò che l’uscita cambia rispetto alla variazione degli ingressi quando il clock è sul fronte di discesa. Partendo da due level triggered abbiamo realizzato un negative edge triggered, che commuta sul fronte. Se volessi fare un positive edge triggered, mi basterebbe negare il clock.
I flip flop edge triggered vengono realizzati producendo, o fisicamente, o funzionalmente, la derivata del segnale di clock. Genera un impulso (fisico o funzionale) in corrispondenza di un fronte. I fattori che differenziano i bistabili sincroni riguardano due aspetti:
Struttura generale di una macchina sequenziale (Huffman):
Supponiamo di avere una macchina a stati finiti che risulta essere caratterizzata da un solo ingresso e una sola uscita. L’ingresso è una sequenza di bit comunque nulla e idem l’uscita. La macchina ha il compito di riconoscere la sequenza (riconoscitore di sequenza). Nonappena arriva la sequenza 011, la macchina che normalmente ha l’uscita zero, deve commutarla a 1. Sintesi di una FSM sincrona: dalle specifiche al diagramma di flusso Arriva il primo fronte di clock, la macchina elabora l’ingresso, fornisce l’uscita, si porta in un nuovo stato ed è pronta per il successivo impulso di clock, dove legge l’ingresso, lo elabora, produce l’uscita ecc.. I vari impulsi di clock, quindi, devono essere opportunamente distanziati per fare in modod che venga prodotta l’uscita e dia il giusto risultato. Automa di Mealy Supponiamo che l’uscita sia funzione dello stato e dell’ingresso. Questo dignifica che dovremo legare l’uscita allo stato in cui si trova la macchina, ma anche agli ingressi che in quel momento riusciamo ad applicare. Diamo un significato agli stati cercando di metterne meno possibile perchè dal numero di stati dipenderà il numero degli elementi di memoria e quindi la complessità della macchina. Stato A = non è arrivato alcun bit utile per la sequenza (deve arrivare 0) Se arriva 1, ritorno in A perchè non è utile per la sequenza, con uscita 0. Se arriva 0, vuol dire che è arrivato il primo bit utile della sequenza e mi sposto in un altro stato B, con uscita 0. Stato B = è arrivato il primo bit utile (0). Se arriva 0, la sequenza si è interrotta, ma questo secondo zero è come se fosse il primo bit utile per la sequenza ( “nonappena riconosce”) quindi rimango in B, con uscita 0. Se arriva 1, è il secondo bit utile alla sequenza, mi sposto in un altro stato C con uscita 0. Stato C = è arrivato il secondo bit utile (1). Se arriva 0, lo utilizzo come primo bit della sequenza e la macchina si riporta nello stato “è arrivaro il primo bit utile”, cioè lo stato B, con uscita 0. Se arriva 1, chiudo la sequenza e produco un 1 in uscita, la macchina si resetta portandosi nello stato A con uscita 1. Automa di Moore In questo caso, l’uscita non dipende dall’ingresso, ma è solo funzione dello stato. Stato A = non è arrivato alcun bit utile e l’uscita è 0. Se arriva 1, non è utile all’inizio della sequenza e rimango in A. Se arriva 0, è arrivato il primo bit utile e mi sposto nello stato B. Stato B = è arrivato il primo bit utile e l’uscita è 0. Se arriva 0, è sempre il primo bit utile e rimango in B. Se arriva 1, è arrivato il secondo bit utile della sequenza e la macchina si porta nello stato C. Stato C = è arrivato il secondo bit utile con uscita 0 Se arriva 0, torno in B perchè è il primo bit utile. Se arriva 1, è il terzo bit utile e mi sposto in D. Stato D = è arrivato l’ultimo bit utile e l’uscita è 1 Se arriva 0, torno in B. Se arriva 1, torno in A e ricomincio la sequenza.
Minimizzazione del numero di stati Lo scopo della riduzione del numero degli stati consiste nell’individuare la macchina minima equivalente a quella data. La macchina minima equivalente è quella macchina che è funzionalmente equivalente a quella data ed ha il numero minimo di stati. La macchina M1 è equivalente a M2 quando, in corrispondenza degli stessi ingressi, qualunque essi siano, produce la stessa uscita. Si ed Sj di una macchina M sono distinguibili se esiste almeno una sequenza finita di ingresso che applicata ad M produca sequenze di uscita diverse a seconda che si consideri Si o Sj come stato iniziale. Se la sequenza di ingresso è lunga k bit, gli stati Si e Sj si dicono k-distinguibili. Gli stati che non sono k-distinguibili sono detti k-equivalenti. Se gli stati sono k-equivalenti, qualunque sia k, sono equivalenti. Il mio obiettivo è lasciare nella macchina solo gli stati distinguibili e togliere gli stati equivalenti, perché non mi danno un’informativa differente sul comportamento della macchina, ma potrebbero implicare un numero di elementi di memoria in più. Si e Sj di una macchina M sono equivalenti se applicando ad M una qualsiasi sequenza di ingresso, comunque lunga, si produce la stessa sequenza di uscita, indipendentemente che sia Si e Sj lo stato iniziale di applicazione alla sequenza di ingresso. L’equivalenza tra stati è una relazione di equivalenza. Formalmente, una relazione di equivalenza induce sull’insieme degli stati una partizione di equivalenza tale che:
Metodo della tabella triangolare Vado ad individuare le classi di stati più grandi equivalenti tra di loro (classi di massima equivalenza = il più grande insieme di stati equivalenti tra di loro). È triangolare e non quadrata per la proprietà riflessiva (1 e 1 sono equivalenti) e proprietà simmetrica ( se 1 e 2 sono equivalenti, lo sono anche 2 e 1). Per trovare il massimo equivalente devo verificare se l’unione delle coppie mi da tutti gli stati della macchina e che l’intersezione sia nulla. Inoltre, per la relazione di equivalenza deve valere anche la proprietà transitiva: se ho 1,2 e 1,5 se non ho sbagliato a realizzare la tabella, sicuramente devo trovare anche 2,5, se non lo trovo vuol dire che ho sbagliato qualcosa nell’analisi della tabella. A questo punto posso realizzare l’equivalente 1,2,5 che è costituito da stati tra di loro a coppie tutti equivalenti. Ci sono poi 3,6 e 3,7 quindi ci deve essere anche 6,7. L’equivalente sarà quindi anche 3,6,7. Inoltre consideriamo 4,8 da solo. Ora, quali saranno gli stati che andremo a considerare gli stati della macchina minima? Quelli che godono di due proprietà:
Assegnamento Siccome lo stato è la situazione in cui si trova la macchina, il contenuto della memoria, e noi sappiamo che i flip flop possono memorizzarei dei bit 0 e 1, allora la fase di assegnamento consiste nell’andare a codificare gli stati tramite un codice costituito dal n di bit che dipenderà da quanti sono gli stati. Nella macchina minima abbiamo tre stati, che devono essere distinguibili, ovvero devono dire cose diverse. Quindi andremo a codificare i tre stati con tre codici diversi. Per fare ciò avremo bisogno di minimo due bit. Esiste una codifica ottima per fare in modo che la parte combinatoria costi il meno possibile, ci sono metodi che permettono di ottimizzare la parte combinatoria, ma sono lunghissimi e molto spesso non producono grandissimi risultati. Per questo non li facciamo, tanto comunque il circuito funziona lo stesso. Codifico A con 00, B con 01 e C con 10. Questo vuol dire che quando sto nello stato A, in un flip flop c’è 0 e nell’altro 0, quando sono in B in uno c’è 0 e nell’altro 1 ecc. Quindi quando si va a codificare, il numero di bit sarà sicuramente uguale al numero di flip flop. Scelta dell’elemento di memoria Si può scegliere qualsiasi elemento di memoria, basta che sia un flip flop, perchè voglio un segnale di temporizzazione. Vediamo come la scelta del flip flop impatta sulla macchina. Supponiamo inizialmente di scegliere un flip flop di tipo D. Questo flip flop è caratterizzato dal fatto che lo stato futuro coincide con l’ingresso. Abbiamo bisogno di due elementi di memoria e quindi di D1 e D2 che coincidono con Y1 e Y2. Possiamo codificare A con 00 perchè i flip flop hanno anche degli ingressi che sono il clear e il preset, con i quali ci assicuriamo che il contenuto precedente della memoria sia stato cancellato e di ripartire da zero. Quindi non è una forzatura, ma si puó fare. Devo andare a sintetizzare tre funzioni (D1, D2 e z) di tre variabili (x, y1 e y2). La z nella sua funzione booleana dovrà contenere lo stato (y1, y2 o tutti e due) e per forza la x perchè macchina di Mealy. Se non la contiene ho sbagliato perchè l’automa è di Moore.
Schema logico