VHDL for beginners: Le Macchine a Stati Finiti

Nelle precedenti lezioni abbiamo visto come il VHDL mette a disposizione alcuni costrutti per realizzare i circuiti sequenziali. In generale un circuito sequenziale, se ben definito, può essere modellato tramite le macchine a stati finiti. Le FSM sono un concetto molto fondamentale e forte nello sviluppo dei componenti e in questo articolo cercheremo di fornire tutti gli strumenti base per utilizzare tale modellazione con il codice VHDL e quindi come progettare ed implementare una FSM su FPGA. Al termine della parte teorica, vi proporrò un esempio di FSM abbastanza semplice e intuitivo, di cui proveremo a sviluppare la parte VHDL e ne testeremo il comportamento con un testbench in modo da mettere in pratica tutte le competenze del VHDL acquisite nelle precedenti lezioni. Il comportamento di un qualsiasi circuito sequenziale può essere rappresentato con riferimento alle macchine a stati finiti. Esse, di fatto, sono un tipica tecnica di modellazione del comportamento di componenti che presentano una sequenza di esecuzione e di attività ben precise. Ricorrendo alle FSM si garantisce una progettazione e implementazione più chiara ed efficace. Una FSM è caratterizzata dalle seguenti parti: input, output, stati simbolici, funzione per selezionare il prossimo stato e funzione per generare l'output. In particolare, la modellazione tramite FSM può rappresentare un qualsiasi tipo di oggetto in modo molto generico, ma nel caso specifico di circuiti sequenziali si parla di macchine o meglio automi deterministici con output.

Introduzione

Lo stato di una FSM è una condizione interna unica del sistema e tiene conto della storia della macchina e quindi dipende di fatto da come ha raggiunto quel preciso stato. La conoscenza dello stato è un elemento fondamentale per determinare la futura uscita alla ricezione dei prossimi input. Il nuovo stato è determinato da una funzione che lavora sullo stato corrente e sugli input ricevuti dalla FSM. La funzione di output governa i segnali di uscita e può lavorare in diversi modi. Di fatto abbiamo principalmente due tecniche diverse per la funzione di output che sono dette FSM di Mealy e di Moore. Queste due tecniche sono differenti principalmente per le funzioni degli output che nella macchina di Moore dipendono dallo stato corrente, mentre nella macchina di Mealy sono associate alle transizioni tra stati. Questo significa dire che per una macchina di Moore, definito lo stato, si conosceranno le uscite, mentre per una macchina di Mealy le uscite sono legate alla tipologia di transizione da uno stato all'altro (dunque dallo stato e dagli ingressi che determinano la transizione). In parole più semplici, data una macchina di Moore di cui è conosciuto lo stato, allora si conosce l'uscita (o le uscite) e in termini tecnici si dice che l'uscita è codificata nel valore dello stato. Differentemente, nelle macchine di Mealy le uscite cambiano in corrispondenza delle variazioni di stato. A questo punto ci si può chiedere quale tecnica preferire tra le due? In effetti, anche se la macchina di Moore risulta da preferire in quanto è possibile controllare in modo più accurato le attivazioni temporali e le uscite, la macchina di Mealy consente una trattazione molto più accurata degli output quando sono funzione degli ingressi. Seppur sono due modellazioni differenti, le due si possono ritenere equivalenti e ogni automa può essere modellato in entrambi i modi. Questo articolo non vuole entrare nel dettaglio delle equivalenze e dei vari teoremi associati, ma abbiamo semplicemente introdotto delle nozioni che ci serviranno a valutare le differenze implementative in VHDL per le due modellazioni. Senza dividerci tra tifosi di Moore o di Mealy, nella pratica qualsiasi FSM presenterà un'implementazione che sarà combinazione delle tecniche relative alle due tipologie. Progettare una FSM significa dire partire da una rappresentazione astratta o meglio simbolica dei vari stati (in genere rappresentati con dei cerchi), delle varie transizioni o archi, delle condizioni di transizione relative ai vari archi e delle possibili uscite. Tale rappresentazione in genere prende il nome di pallogramma di una FSM ed è un'utile rappresentazione da cui partire per ottenere una chiara rappresenzatione della FSM per procedere poi all'implementazione in VHDL. L'eventuale assenza di condizioni di transizione fa sì che la transizione avvenga al termine dell’esecuzione delle istruzioni dello stato.

Encoding degli stati

Un aspetto molto particolare nella codifica di una FSM è la scelta della tecnica da utilizzare per codificare lo stato. Esistono diversi stili di codifica ognuno dei quali presenta delle peculiarità. Lo stile di codifica più semplice è quello binario, ossia ogni stile è codificato con un numero sequenziale e quindi una sequenza di bit. Tale tecnica consente di ottimizzare le risorse (ad esempio se abbiamo 4 stati riusciamo a codificarli con solo 2 bit e quindi 2 elementi di memoria). Se invece pensiamo di utilizzare un elemento di memoria per ogni stato allora avremo lo stile di codifica detto one-hot, in quanto soltanto un bit del vettore di stato sarà posto a 1 mentre tutti gli altri a 0 (ritornando all'esempio precedente abbiamo che per 4 stati ci saranno 4 elementi di memoria). Si comprende subito la differenza tra le due tecniche di stile, in quanto la prima risparmia risorse, mentre la seconda richiede maggiori risorse. Di fatto la tecnica one-hot è molto più veloce e consente una serie di semplificazioni in caso di modifica del diagramma della macchina a stati. L'utilizzo della modellazione FSM è molto adeguato nei sistemi in cui c'è una schedulazione ben strutturata con [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2309 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Una risposta

  1. Avatar photo Maurizio Di Paolo Emilio 4 Gennaio 2018
Seguici anche sul tuo Social Network preferito!

Send this to a friend