Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

9
voti

Progettazione di una macchina a stati finiti (Mealy)

Indice

Il metodo

Una recente richiesta al Forum poneva il problema dell'applicazione di una macchina a stati finiti (Finite State Machine, FSM) per il trattamento di una stringa seriale di 8 bit.

Fra le pubblicazioni disponibili in Internet, mi è sembrata ben fatta questa, a cui rimando per eventuali approfondimenti.

Per comodita', riproduco qui le due principali immagini che in questa pubblicazione illustrano la struttura della FSM secondo Mealy:

In sintesi, le variabili di ingresso X vengono legate ai segnali Q provenienti da un set di Flip-Flop (che rappresentano i vari stati del sistema) per ottenere una "decodifica" in uscita. La parte centrale della FSM e' costituita dalle relazioni fra "ingressi" ed "uscite" rappresentabili con una tabella di corrispondenza:

Come si vede la tabella fa corrispondere le combinazioni degli ingressi (indirizzo di riga) con lo stato delle uscite, ma anche con le abilitazioni dei singoli Flip-Flop, il che significa che è possibile pilotare quella che ad ogni passo (cioè dopo l'arrivo del fronte d'onda del clock) sarà l'uscita Q di ogni FF.

L'implementazione di questa tabella può poi essere realizzata con ROM (come indicato dalla pubblicazione in oggetto) o da circuiti logici combinatori per ogni variabile d'uscita.

Un semplice esempio di applicazione

Per vederne un'applicazione pratica, propongo la progettazione di un circuito che decodifichi un semplice codice a 3 bit, in cui il primo bit sia sempre "1" ed il terzo sempre "0": è evidente che il "dato" trasmissibile si limita al secondo bit e potrebbe rappresentare la tramissione di un comando seriale ON/OFF su una linea (doppino fisico o collegamento radio).

E' evidente che il codice si riduce a 4 possibili stati : "110", "100", "111", "101, di cui gli ultimi 2 rappresentano "errori" (non conformi al codice stabilito) e quindi devono dar luogo ad una segnalazione di rigetto (ER).Al contrario dovremo avere un consenso, (Ready, RD)

Con 4 possibili stati possiamo ricorrere a soli 2 FF, che scegliamo di tipo D (questa scelta condizione ovviamente poi la stesura della tabella). Con l'unico ingresso X e i 2 FF, avremo quindi una tabella di 8 righe, mentre le colonne saranno 6, cioè le abilitazioni dei 2 FF (E1,E2), la memorizzazione del dato (Set, S1 e Reset, R1) e la memorizzazione del consenso (Ready, RD) o dell'errore (ER).

Passiamo ora alla sua stesura, supponendo di partire da una condizione iniziale di tutti "0"

E' chiaro che finchè non arriva un segnale X="1" si rimarrà nella condizione iniziale: solo con questo lo stato di abilitazione del primo FF cambia. All'arrivo del primo clock (fronte d'onda positivo) Q1 diventera' quindi "1" e la sequenza seguirà alla riga 3 o 4 (in funzione dello stato di X).


Il meccanismo dovrebbe ora essere evidente e non resta che implementare la tabella con i circuiti logici che la realizzano.

Il segnale di abilitazione E1 ora visto sarà infatti dato da : \qquad  E1 = \bar {Q2} \cdot \bar {Q1}\cdot X (cioè un AND delle uscite negate del primo e del secondo D-FF con l'ingresso X). Poichè nella tabella vi sono altre abilitazioni della stessa, queste dovranno essere messe in OR con quella ora vista ( + Q2 \cdot \bar {Q1}).

Nello stesso modo vanno trattati i comandi di Set e Reset dei FF d'uscita (questi di tipo JK, ma utilizzati come SR).

In definitiva siamo in grado di stendere tutto lo schema della nostra macchina (in MicroCap9):

Con il particolare delle uscite:

Si riconoscono immediatamente i D-FF U1 ed U2, le sui uscite determinano i segnali Q1 eQ2 della tabella, mentre i JK-FF U4 ed U5 servono alla memorizzazione delle uscite. La rete di elementi logici immediatamente alla destra di U1 ed U2 è l'implementazione della tabella di Q1 e Q2, mentre quella a sinistra dei FF di uscita è ovviamente riferita alla tabella di Set-Reset rispettivamente del dato e del consenso.

La stesura in Microcap9, ci consente anche la simulazione diretta dell'intera macchina, simulazione che ci permetterà di controllarne il funzionamento.

La simulazione

Nello schema precedente compare sia un generatore di Clock (X1), sia uno "stimolatore" (U7), in grado di riprodurre l'andamento del codice d'ingresso X desiderato.

Inviamo allora 2 messaggi: il primo costituito da "110" (Dato ON) ed il secondo da "100" (Dato OFF). Ecco la simulazione

Dall'alto in basso si vedono: i codici ricevuti (X), il Clock, lo stato dei FF (Q1 e Q2) ed infine l'attivazione del comando (Dato, prima ON e poi OFF) e del consenso (Ready)

Per completezza vediamo anche il caso di trasmissione errata (3° bit ="1"):

Considerazioni

Si è voluto mostrare l'approccio di un progetto di circuito sequenziale con un metodo più accademico che pratico. Indubbiamente dal punto di vista concettuale è importante conoscere una procedure generale e rigorosa, ma la disponibilità di integrati sempre più complessi, semplifica spesso le soluzioni.

(Nel caso particolare, l'adozione di Shift Registers con controllo di conguenza, semplificherebbe drasticamente lo schema).

E' invece significativo, e da sottolineare, la possibilità di simulazione che fa risparmiare considerevolmente i tempi di progettazione.

0

Commenti e note

Inserisci un commento

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.