Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Temporizzazioni Registri

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto UtenteDirtyDeeds, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ, Foto Utentecarloc, Foto Utenteg.schgor

3
voti

[1] Temporizzazioni Registri

Messaggioda Foto UtenteGost91 » 27 ott 2016, 13:02

Salve a tutti, sto studiando le reti sequenziali. Ho delle difficoltà nel determinare la massima frequenza di clock di queste in quanto non ho capito molto bene come trattare i tempi di setup ed i tempi di hold dei registri.

Gli appunti che sto seguendo sono tratti da delle slides di un corso di elettronica digitale basato sul Tocci-Widmer, sullo Spirito ed alcuni datasheet degli integrati reputati più rilevanti.
Attualmente ho a disposizione l'ottava edizione del Tocci e la prima dello Spirito. In prima battuta chiederei se qualcuno ha da suggerirmi qualche buona dispensa riguardo il tema in quanto, se non ho visto male, l'argomento non viene trattato in nessuno dei due testi di cui dispongo.


Teoria

Se non ho capito male, un qualsiasi registro funziona correttamente (nel senso, risponde agli stimoli in modo predicibile secondo la relativa tavola di verità) se i dati in ingresso non variano ''troppo a ridosso'' dei fronti attivi del clock. Per tener conto di questo aspetto si definiscono due tempi caratteristici:

  1. tempo di setup (t_\text{SU}): anticipo minimo con cui il dato in ingresso può cambiare rispetto il prossimo fronte di clock attivo;
  2. tempo di hold (t_\text{H}): ritardo minimo con cui il dato in ingresso può cambiare rispetto all'ultimo fronte di clock attivo.

Questi due tempi, congiuntamente al tempo di propagazione dal clock all'uscita (t_\text{CQ}), comportano un limite superiore alla banda del registro o, in altri termini, alla frequenza massima con cui il clock può variare pur rispettando il corretto funzionamento del registro. Se questi due tempi non vengono rispettati allora il registro, nella peggiore delle ipotesi, può venire a trovarsi in uno stato metastabile, dove la risposta potrebbe non dipendere dagli ingressi.
Tipicamente il tempo di hold è di un ordine di grandezza inferiore ai tempi di setup e di propagazione, per cui, senza perdita di generalità, lo si può trascurare.


Un primo semplice esempio

In base a quanto detto segue che la banda di un semplice registro a FFD (flip-flop di tipo D) è data da

f_{\text{Clk}_\text{MAX}}=\frac{1}{t_\text{CQ}+t_\text{SU}} \qquad (1)

Per dimostrare il risultato si ragiona su una possibile temporizzazione, confrontando il periodo di clock con i tempi caratteristici del FFD



Per Q_{\text{a}0} intendo il generico valore iniziale dell'uscita, mentre con t_1 intendo la distanza temporale tra la variazione dell'ingresso e il relativo prossimo fronte di clock (la quale deve soddisfare t_1 \geq t_\text{SU}).

Dalla temporizzazione si nota facilmente che il periodo di clock T_\text{Clk} deve essere sufficientemente lungo da permettere all'uscita di commutare e all'ingresso di poter variare con sufficiente anticipo rispetto al relativo prossimo fronte di clock. Questo significa che affinché il registro funzioni correttamente deve essere

T_\text{Clk} \geq t_\text{CQ}+t_\text{SU}

quindi il periodo minimo si ottiene rispettando al limite (*) la precedente disuguaglianza, ossia

T_{\text{Clk}_\text{MIN}} = t_\text{CQ}+t_\text{SU}

dimostrando così la (1).

(*) nota: la variazione dell'ingresso viene ''sentita'' dal registro se il tempo di setup è rispettato, ossia se cade nell'intervallo che va dal primo fronte di clock a T_{\text{Clk}}-t_\text{SU} (alla frequenza massima di lavoro si ha T_{\text{Clk}}-t_\text{SU}=t_\text{CQ}).


Un secondo esempio

Mi pare ci sia una inconsistenza tra teoria e ''pratica'' quando si va ad analizzare il divisore di frequenza. Anche in questo caso, in base ad un ragionamento analago al precedente, dovrebbe valere la (1). Una relativa temporizzazione su cui ragionare è la seguente.



Il primo problema che mi sto ponendo riguarda il tempo di hold. Se la precedente temporizzazione è corretta, si nota che l'ingresso non è mai stabile immediatamente dopo la commutazione triggerante del clock. Questo significa che, teoricamente, nella pratica non si può realizzare un divisore di frequenza con un FFD in quanto lo schema non può rispettare il tempo di hold a meno che questo non sia nullo.

Tirando le somme, se si trascura t_\text{H}, come si usa fare, nessun problema, ma nella pratica t_\text{H}\neq 0 \text{ s} per cui la difficoltà è concreta. Nonostante questo, nella pratica si usa realizzare i divisori di frequenza tramite lo schema a FFD.

Quindi il primo quesito è: dove sta la falla in tutto il discorso che ho fatto?
Ringrazio anticipatamente chiunque abbia voglia di darmi una mano.
In GOST we TRUST
Avatar utente
Foto UtenteGost91
1.680 1 3 7
Expert EY
Expert EY
 
Messaggi: 156
Iscritto il: 12 nov 2012, 7:53

3
voti

[2] Re: Temporizzazioni Registri

Messaggioda Foto UtenteIsidoroKZ » 27 ott 2016, 15:33

Complimenti per i disegni!

Il ragionamento che fai per il divisore e` corretto, ma nella pratica le cose funzionano perche' se vai a vedere il th di un FFD spesso e` negativo, che vuol dire che il dato puo` cambiare addirittura subito prima del clock.
Ad esempio nel FF 74HC74 della Texas il tempo di hold e` zero, e quindi e` garantito che il divisore funzioni perche' il tempo di ritardo non puo` essere minore di zero (a meno di non avere FF che prevedono il futuro!)

Se si va a prendere un altro FF, ad esempio il 74HC74 della NXP il tempo di hold tipico e` di -6ns, MA c'e` quello garantito che e` di +3ns.
C'e` comunque sempre un tempo di propagazione minimo (anche se spesso non viene dichiarato).

Se si devono fare dei progetti "veri" garantiti che funzionino, nel caso del divisore bisogna verificare che il tempo di propagazione minimo sia comunque maggiore del tempo di hold. Questa verifica spesso non la si puo` fare, dato che non c'e` il tempo di propagazione. Talvolta sul datasheet c'e` una nota che dice che comunque lo hold time e` minore del propagation time, anche nel caso peggiore. Se proprio non lo si trova e il progetto DEVE funzionare, si scrive al produttore del FF e gli si chiede.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
101,3k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 18091
Iscritto il: 17 ott 2009, 0:00

0
voti

[3] Re: Temporizzazioni Registri

Messaggioda Foto UtenteGost91 » 27 ott 2016, 16:15

Ti ringrazio per la risposta, però purtroppo non mi è ancora molto chiara la faccenda.

Complimenti per i disegni!

Grazie, ma mi sono venuti un po' ''minuscoli'' :mrgreen:

le cose funzionano perche' se vai a vedere il th di un FFD spesso e` negativo, che vuol dire che il dato puo` cambiare addirittura subito prima del clock.


Questo non va contro la condizione data dal tempo di setup?

Se si devono fare dei progetti "veri" garantiti che funzionino, nel caso del divisore bisogna verificare che il tempo di propagazione minimo sia comunque maggiore del tempo di hold.


Non ho capito bene a quale tempo di propagazione ti riferisci. Se il tempo di propagazione di cui parli fosse t_\text{CQ} allora mi verrebbe da dire che, indipendentemente dal fatto che questo sia maggiore, minore o uguale al tempo di hold, il sistema non potrebbe ancora funzionare.



Sia nel caso t_\text{CQ}\leq t_\text{H} che nel caso t_\text{CQ}\geq t_\text{H} l'ingresso può variare all'interno dell'intervallo proibito t_\text{PROIB}. Se t_\text{H}>0 \text{ s}, l''unica è che t_\text{CQ} sia nullo (cosa impossibile nella pratica).
In GOST we TRUST
Avatar utente
Foto UtenteGost91
1.680 1 3 7
Expert EY
Expert EY
 
Messaggi: 156
Iscritto il: 12 nov 2012, 7:53

2
voti

[4] Re: Temporizzazioni Registri

Messaggioda Foto UtenteIsidoroKZ » 27 ott 2016, 16:43

Gost91 ha scritto:Questo non va contro la condizione data dal tempo di setup?

No, perche' il tempo di setup e` maggiore di quello (negativo) di hold. Supponi di avere tsu=30ns e th=-5ns. Questo vuol dire che il dato deve essere stabile nella finestra che va da 30ns prima a 5 ns prima del dato. Potrebbe essere che il segnale di clock vada direttamente sul "core" del FF, mentre il dato passa attraversa un paio di porte che lo ritardano.

Non ho capito bene a quale tempo di propagazione ti riferisci.

Tempo fra clock e dato.
Se il tempo di propagazione di cui parli fosse t_\text{CQ}...


Dovevo dire tempo di propagazione minimo.



A questo punto il tempo di hold e` rispettato anche nel divisore. Quasi mai il tempo di propagazione minimo e` dichiarato, ma il costruttore talvolta in qualche noticina garantisce il funzionamento dei sistemi sincroni, in cui Q va su D e i clock sono uguali.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
101,3k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 18091
Iscritto il: 17 ott 2009, 0:00

2
voti

[5] Re: Temporizzazioni Registri

Messaggioda Foto UtenteGost91 » 27 ott 2016, 19:14

Grazie Isidoro, adesso è tutto chiaro :ok:

Ora che la questione sul tempo di hold è sistemata, avrei qualche altra domanda riguardo la massima frequenza di lavoro di alcune reti sequenziali.


Un terzo esempio

Per quanto riguarda lo shift register non mi ritrovo con gli appunti presi a lezione.
Secondo quanto scritto nei miei appunti, il minimo periodo di clock di uno shift register ''a 4 bit'' (si dice così?) sarebbe (trascurando il tempo di hold) dato dalla espressione

T_{\text{Clk}_\text{MIN}}=\text{max}(t_\text{CQa}+t_\text{SUb},t_\text{CQb}+t_\text{SUc}, t_\text{CQc}+t_\text{SUd})

La formula mi pare sbagliata. Lo schema di un shift register a FFD ''a 2 bit'' è il seguente.



Una temporizzazione per il primo registro è la seguente



da questa si capisce che il primo registro funziona correttamente se vale la relazione

T_\text{Clk}\geq t_\text{CQa}+t_\text{SUa} \qquad (2)

Per il secondo il registro si ha, conseguentemente alla precedente temporizzazione, la seguente temporizzazione



in questo caso il secondo registro funziona correttamente se

T_\text{Clk}\geq \text{max}(t_\text{CQa},t_\text{CQb})+t_\text{SUb} \qquad (3)

Il sistema nel suo complesso funziona correttamente se funzionano correttamente tutte le sue parti, quindi il periodo di clock deve soddisfare simultaneamente sia la (2) che la (3). Il sistema che porta al minimo periodo di clock accettato dal sistema è quindi

\begin{cases} 
T_\text{Clk}\geq t_\text{CQa}+t_\text{SUa} \\
T_\text{Clk}\geq \text{max}(t_\text{CQa},t_\text{CQb})+t_\text{SUb}
\end{cases} 
=
\begin{cases} 
T_\text{Clk}\geq t_\text{CQa}+t_\text{SUa} \\
T_\text{Clk}\geq t_\text{CQa}+t_\text{SUb} \\
T_\text{Clk}\geq t_\text{CQb}+t_\text{SUb} 
\end{cases}

che porta alla soluzione

T_{\text{Clk}_\text{MIN}}=\text{max}(t_\text{CQa}+t_\text{SUa},t_\text{CQa}+t_\text{SUb}, t_\text{CQb}+t_\text{SUb})

In base a questo risultato credo sia possibile determinare per induzione il periodo di clock minimo per il generico shift register ''a n bit''.

Considerando uno shift register ''a 3 bit'', i primi due registri danno luogo sempre alle condizioni (2) e (3), mentre il terzo registro da luogo alla terza condizione

T_\text{Clk}\geq \text{max}(t_\text{CQb},t_\text{CQc})+t_\text{SUc}

in quanto per il terzo registro si vanno a confrontare i tempi di propagazione tra l'uscita del secondo registro e quello dell'uscita del terzo registro. Se il ragionamento è corretto allora il sistema che caratterizza il minimo periodo di clock accettato dallo shift register ''a n bit'' è

\begin{cases} 
T_\text{Clk}\geq t_\text{CQ1}+t_\text{SU1} \\
T_\text{Clk}\geq \text{max}(t_\text{CQ1},t_\text{CQ2})+t_\text{SU2} \\
\vdots \\
T_\text{Clk}\geq \text{max}(t_\text{CQ(n-1)},t_\text{CQn})+t_\text{SUn} \\
\end{cases} 
=
\begin{cases} 
T_\text{Clk}\geq t_\text{CQ1}+t_\text{SU1} \\
T_\text{Clk}\geq t_\text{CQ1}+t_\text{SU2} \\
T_\text{Clk}\geq t_\text{CQ2}+t_\text{SU2} \\
\vdots \\
T_\text{Clk}\geq t_\text{CQ(n-1)}+t_\text{SUn} \\
T_\text{Clk}\geq t_\text{CQn}+t_\text{SUn} \\
\end{cases}

che porta alla seguente soluzione

\boxed{T_{\text{Clk}_\text{MIN}}= \text{max}(t_\text{CQ1}+t_\text{SU1},t_\text{CQ1}+t_\text{SU2},t_\text{CQ2}+t_\text{SU2},\dots, t_\text{CQ(n-1)}+t_\text{SUn},t_\text{CQn}+t_\text{SUn})}

questa espressione per lo shift register ''a 4 bit'' si riduce alla seguente

\begin{aligned}
T_{\text{Clk}_\text{MIN}}= \text{max}(&t_\text{CQa}+t_\text{SUa},t_\text{CQa}+t_\text{SUb},t_\text{CQb}+t_\text{SUb}, \\ &t_\text{CQb}+t_\text{SUc},t_\text{CQc}+t_\text{SUc}, t_\text{CQc}+t_\text{SUd},t_\text{CQd}+t_\text{SUd})
\end{aligned}

che non è in accordo con il risultato riportato su i miei appunti.
In GOST we TRUST
Avatar utente
Foto UtenteGost91
1.680 1 3 7
Expert EY
Expert EY
 
Messaggi: 156
Iscritto il: 12 nov 2012, 7:53

1
voti

[6] Re: Temporizzazioni Registri

Messaggioda Foto UtenteIsidoroKZ » 27 ott 2016, 22:40

Gli appunti sono giusti.

La formula 2 non va bene perche' il tempo di set up del FF A non lo puoi garantire con sicurezza. Il segnale Da arriva dall'esterno, e` asincrono, non puoi dire nulla. Vale a dire che il primo flip flop funziona come puo`, non e` sotto il tuo controllo. L'uscita del primo FF, Qa, non torna su Da e quindi il tempo di set up di A non c'entra nelle formule e una espressione tCQa+tsua non ha senso dato che Qa non torna su Da.

tCQa e` il ritardo con cui il primo FF (A) da` il segnale al secondo FF (B), e questo deve essere stabile prima che inizi tsuB.

Nel caso a due FF, il solo FF di cui puoi garantire il corretto funzionamento e` il secondo, che funziona bene se Qa arriva prima dell'inizio del set up di B, quindi Tck>tCQa+tSUb.

Per gli altri FF il discorso e` assolutamente lo stesso. Considera questo: un FF "fa la foto" di che cosa ha su D quando arriva il fronte attivo del clock, e con un certo ritardo mette sull'uscita il dato che ha campionato. Il FF non sa da dove arriva il dato, se arriva da un altro FF o da un'altra parte. Se vengono rispettati tSU e tH al SUO ingresso, lui butta fuori dopo tCQ il dato, indipendentemente da tutto il resto.

Il FF e` miope, non vede da dove arrivano i segnali. Quando c'e` il fronte del clock, fa la foto dell'ingresso e se i tempi di set up e hold sono rispettati la foto viene bene, non mossa.

Questo vuol dire che se metti tanti FF in cascata ciascuno vede SOLO il suo ingresso, e butta fuori il risultato con il SUO ritardo. Se tutti i FF sono uguali, tutti hanno lo stesso ritardo, i dati escono tutti contemporaneamente.

Dalle figure che hai fatto sembra che consideri che i tCQ dipendano da quanto ritardo c'e` dovuto ad altri FF precendenti. Questo non capita, ogni FF risincronizza i dati, e tCQ e` sempre lo stesso, indipendentemente da dove e` messo il FF nella catena.

In quale ateneo sei e quale corso segui?
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
101,3k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 18091
Iscritto il: 17 ott 2009, 0:00

0
voti

[7] Re: Temporizzazioni Registri

Messaggioda Foto UtenteGost91 » 28 ott 2016, 10:47

La formula 2 non va bene perche' il tempo di set up del FF A non lo puoi garantire con sicurezza. Il segnale Da arriva dall'esterno, e` asincrono, non puoi dire nulla. Vale a dire che il primo flip flop funziona come puo`, non e` sotto il tuo controllo.

Sono d'accordo. Basta dire che in un eventuale progetto bisogna fare in modo che l'ingresso D=Da dello shift register commuti con sufficiente anticipo rispetto il prossimo fronte di clock.
Per la precisione, l'ingresso deve commutare nella finestra di tempo che va da un fronte di clock e T_\text{Clk}-t_\text{SU}. Però questo pone già una condizione sul periodo di clock: deve essere almeno T_\text{Clk}\geq t_\text{SU}.

La formula 2 non va bene perche' il tempo di set up del FF A non lo puoi garantire con sicurezza. L'uscita del primo FF, Qa, non torna su Da e quindi il tempo di set up di A non c'entra nelle formule e una espressione tCQa+tsua non ha senso dato che Qa non torna su Da.

tCQa e` il ritardo con cui il primo FF (A) da` il segnale al secondo FF (B), e questo deve essere stabile prima che inizi tsuB.

Nel caso a due FF, il solo FF di cui puoi garantire il corretto funzionamento e` il secondo, che funziona bene se Qa arriva prima dell'inizio del set up di B, quindi Tck>tCQa+tSUb.


Ok, spero di aver capito dove sta l'errore. Ho sbagliato a combinare tra loro le condizioni da rispettare (e conseguentemente anche il primo esempio in [1] è sbagliato).
Per il primo registro le condizioni da rispettare sono:

  1. tempo per campionare correttamente l'ingresso: T_\text{Clk}\geq t_\text{SUa};
  2. tempo per far commutare correttamente l'uscita: T_\text{Clk}\geq t_\text{CQa}.

Per il secondo registro le condizioni da rispettare sono:

  1. tempo per campionare correttamente l'ingresso: T_\text{Clk}\geq t_\text{CQa}+t_\text{SUb};
  2. tempo per far commutare correttamente l'uscita: T_\text{Clk}\geq t_\text{CQb}.

Il periodo minimo di clock dovrebbe quindi essere

T_{\text{Clk}_\text{MIN}}=\text{max}(t_\text{SUa},t_\text{CQa},t_\text{CQa}+t_\text{SUb},t_\text{CQb})=\text{max}(t_\text{SUa},t_\text{CQa}+t_\text{SUb},t_\text{CQb})

avendo sfruttato il fatto che, per la positività dei tempi, si ha t_\text{CQa} \leq t_\text{CQa}+t_\text{SUb}.
Nel caso a due FF, il solo FF di cui puoi garantire il corretto funzionamento e` il secondo, che funziona bene se Qa arriva prima dell'inizio del set up di B, quindi Tck>tCQa+tSUb.

Per gli altri FF il discorso e` assolutamente lo stesso. Considera questo: un FF "fa la foto" di che cosa ha su D quando arriva il fronte attivo del clock, e con un certo ritardo mette sull'uscita il dato che ha campionato. Il FF non sa da dove arriva il dato, se arriva da un altro FF o da un'altra parte. Se vengono rispettati tSU e tH al SUO ingresso, lui butta fuori dopo tCQ il dato, indipendentemente da tutto il resto.

Il FF e` miope, non vede da dove arrivano i segnali. Quando c'e` il fronte del clock, fa la foto dell'ingresso e se i tempi di set up e hold sono rispettati la foto viene bene, non mossa.

Questo vuol dire che se metti tanti FF in cascata ciascuno vede SOLO il suo ingresso, e butta fuori il risultato con il SUO ritardo. Se tutti i FF sono uguali, tutti hanno lo stesso ritardo, i dati escono tutti contemporaneamente.


Per far funzionare l'n-esimo registro di uno shift register allora dovrebbero valere le condizioni:

  1. tempo per campionare correttamente l'ingresso: T_\text{Clk}\geq t_\text{CQ(n-1)}+t_\text{SUn};
  2. tempo per far commutare correttamente l'uscita: T_\text{Clk}\geq t_\text{CQn}.

Il periodo minimo di clock per uno shift register ''a 4 bit'' allora è

\begin{aligned}
T_{\text{Clk}_\text{MIN}} = \text{max}(&t_\text{SUa},t_\text{CQa},t_\text{CQa}+t_\text{SUb},t_\text{CQb}, \\
&t_\text{CQb}+t_\text{SUc},t_\text{CQc},t_\text{CQc}+t_\text{SUd},t_\text{CQd}) 
\end{aligned}

i termini da confrontare sono tutti tempi nonnegativi, per cui l'espressione si semplifica nella seguente

\boxed{T_{\text{Clk}_\text{MIN}} = \text{max}(t_\text{SUa},t_\text{CQa}+t_\text{SUb},t_\text{CQb}+t_\text{SUc},t_\text{CQc}+t_\text{SUd},t_\text{CQd})}

Questa assomiglia di più al risultato su gli appunti, però ancora non coincide. Magari si può fare un discorso pratico, dicendo che più o meno i tempi di setup e di propagazione sono simili, per cui alla fine

T_{\text{Clk}_\text{MIN}} = \text{max}(t_\text{CQa}+t_\text{SUb},t_\text{CQb}+t_\text{SUc},t_\text{CQc}+t_\text{SUd})

Dalle figure che hai fatto sembra che consideri che i tCQ dipendano da quanto ritardo c'e` dovuto ad altri FF precendenti. Questo non capita, ogni FF risincronizza i dati, e tCQ e` sempre lo stesso, indipendentemente da dove e`messo il FF nella catena.


Sì, questa l'avevo presa. Ti ringrazio nuovamente per il prezioso, e sempre più fondamentale, aiuto che mi stai dando.
In GOST we TRUST
Avatar utente
Foto UtenteGost91
1.680 1 3 7
Expert EY
Expert EY
 
Messaggi: 156
Iscritto il: 12 nov 2012, 7:53

1
voti

[8] Re: Temporizzazioni Registri

Messaggioda Foto Utenteclaudiocedrone » 28 ott 2016, 12:16

:-) Foto UtenteGost91,
IsidoroKZ ha scritto: ...In quale ateneo sei e quale corso segui?...

rispondigli anche a questo, è importantissimo ! Così riesce ad avere i riferimenti per risponderti al meglio;
vedi l'ultima parte della sua firma ;-) O_/
"Non farei mai parte di un club che accettasse la mia iscrizione" (G. Marx)
Avatar utente
Foto Utenteclaudiocedrone
13,3k 3 6 9
Master
Master
 
Messaggi: 9114
Iscritto il: 18 gen 2012, 13:36

0
voti

[9] Re: Temporizzazioni Registri

Messaggioda Foto UtenteGost91 » 29 ott 2016, 15:12

Purtroppo per me i dubbi non finiscono, avrei bisogno di una mano anche con il prossimo esempio.

Un quarto esempio

Credo che per completare la casistica resti da analizzare una rete asincrona, come quella del divisore di frequenza per 4, il cui schema è il seguente.



Una temporizzazione per il primo registro è la seguente



Come visto nel secondo esempio, il primo registro funziona se T_\text{Clka}\geq t_\text{CQa}+t_\text{SUa}.
La relativa temporizzazione del secondo registro è la seguente.



Le condizioni per cui il secondo registro funziona correttamente mi paiono più complicate da ricavare in quanto non è certo dove cade il colpo clock attivo. Ora iniziano i dubbi, in quanto non so trattare il tempo di setup del secondo registro. Mi viene da fare il seguente ragionamento: nel caso peggiore, il clock commuta senza il ritardo di propagazione t_\text{CQa}, quindi l'ingresso Db viene sentito se commuta nella finestra di tempo che va da un colpo di clock triggerante e T_\text{Clkb}-(t_\text{SUb}+t_\text{CQa}).

Il secondo registro funziona se:

  1. c'è il tempo di campionare l'ingresso: T_\text{Clkb}\geq t_\text{CQa}+t_\text{SUb};
  2. c'è il tempo per far commutare l'uscita: T_\text{Clkb}\geq t_\text{CQb}.

Nel complesso allora il sistema funziona se sono soddisfatte simultaneamente le relazioni

\begin{cases}
T_\text{Clka}\geq t_\text{CQa}+t_\text{SUa} \\
T_\text{Clkb}\geq t_\text{CQa}+t_\text{SUb} \\
T_\text{Clkb}\geq t_\text{CQb}
\end{cases}

I clock dei due registri sono legati al segnale di clock del sistema per mezzo delle relazioni
T_\text{Clk}=T_\text{Clka}=2T_\text{Clkb}, pertanto il sistema precedente si riscrive come

\begin{cases}
T_\text{Clk}\geq t_\text{CQa}+t_\text{SUa} \\
T_\text{Clk}\geq (t_\text{CQa}+t_\text{SUb})/2 \\
T_\text{Clk}\geq t_\text{CQb}/2
\end{cases}

quindi il minimo periodo di clock per il quale il sistema funziona correttamente è

\boxed{T_{\text{Clk}_\text{MIN}}=\text{max}(t_\text{CQa}+t_\text{SUa},(t_\text{CQa}+t_\text{SUb})/2,t_\text{CQb}/2)}

nel caso di FF identici, l'espressione si riduce alla seguente

T_{\text{Clk}_\text{MIN}}=t_\text{CQ}+t_\text{SU}

dalla quale si capisce che il punto critico del sistema è il primo registro, nel senso che se il primo registro funziona allora anche il secondo registro funziona.
In GOST we TRUST
Avatar utente
Foto UtenteGost91
1.680 1 3 7
Expert EY
Expert EY
 
Messaggi: 156
Iscritto il: 12 nov 2012, 7:53

0
voti

[10] Re: Temporizzazioni Registri

Messaggioda Foto UtenteIsidoroKZ » 29 ott 2016, 15:55

Gost91 ha scritto:Per il primo registro le condizioni da rispettare sono:

Per il primo FF non ci sono condizioni da rispettare. Il segnale di ingresso arriva in modo asincrono, non e` sotto il tuo controllo. E anche la seconda condizione che hai scritto non ha senso. La SOLA condizione da rispettare per il primo FF e` di avere il periodo di clock maggiore del periodo minimo di clock che viene dichiarato dal costruttore del FF e anche la parte alta e quella bassa dell'impulso devono essere piu` lunghe di un valore minimo sempre specificato dal costruttore.

Se poi il segnale di ingresso cambia troppo vicino al fronte attivo del clock, il FF puo` andare in metastabilita`, ma questo e` una cosa che il progettista sa che puo` capitare in tutti i sistemi di sincronizzazione. Ne puo` calcolare la probabilita` e se e` troppo alta puo` ridurre la propbabilita` di errore, ma non puo` fare nulla per garantire che tsu del primo FF sia soddisfatto.

Gost91 ha scritto:Per il secondo registro le condizioni da rispettare sono:

[list=1][*]tempo per campionare correttamente l'ingresso: T_\text{Clk}\geq t_\text{CQa}+t_\text{SUb};

Solo questa la seconda non c'entra. Se vuoi aggiungere una seconda condizione e` la stessa di prima, sulla frequenza e la durata dei livelli del segnale di clock. In alcuni casi addirittura il periodo minimo di clock puo` essere leggermente minore del tempo di propagazione.
Gost91 ha scritto:Per far funzionare l'n-esimo registro di uno shift register allora dovrebbero valere le condizioni:

[list=1][*]tempo per campionare correttamente l'ingresso: T_\text{Clk}\geq t_\text{CQ(n-1)}+t_\text{SUn};

Solo questa! Se viene rispettato la durata minima degli impulsi, il FF commuta correttamente.

Il Tclk minimo in un FF puo` essere minore del tempo di propagazione tCQ. Questo vuol dire che il FF funziona correttamente anche se il segnale dovesse uscire dopo il fronte successivo a causa dei ritardi. Basta saperlo!. Se il FF e` non e` "da solo" ma in un sistema sincrono, allora bisogna che Tclk sia aumentato per dare il tempo al segnale di uscire e arrivare con congruo anticipo al FF successivo. Ma un FF da solo puo` lavorare con il segnale di uscita che cambia DOPO il fronte successivo.

Gost91 ha scritto:Magari si può fare un discorso pratico, dicendo che più o meno i tempi di setup e di propagazione sono simili...

No, nessun discorso pratico o approssimazioni varie. Bisogna solo rispettare due condizioni, sempre: la durata degli impulsi maggiore della durata minima, e i dati in ingresso al FF devono arrivare con sufficiente anticipo rispetto al fronte attivo e rimanere stabili abbastanza dopo il fronte. Questo secondo intervallo spesso e` nullo o negativo.

Nel caso di un registro a scorrimento, sincrono, vuol dire verificare che
T_\text{Clk}\geq t_\text{CQ(n-1)}+t_\text{SUn} a partire dal secondo FF in avanti.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Avatar utente
Foto UtenteIsidoroKZ
101,3k 1 3 8
G.Master EY
G.Master EY
 
Messaggi: 18091
Iscritto il: 17 ott 2009, 0:00

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Google Adsense [Bot], Majestic-12 [Bot] e 33 ospiti