Newsgroup: it.hobby.elettronica.digitale
Titolo: PIC e metastabilità

Sto valutando la possibilità di utilizzare un PIC per sviluppare un progetto
che da tempo ho in mente. Tuttavia, prima di iniziare ho bisogno di sapere
quanto sia importante il problema della metastabilità che inevitabilmente
potrebbe nascere durante la fase di acquisizione di segnali asincroni
provenienti dall'esterno (es: pulsante). Qualcuno saprebbe dirmi come
reperire le informazioni che mi servono?
Grazie,
    Daniele

Daniele wrote:

Puoi tradurre per i "comuni mortali"? :-)
ciao

 ha scritto nel messaggio
news:M6N_b.22927$IT2.7...@news4.tin.it...

Detta molto velocemente ...
quando devi rilevare un segnale numerico, se la transizione fra i due stati
attivi "1" e "0" o viceversa, non avviene con modalità stabilite la porta
che riceve il segnale può non capire il livello ed entrare in uno stato non
ben definito detto metastabilità che si può risolvere da solo, ma dopo un
periodo di tempo anche esso non predicibile a priori in modo esatto. Il
risultato delle elaborazioni a valle della porta non è quindi attendibile.
Ciao
Pow


Chiedo scusa, tenterò di essere un pò più preciso:
un elemento di memoria sincrono (flip-flop statico o dinamico che sia)
potrebbe entrare in uno stato metastabile, ovvero uno stato in cui l'uscita
non è nè 1 nè 0, e restarci per un tempo più o meno lungo dipendentemente
dalle condizioni che l'hanno portato lì. Tale possibilità si ha in tutti
quei casi in cui non si ha la garanzia del rispetto delle specifiche
temporali (tempo di set-up, hold, ecc.), e quindi, sicuramente, nella
situazioni in cui il segnale in ingresso al flip-flop non è in alcun modo
legato al clock dello stesso (segnale generato da un pulsante).
Spero di essere stato sufficientemenre chiaro, in caso contrario non esitare
a chiedermi ulteriori spiegazioni.
Ciao,
        Daniele


Ti ringrazio per la spiegazione, io ho realizzato molti circuiti con PIC 
utilizzando pulsanti e altri segnali di ingresso asincroni, ma non ho 
mai avuto problemi di malfunzionamento o lettura errata degli 
ingressi... ovviamente sempre usando i normali accorgimenti tipo 
resistenze di pull-up o pull-down se necessarie
ciao

 reperire le informazioni che mi servono?
Se fossi in te non me ne curerei piu` di tanto, essenzialmente per due
motivi:
1) Il problema della metastabilita` puo` dare fastidio soprattutto nel
caso che ci siano piu` flip-flop collegati a un singolo ingresso
asincrono, per cui puo` succedere che i vari FF acquisiscano un valore
differente e che questo ponga il sistema in uno stato illegale. Nel caso
dei PIC gli ingressi vengono campionati da un solo flip-flop, e il tuo
codice si basa su questo unico valore, quindi il peggio che puo`
succederti e` che il tuo programma si basi su un valore sbagliato.
Questo pero` non ha niente a che vedere con le metastabilita` ed e`
semplicemente inevitabile.
2) Anche ammettendo che il problema esista, dubito che in un PIC - viste
le frequenze di funzionamento - si possano avere dei problemi dovuti
alle metastabilita`. La metastabilita`, come qualsiasi fenomeno
statistico, deve essere descritta in termini di probabilita`, una legge
che risponde a una domanda del tipo: "qual'e` la probabilita` che
l'uscita di un flip-flop abbia raggiunto uno stato stabile dopo un tempo
X"? E al giorno d'oggi i "tempi X" hanno l'ordine di grandezza dei
nanosecondi, quindi finche` non ci saranno dei PIC a qualche centinaio
di MHz non mi preoccuperei piu` di tanto.
A proposito del punto 2, ricordo un'interessante application note della
Xilinx in cui hanno tracciato una curva di probabilita` per i flip-flop
usati da una vecchia serie di FPGA (mi pare le prime Virtex, o
addirittura ancora la serie 4000). Per tempi sotto al nanosecondo si
aveva una probabilita` di errore assai alta, tipo 1e-2, mentre gia` a
2-3 nanosecondi si aveva un errore ogni N milioni di anni... con le
frequenze usate dai PIC, credo che l'universo implodera` prima che
avvenga la prima metastabilita`, e quindi il tuo circuito avra` comunque
dei problemi. ;-)
-- 
Lorenzo

Per una valutazione seria dovresti cercarti qualche nota applicatica
specifica sui PIC, perlomeno relativa alla tecnologia con cui sono
fatti. Qui solo microchip (o google) ti può aiutare
Se l'argomento ti interessa penso che le cose più interessanti le trovi 
sui siti di produttori di FPGA o sul sito TI
Per una cosa più spannometrica, direi che puoi semplicemente ignorare il 
problema visto che le frequenze in gioco sono (relativamente) basse per 
una tecnologia CMOS moderna. Ricordando che la metastabilità è un 
fenomeno squisitamente statistico e da valutare in funzione del rischi 
che vuoi assumerti
Se, infine, il problema sono i pulsanti, probabilmente intendevi altre 
cose che con la metastabilità non centrano per nulla (forse volevi 
chiarimenti su antirimbalzo e debounce)
-- 
VincenzoV
http://www.vincenzov.net



In effeti con il punto 1 hai risposto alla mia domanda.
Quello che dici al punto 2 è ragionevolissimo, ma visto che sembri
abbastanza preparato sull'argomento dovresti concordare con me sul fatto che
la probabilità che al tempo X un FF sia uscito da uno stato metastabile e
quindi fornisca in uscita una tensione valida e riconoscibile come livello
logico, dipende fortemente dalle condizioni iniziali, o, se vuoi vederla in
altra maniera, dalla perturbazione che impone al sistema di spostarsi dallo
stato in cui si trovava e muoversi verso l'altro stato stabile passando per
un'infinità di stati instabili (incluso quello metastabile). Le condizioni
iniziale (o la perturbazione) dipendono a loro volta dalla distanza
temporale tra l'evento sul clock e l'evento sull'ingresso asincrono, e
quindi non sono in alcun modo prevedibili.
Probabilmente gli esperimenti della Xilinx ai quali ti riferisci tu non si
inquadravano nel contesto di cui stiamo parlando noi, ovvero ingresso
asincrono campionato da un FF sincrono, ma piuttosto riguardavano i circuiti
sequenziali che possono essere sintetizzati negli FPGA in questione.
Ciao,
    Daniele

 ha scritto nel messaggio
news:UHk%b.34068$IT2.1...@news4.tin.it...


Non sono troppo d'accordo
Il problema associato allo stato (!) metastabile deriva dal fatto che 
tale situazione dura un tempo indeterminato e che per tale tempo il FF 
semplicemente non funziona più (cioè l'uscita rimane indeterminata anche 
  nei successivi "n" - casuale - impulsi di clock. Infatti se è ovvio 
che un evento temporalmente fuori specifiche fornisca un risultato 
casuale o comunque errato, non lo è, astrattamente parlando, il fatto 
che tale effetto venga ereditato da successivi eventi perfettamente "a 
norma" dal punto di vista temporale
Per arrivare in tale stato non basta (condizione necessaria ma non 
sufficiente) violare i tempi di hold o set-up ma occorre beccare 
(statisticamente) il momento giusto in cui far variare ingressi e clock 
(si parla di finestre di ps)
-- 
VincenzoV
http://www.vincenzov.net


Se rispetti le specifiche Microchip
non avrai nessun problema. Anzi credo proprio
che dovrai impegnarti per riuscire a produrre
un malfunzionamento per metastabilitą dovuto
all'ingresso con un pulsante. Credo invece sia
prevalente il problema del "rimbalzo". In questo
caso o utilizzi un monostabile esterno (famosissimo
antirimbalzo fatto con NE555) oppure lo fai
a firmware (se le specifiche del tuo progetto
lo permettono). Basta che leggi l'ingresso
per esempio 20 volte di fila e poi fai un compartore
di maggioranza... Se hai trovato pił volte 1 vuol
dire che č 1... Con questa soluzione butti via tempo
macchina perņ. Puoi allora collegare il pulsante
ad un ingresso INTERRUPT del PIC e quando
scatta l'interrupt oscurarlo per (esempio) 20 ms.
Nessun umano puņ premere, rilasciare e ripremere
un pulsante in 20 ms...
Se il segnale che devi "triggerare" č pultito (uscita
di un'altro stadio) allora vai tranquillo.
--
***** By The Overkill !!! *****

 norma" dal punto di vista temporale
Questo e` senz'altro vero, ma anche gli stati successivi del sistema
(sebbene la transizione avvenga con dei timing corretti) dipendono in
ultima analisi dall'ingresso asincrono: l'unico "errore" e` quello che
il sistema si basa su un valore errato dell'ingresso, ma mantiene
comunque la sua consistenza. Se invece l'ingresso e` campionato da piu`
flip-flop, o comunque la metastabilita` riesce a raggiungere piu`
flip-flop, il sistema puo` passare a uno stato inconsistente e cessare
completamente di funzionare, finche` non riesce a tornare (per caso o
per un reset) in uno stato consentito.
Questo fenomeno ovviamente capita anche per il problema, molto piu`
generale e importante, delle "semplici" violazioni dei tempi di hold o
setup, ma in quel caso la "perturbazione" dura soltanto un periodo di
clock. In effetti le metastabilita` non sono altro che un "fattore
peggiorativo" di questo problema, dato che lo possono far durare per
piu` di un ciclo di clock, pero` il concetto e` lo stesso. Difatti la
soluzione adottata per risolvere questi due tipi di problemi e` simile:
nel caso delle hold+setup violations basta campionare gli ingressi
asincroni con un solo flip-flop, mentre nel caso delle metastabilita` si
mettono N flip-flop in serie (gia` 2 FF riducono il MTBF di un fattore
molto grande).
Nel caso del PIC che interessava a Daniele, di fatto e` come se ci
fossero appunto due flip-flop: uno e` quello dello stadio di ingresso
del PIC, l'altro e` quello (nel core del microcontrollore) che fa il
"fetch" del dato.
-- 
Lorenzo

 questione.
No, lo studio riguardava proprio il campionamento di segnali asincroni,
quindi la casualita` dell'istante in cui avviene la transizione fa
ovviamente "parte del gioco"; avrebbe poco senso valutare le
metastabilita` mediante delle violazioni "costanti" dell'hold o setup
time. Ho cercato sul sito della Xilinx, e questo e` il documento in
questione:
http://support.xilinx.com/bvdocs/appnotes/xapp094.pdf
-- 
Lorenzo