Moka Programmabile
Rete sequenziale sincrona
per la gestione di una moka programmabile.
VHDL
Segnali - lista
INPUT






SET_CLOCK
SET_TIMER
SWITCH_HMS
UP
PRESS
CK
OUTPUT








SECONDS(7:0)
MINUTES(7:0)
HOURS(7:0)
TIMERS(7:0)
TIMERM(7:0)
TIMERH(7:0)
ERROR
HEAT
Segnali - descrizione
INPUT






SET_CLOCK: finché il suo valore logico è '1', da la possibilità di
impostare l'orario corrente all'interno della moka mediante il
pulsante di selezione SWITCH_HMS e il pulsante UP.
SET_TIMER: finché il suo valore logico è '1', da la possibilità di
impostare l'orario del timer (l'orario in cui fare il caffè),
anch'esso utilizza i pulsanti SWITCH_HMS e UP.
SWITCH_HMS: permette di spostare la selezione del “campo”
(Hours, Minutes, Seconds) da aggiornare.
Il cambiamento di “campo” si ha al rilascio del bottone.
UP: permette (al rilascio) di aumentare di 1 il valore del “campo”
attualmente selezionato.
PRESS: quando il suo valore logico è '1', indica che la moka è
presente sulla piastra.
OUTPUT

SECONDS(7:0): secondi dell'orologio reale.

MINUTES(7:0): minuti dell'orologio reale.

HOURS(7:0): ore dell'orologio reale.

TimerS(7:0): secondi in cui la moka dovrà partire

TimerM(7:0): minuti in cui la moka dovrà partire

TimerH(7:0): ora in cui la moka dovrà partire

CK: segnale di clock. Che per un corretto funzionamento dell'orologio
deve essere alla frequenza di 100 Hz.

ERROR: il suo valore logico va a '1' se durante le fasi di
SET_CLOCK/SET_TIMER si è acceduto il limite per un campo
(23 per le ore, 59 per minuti e secondi).
HEAT: il suo valore logico va a '1' quando l'orario corrente diventa
l'orario impostato nel timer e permane ad 1 finché il caffè
non è pronto (cioè, per 10 minuti).
VHDL - introduzione
Per la realizzazione della Moka Programmabile in VHDL sono stati creati 4
process:

digitalClock

digitalClockChecker

heatStarted

updateOutSignals
Dato che in VHDL è impossibile poter modificare il valore di un segnale
d’uscita da due o più processi differenti (in quanto fisicamente impossibile),
ho optato per la seguente scelta:
Uso di segnali interni per ogni modulo (e ogni modulo è specializzato in
un compito) e update dei segnali d’uscita (reali) da un processo a parte, che
non fa altro che prendere i valori dei segnali interni e assegnarli alle
corrispondenti uscite.
VHDL - digitalClock
Il processo digitalClock è l’incaricato della gestione dei segnali
interni dell’orologio reale.
I sui compiti sono:

scandire correttamente l’orario

fornire ad ogni minuto un impulso di clock su un segnale interno
(utilizzato in un modulo seguente)

aggiornare i segnali interni dell’orario nel caso di modifica
dell’orario da parte dell’utilizzatore della moka (modifica fatta
tramite il processo digitalClockChecker).
Il codice del processo nel file MokaProgrammabile.vdh è
commentato.
VHDL - DigitalClockChecker
Questo process è incaricato di:

Aggiornare i segnali interni dell’orario

Impostare e memorizzare il timer (ora in cui fare il caffè)

Controllare la validità dell’orario impostato

Segnalare eventuali errori di validità
In questo process è stato fatto un grande utilizzo di variabili interne al process
stesso e di costanti per migliorare la leggibilità del codice.
Inoltre è stato definito un tipo di dato per gli stati del pulsante SWITCH_HMS e
del pulsante UP, per evitare l’utilizzo di tipi di dato predefiniti che per lo scopo
in questione sarebbero stati inutilmente capienti.
Il codice del processo nel file MokaProgrammabile.vdh è commentato.
VHDL - updateOutSignals
E’ il processo incaricato di gestire i segnali interni modificati in altri
processi e di aggiornare l’output sue segnali di uscita corretti.
Il codice del processo nel file MokaProgrammabile.vdh è commentato.
Simulazione - introduzione
Il testbench della moka programmabile realizzata in VHDL è lo stesso
utilizzato per la realizzazione mediante schematico.
Sono stati utilizzati gli stessi nomi e gli stessi colori.
Le due simulazioni sono identiche.
Il testbench consiste nel:

Impostare un orario per l’orologio (reale)

Impostare un orario per il timer (ora per fare il caffè)

Verifica del funzionamento della piastra (heat = ‘1’ per 10 minuti)

Verifica della correttezza della scandire del tempo
Simulazione – Panoramica globale

Si può notare come la piastra HEAT si accenda per 10 minuti.
Nelle prossime slides si analizzerà nel dettaglio l’impostazione
dell’orario (quindi test del processo DigitalClockChecker), dello
scorrere del tempo (quindi processo DigitalClock) e si mostrerà che la
piastra si è accesa all’orario prestabilito.
Simulazione – impostazione orario
Il segnale SET_CLOCK è attivo mentre il segnale SET_TIMER è attivo (come da
vincoli, si immagini che fisicamente l’attivazione dei due pulsanti in contemporanea
sia impossibile).
Alla pressione del tasto UP ciò che è stato selezionato mediante switch_hms viene
incrementato di 1.
Si può notare come il tempo di pressione sia di UP, che di SWITCH_HMS, non sia
rilevante (Le onde create con UP sono tutte uguali solo perché a livello di codice,
sono state generate mediante un ciclo for).
Sono state impostate come orario attuale le 12:05.
Simulazione – impostazione
timer (ora per fare il caffè)
I vincoli sono quelli della slide precedente, e anche il funzionamento.
Ora è attivo l’ingresso SET_TIMER, così facendo viene impostata l’ora del
timer.
Sono state impostate le 12:10.
Quindi, tra 5 minuti esatti la piastra HEAT dovrà andare a 1 e rimanere tale
per 10 minuti. Giusto il tempo di fare il caffè.
Simulazione – l’ora del caffè
Nell’istante in cui le ore ed i minuti si eguagliano (da notare in quest’immagine il
cambio di minuto da 9 a 10) con quelli del timer, il segnale HEAT va ad 1.
E come si può notare dalla slide «Simulazione – panoramica globale», dura
esattamente 10 minuti d’orologio.
Simulazione – trascorsa un’ora
A verifica del funzionamento del componente DigitalClock, si può notare come
allo trascorrere dell 59-esimo secondo del 59-esimo minuto, l’orario passi
dalle 12 alle 13.
Il numero di secondi trascorsi nella simulazione non è 3600 dato che l’orario iniziale
non erano le 12:00 ma le 12:05, quindi 3600 – (5*60) = 3600 – 300 = 3300.
Il secondo di scarto è dato dal tempo impiegato nella simulazione per impostare l’orario.
Le simulazione presenti sono tutte behavioral, quindi non tengono conto dei ritardi
Instrinsici della tecnologia usata.
Simulazione – post route

Della simulazione post route mostrerò semplicemente il
confronto tra le due immagini «globali» della
simulazione. Così da evidenziare le differenze.

La simulazione post route è state eseguita per soli 1600
secondi, in quanto il tempo di simulazione sarebbe
risultato eccessivo.
Simulazione - confronto
Behavioral:
Post Route:
Simulazione - differenze

La differenza più evidente è che nella simulazione post route il
cambio tra un minuto e l’altro non è immediato.
Si generano delle forme d’onda «rapide» di transizione tra un valore
e l’altro, anziché essere «pulite» come nella simulazione
behavioral.

Ulteriori differenze non sono visibili dalle immagini, non solo per il
fatto che essendo immagini globali sono poco dettagliate, ma
soprattutto perché l’uso di un segnale di clock a 100Hz («lento»),
minimizza le differenze, in quanto la rete ha tempo di stabilizzarsi
tra due fronti positivi, evitando così casi di meta-stabilità.
Scarica

Presentazione