VHDL (III)

Dopo VHDL I e VHDL II siamo in grado di scrivere un programma in vhdl e quindi possiamo progettare HW. In realtà’ la progettazione dell’HW non si esaurisce nella conoscenza del linguaggio di programmazione (e’ come se dicessimo che noto il dizionario siamo in grado di scrivere in italiano).

VHDL III

L’HW dipende da moltissimi fattori e anche quando un progetto e’ dimensionato correttamente potrebbe non essere facilmente riproducibile oppure il suo costo non lo rende concorrente con altre soluzioni e cosi’ via.
In ogni caso non stiamo discutendo di progettazione HW (perlomeno non completamente) e quindi ritorniano sui binari piu’ consoni, cioe’ il VHDL. Due considerazioni prima di fare un ulteriore esercizio che ci proiettera’ nell’olimpo della progettazione vhdl, e cioe:
- Il progetto sincrono
- Ormai molte fpga hanno la disponibilita’ di piu’ clock ma non lasciamoci ingannare lavorare con piu’ clock e’ molto difficile e i risultati non e’ detto siano buoni. La mia raccomandazione e’ utilizzare un solo clock per tutto il circuito, non preoccupiamoci se sembra che cosi’ facendo spendiamo risorse in piu’ vedrete che ci saranno ripagate con gli interessi.
- Le alee
- Durante gli studi ci viene insegnato che la commutazione contemporanea di piu’ segnali puo’ dar luogo a fenomeni di alee, cioè stati transitori che possono generare problemi al resto del circuito.
Fermiamoci e pensiamo a cosa puo’ accadere se ad un and con due ingressi passiamo dalla configurazione di 10 a quella di 01, non c’e’ dubbio che lo stato finale sara’ lo stesso e cioe’ 0 ma nel passaggio?

Se il segnale che stava ad 0 e’ piu’ veloce nel passare nello stato 1 di quello che da 1 passa a 0 accade che per un breve tempo i due ingressi si troveranno ad 1 e l’uscita anche. La durata di questo stato puo’ essere piccola tanto da creare problemi di clock indesiderati o violazioni di larghezza di impulso.
- La Metastabilità
- Anche questo e’ un fenomeno che viene studiato ma alcune volte sembra che ce ne dimentichiamo.
Vediamo il fenomeno nasce quando il tempo di set-up o di hold o il minimum pulse width vengono violati. L’elemento di memoria reagisce commutando o meno in uno stato temporaneo dal quale esce producendo quindi un impulso non voluto. Dalla bibliografia sembrerebbe anche che il livello raggiunto in questo stato metastabile non sia canonico.
Qual’è la soluzione:
Fare una registrazione del segnale prima di andarlo ad usare, il razionale e’ che se il registro entra in uno stato metastabile più lungo del periodo di clock il cambiamento verrà confermato dal secondo clock, se invece lo stato e’ di durata inferiore il secondo clock non lo potra’ vedere e quindi tutto funziona.
I piu’ precisi potranno sostenere che la metastabilita’ puo’ avere anche una lunga durata (al limite un tempo infinito) ma questo non e’ quello che accade nella pratica.

Bene abbiamo dato gli ultimi consigli (non ve ne abbiate a male) e quindi possiamo passare ora ad un esercizio dove impiegheremo un componente (in realta’ una macro) che viene di solito usata nei grandi progetti.
Sto parlando di una memoria doppia-porta oppure un fifo (discuteremo del fifo perche’ e’ piu’ affascinante).
I due oggetti sono tra loro simili in quanto permettono a due processi di accedere la stessa area di memoria senza disturbarsi, il fifo poi e’ piu’ affascinante perche’ da’ l’immagine che il dato entrato dalla porta in scenda fino a portarsi nella porta out, in realta’ il dato sta’ fermo li senza muoversi e sono I puntatori di memoria che fanno tutto.
A che serve un fifo, forse non l’ho ancora detto first-in first-out, cioe’ il primo dato entrato e’ il primo ad uscire. esiste un componente complementare? Si, si chiama lifo (last in first-out) e l’esempio di applicazione piu’ noto e’ lo stack di un processor, l’ultima call fatta sara’ al prima a cui il processore ritorna.
Bene torniamo al fifo, molto spesso dobbiamo catturare dei dati ad una velocita’ che non ne permette l’elaborazione, in questo caso il processo consiste nell’acquisizione e nella successiva elaborazione.
Supponiamo che un nostro piccolo micro-controllore (es. un pic) debba acquisire ad alta velocita’ una serie di dati per poi elaborarli, l’acquisizione potra’ essere fatta da una fpga che velocemente riempie un fifo che poi il micro alla sua velocita’ legge.

Nei file allegati troverete un esempio di fifo.

Leggi anche: VHDL I e VHDL II

ALLEGATO

vhd per corso vhdl

Scarica subito una copia gratis
Tags:,

3 Commenti

  1. Avatar photo gabi 24 Ottobre 2008
  2. Avatar photo Federico.ponti 30 Gennaio 2015

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend