VHDL – come tenere i programmi sotto controllo

VHDL tutorial  - come tenere i programmi sotto controllo

Nelle precedenti volte (VHDL Tutorial) si e’ parlato di come sia possibile avvicinarsi al VHDL e quali sono i suggerimenti che possono essere dati. Fra questi si e’ piu’ volte detto che una buona divisione dell’intero programma sia senz’altro piu’ semplice da specificare, implementare e debuggare. Si e’ detto inoltre come sia indispensabile impiegare, in maniera estensiva, le unita’ di controllo (macchine a stati finiti).

Ma un progetto grande, soffre inevitabilmente di una malattia che si chiama integrazione, la difficolta’ di integrazione dipende da come le singole parti siano state sviluppate, da come esse siano state testate ma senz’altro dipende dal loro numero, piu’ e’ alto il numero dei componenti piu’ sara’ difficile e lungo il processo di integrazione complessivo.

E’ pero’ vero che se l’unita’ di controllo e’ progettata bene il suo stato ci dice esattamente cosa questa sta aspettando o facendo e ci da’ anche informazioni su come si sia arrivati nello stato attuale. Quindi risulta evidente che se riuscissimo a leggere lo stato delle varie unita’ di controllo avremmo tante informazioni preziose.

A questo punti sorgono pero’ due problemi nella lettura degli stati il primo consiste in come possono essere letti e il secondo su come mettere in relazione fra loro le varie unita’ di controllo. Il primo problema potrebbe essere risolto impiegando un certo numero di pin del componente connessi ad un analizzatore di stati logici, pero’ si capisce bene come, specie per certi tagli di FPGA, non siano sempre disponibili tanti pin. Il secondo problema richiede ancora piu’ pin e di fatto rende questa tecnica poco fattibile.

Una possibile soluzione, che sperimentata ha dato ottimi risultati, consiste nel tracciamento degli stati effettuato all’interno della FPGA stessa. In pratica si usa una memoria, ormai disponibile su tutti i tagli di FPGA, e la si impiega per memorizzare lo stato. Chiaramente possiamo memorizzare gli stati di tutte le unita’ di controllo che abbiamo all’interno del progetto o di solo parte di esse, oppure possiamo memorizzare segnali correlati con i vari stati, il tutto ha il magico aggettivo di programmabile.

Una volta memorizzati gli stati questi possono essere letti mediante una sola interfaccia (anche seriale se ci sono problemi di pin). Bene ora abbiamo il modo per memorizzare i nostri stati ma e’ necessario iniziare o fermare la memorizzazione di questi quando avviene un qualche fenomeno (se il tutto e’ fatto bene bastera’ selezionare un particolare stato, altrimenti potremo usare un segnale che raggiunge uno specificato valore).

Si consideri che questo e’ quanto fa’ un’analizzatore di stati logici, ovviamente da un prodotto ci si aspetta, come in effetti e’, anche altre funzioni che vedremo in seguito, ma lo strumento non avra’ mai la programmabilita’ che ci occorre e quindi ci si trovera’ sempre nella necessita’ di sviluppare qualcosa di nostro.

Passiamo ora ad una specificazione un po’ piu’ di dettaglio prima di vedere il codice.

VHDL SPECIFICHE

Si intende memorizzare, per una lunghezza di 1024 locazioni (il numero e’ arbitrario) il valore dello stato di 3 unita’ di controllo (anche questo e’ arbitrario) segnalando quando i 1024 record sono pronti per la lettura. Si vuole inoltre iniziare la registrazione quando una delle tre unita’ di controllo arriva in uno specifico stato.
Il programma si compone di due sezioni:

    La prima e’ costituita dall’unita’ di controllo
    La seconda dalla memoria

L’individuazione del momento di iniziare la scrittura (sincronimo) viene realizzato in accordo al seguente algoritmo:
Viene definito per ogni unita’ di controllo un valore di stato impossibile da raggiungersi (per ragioni di semplicita’ useremo lo stesso valore). Questo valore identifica se il valore dello stato per quella UC deve essere usato o meno come sincronismo (in pratica il trigger e’ l’AND di diverse condizioni, questo valore esprime la necessita’ di ignorare lo stato di questa specifica UC). Quindi, in generale, il sincronismo sara’ espresso dall’equaglianza dello stato con una maschera per la specifica UC.
Esempio:
si definisce una word di sincronismo fatta da tre record di 8 bit ciascuno,

    – bit 7 downto 0 UC0
    – bit 15 downto 0 UC1
    – bit 23 downto 16 UC2

Per ciascun record si definisce se abilitato nella comparazione o no scrivendo nella word di sincronismo 0 se UCx non e’ significativa, oppure il valore di sincronismo.

Il programma applica questa maschera di AND alle tre UC selezionando quella/e che andranno in comparazione, inizia quindi la comparazione con i valori correnti degli stati.

Quando la comparazione ha esito positivo (match) si inizia la registrazione. La registrazione ha termine quando la memoria si e’ riempita.

Veniamo al codice:
La prima parte esegue la composizione degli stati delle tre unita’ di controllo in un unico vettore, inoltre viene elaborata la maschera di ricerca.

La seconda parte effettua il controllo di sincronismo abilitando la scrittura nel fifo degli stati.
In allegato c’e’ tutto il progetto VHDL incluso della simulazione.

ULTERIORI FEATURES di VHDL

Se si leggono le specifiche di un analizzatore di stati si notano altre features che sono di estrema utilita’ nel corso della verifica di progetto.

Nel seguito vengono elencate queste features per renderle di discussione qualora si procedesse ad un ampliamento del tracer.

Capacita’ di fermare la registrazione al raggiungimento di un certo stato, il tracciatore cioe’ e’ sempre in registrazione e si ferma quando la condizione di sincronismo e’ raggiunta.

Questo e’ molto utile quando si vuol conoscere non come le unita’ evolvono ma come si sono evolute.
Un’altra feature consiste nel fissare la condizione di sincronismo non su un unico stato ma su l’OR di piu’ di uno (equivale a mettere piu’ breapoint in un programma perche’ non si e’ in grado di predirre il risultato di condizioni di branch all’interno del codice.

Vai in Download per scaricare il Codice – VHDL (come tenere i programmi sotto controllo) (Bisogna essere registrati)

Leggi tutto il Tutorial VHDL

Repost dal 24 marzo 2009

Tags:

Leave a Reply