Latch

Da Hacknowledge.

Il circuito bistabile con memoria che abbiamo visto nel paragrafo precedente è un esempio basilare di circuito sequenziale, ma nei sistemi digitali moderni bisogna tener conto anche di un segnale fondamentale, che è quello di clock. Nei sistemi digitali tutti i sotto-circuiti sono sincronizzati da tale segnale, che è rappresentabile come un'onda quadra più o meno ripida e con frequenza generalmente costante.


Immagine:Clock.png


Tale segnale, a cui sono collegati praticamente tutti i componenti di un sistema digitale complesso, è caratterizzato da un tempo di salita (tempo necessario affinché il segnale si porti da un valore basso ad un valore alto, 0 -> 1 logici) e da un tempo di discesa. Un circuito di memorizzazione può campionare il dato da memorizzare sul fronte di salita del clock (in tal caso si definisce come un registro positive edge triggered) o sul fronte di discesa (registro negative edge triggered). Deve inoltre rispettare degli importanti vincoli temporali nel campionamento del dato. In particolare, prendendo come esempio un registro positive edge triggered (ma lo stesso discorso vale anche per i negative), il dato memorizzato deve essere valido al momento della transizione 0->1 del clock e non essere in un valore logico intermedio. Si parla quindi di tempo di setup (tsu), definito come il tempo per cui il dato in ingresso al registro (D) deve rimanere valido prima della transizione del clock (0->1), e di tempo di hold (thold), che è il tempo per cui il dato D deve rimanere valido dopo la transizione del clock. È come se il fronte di salita (o di discesa, nel caso di un registro negative edge triggered) del clock fosse l'otturatore di una macchina fotografica, e i tempi di setup e hold fossero i tempi per cui il soggetto (il dato) deve rimanere "fermo" per ottenere una fotografia corretta. È necessario rispettare questi tempi perché le porte logiche di un circuito di memorizzazione sono composte da transistor fisici, che hanno un loro tempo di trasmissione del segnale, e che conferiscono al registro un certo tempo di propagazione (tcq) richiesto per portare il dato D in ingresso sull'uscita Q del registro. Questi tempi impongono un limite inferiore al periodo di clock minimo tollerabile per il corretto funzionamento di un circuito sequenziale:


T \geq t_{c-q} + t_{plogic} + t_{su}

dove tplogic è il tempo di propagazione dell'eventuale circuito combinatorio a monte del registro e T è il periodo di clock. Questo vincolo pone una limitazione alla massima frequenza di clock tollerabile per i componenti di memorizzazione di un sistema digitale di cui tener conto in fase di progettazione (si può aumentare la frequenza di clock, e quindi le prestazioni del sistema, progettando porte logiche che siano in grado di ridurre uno dei tre parametri visti sopra).

Indice

[modifica] Flip-flop, latch, registri

In questo paragrafo esamineremo il latch, che è l'esempio più semplice di circuito sequenziale (quindi per la memorizzazione di un dato) sincronizzato da un segnale di clock, e quindi non un semplice flip-flop asincrono come quello che abbiamo visto precedentemente. È doverosa una precisazione per evitare confusione, dato che spesso ci si confonde fra flip-flop, latch e registro.

  • Per flip-flop si intende in genere un circuito sequenziale bistabile e asincrono (quindi non governato da un segnale di clock). Il flip-flop quindi si "muove" insieme al dato, a meno di un certo ritardo dovuto ai tempi di propagazione del segnale in ingresso attraverso le porte logiche.
  • Per latch si intende un circuito sequenziale bistabile sincronizzato da un segnale di clock e in grado di campionare il dato D in ingresso quando il segnale di clock è alto (positive latch) o quando è basso (negative latch). Il latch in pratica è sincronizzato dal segnale di clock, e può "vedere" il dato in ingresso solo quando il segnale di clock è alto. Per fare un paragone chiarificatore, è come se il dato fosse al di là di una porta e il clock avesse il "potere" di aprire e chiudere la porta per intervalli di tempo pari al periodo di clock, e quindi il latch fosse in grado di "vedere" il dato solo nei periodi in cui la porta è aperta.
  • Per registro si intende un circuito sequenziale bistabile sincronizzato da un segnale di clock in grado di campionare il dato D in ingresso solo sul fronte di salita del clock, ovvero nell'istante in cui il clock passa da basso ad alto (positive edge-triggered register), o sul fronte di discesa (negative edge-triggered register). In questo caso, il paragone che calzerebbe meglio sarebbe quello di una macchina fotografica. Il registro può "vedere" il dato solo quando il clock apre "l'otturatore" e conserva in memoria il dato fino alla prossima apertura dell'otturatore.

Per chiarificare maggiormente le idee, si veda il grafico seguente, nel quale, dato un segnale di clock (in rosso) e un dato da campionare (in blu), si riporta la corrispondente uscita di un flip-flop, di un latch e di un registro.


Immagine:Seq1.png


[modifica] Latch a multiplexer

Prendiamo come esempio un latch positivo, ovvero un latch che è trasparente al dato quando il clock è alto (ovvero, campiona il dato per tutto il periodo in cui il clock è alto, e lo memorizza indipendentemente dalle variazioni del dato stesso quando il clock è basso). Il suo schema elettrico concettualmente sarà qualcosa del genere:


Immagine:Latch1.png


Il segnale di clock governa l'apertura e la chiusura dei due interruttori S1 ed S2, fra di loro complementari (ovvero non saranno mai aperti o chiusi contemporaneamente). Quando S1 è chiuso, S2 è aperto, e il dato D ha modo di propagarsi lungo il circuito e arrivare in uscita Q. Qualsiasi variazione di D in questa condizione si trasmetterà sull'uscita. Il latch in questo caso è in modalità di scrittura ed è trasparente alle variazioni del dato. Quando S2 è chiuso, S1 è aperto, e il latch "non vede" il dato D. Grazie alla retroazione positiva però il dato è memorizzato, "conservato" nel circuito stesso. Questo tipo di latch si definisce latch a multiplexer, proprio perché il ramo collegato in un certo istante è stabilito in modo univoco e mutuamente esclusivo dal segnale di clock. Il modo migliore per implementare gli interruttori S1 ed S2 in elettronica digitale è attraverso dei transmission gate. Un transmission consiste nel parallelo fra un NMOS e un PMOS, ai cui capi sono trasmessi due segnali, l'uno il complementare dell'altro (quindi, nel nostro caso, a un transistor verrà trasmesso il segnale di clock e all'altro il segnale di clock negato). Tale soluzione è la migliore in quanto consente di sfruttare al massimo l'escursione logica di potenziale. È infatti noto che un NMOS conduce bene uno 0 logico, ma male un 1 logico (un 1 logico non corrisponde a un valore di tensione di VDD ma a un valore VDD-VTN, dove VTN è la tensione di soglia del transistor stesso), e il discorso duale vale per il PMOS. Sfruttandone il parallelo con dei segnali coniugati applicati ai rispettivi gate invece si sfruttano le caratteristiche migliori dei due transistor (l'NMOS conduce bene lo 0 logico, il PMOS conduce bene l'1 logico), quindi l'escursione logica di potenziale va da 0 a VDD e la trasmissione dei segnali è più robusta.


Immagine:Latch2.png


Quando il clock è a 1, il transmission gate sul ramo inferiore si comporta come un circuito chiuso (CLK=1 accende l'NMOS, #CLK=0 accende il PMOS), mentre quello al ramo superiore è spento, e quindi si comporta come un circuito aperto. Il dato D in ingresso ha quindi modo di propagarsi fino all'uscita Q. Quando il clock è a 0, il transmission gate sul ramo inferiore è spento (CLK=0 spegne l'NMOS, #CLK=1 spegne il PMOS), mentre quello sul ramo superiore è acceso, quindi la retroazione positiva viene attivata, il circuito diventa insensibile alle variazioni del dato D in ingresso ed è in fase di memorizzazione.

Il latch appena esaminato viene indicato come latch a multiplexer, in quanto la coppia di transmission gate si comporta come un multiplexer governato dal segnale di clock, che in ogni istante decide, in maniera mutuamente esclusiva, se a essere acceso è il ramo che collega l'uscita al dato, o il ramo di retroazione. Una tipica visualizzazione di questo tipo di latch è quindi la seguente:


Immagine:Latch4.png


Questo ovviamente per un latch negativo, in cui il dato è trasparente all'uscita quando il clock è basso. Per un latch positivo, si usa semplicemente invertire gli ingressi del multiplexer. Questa tipologia di latch è quella più usata, in quanto i transmission gate garantiscono la piena escursione di tensione del segnale fra 0 e VDD e, essendo il clock a governare in maniera mutuamente esclusiva il ramo attivo per ogni istante, è un circuito abbastanza robusto. Il suo svantaggio è tuttavia rappresentato dal carico elevato per il circuito di generazione del clock (infatti per ogni latch il clock dovrà pilotare 4 transistor, e questo può tradursi alle lunghe in una degradazione del segnale di clock), e dal tempo di propagazione del segnale più alto, dato che il dato in ingresso dovrà sempre attraversare un transmission gate e due inverter prima di giungere all'uscita del circuito.

[modifica] Prestazioni del latch a multiplexer

Nel caso di un latch positivo, quando il segnale di clock commuta da 0 a 1, il dato D all'ingresso impiega un tempo per propagarsi all'uscita Q pari al tempo di propagazione attraverso il transmission gate più il doppio del tempo di propagazione attraverso l'inverter (dovendo attraversare due inverter, e supponendo che gli inverter siano progettati allo stesso modo). Quindi


tD − > Q = tpd_gate + 2tpd_inv

[modifica] Latch in logica pass-transistor

Un approccio alternativo relativamente in voga in passato per la progettazione di un latch è quello in logica pass-transistor. Uno schema circuitale di un latch positivo in questa logica è il seguente:


Immagine:Latch3-1.png


Si nota che in questo caso il numero di transistor è ridotto rispetto a un approccio in logica a transmission gate (da 8 a 6, considerando inverter in logica CMOS con due transistor ognuno). Tuttavia, questo circuito si rivela relativamente poco robusto, sfruttando un solo transistor NMOS in luogo del transmission gate. Infatti, un NMOS trasmette bene uno 0 logico (a cui associa generalmente un livello di tensione nullo) ma male un 1 logico (a cui associa un livello di tensione pari a VDD - VTn), e questa caratteristica può degradare il segnale in uscita, specialmente nel caso in cui si usino molti latch di questo tipo in cascata. Inoltre il primo inverter ha un consumo statico di potenza non nullo, in quanto il suo valore massimo di ingresso è pari a VDD - VTn (tensione massima associata a un 1 logico trasmesso dall'NMOS), e quindi il suo pull-up non è mai completamente spento (il suo PMOS avrà sempre delle correnti di perdita dovute al degrado del livello logico alto, che dovrebbe essere pari a VDD). Quest'approccio è anche completamente sconsigliato nel caso di circuiti a bassa potenza, e con tensioni di alimentazione molto basse. In questi casi infatti il valore della VDD può essere molto vicino a quello della VTn, e la degradazione del segnale potrebbe essere intollerabile.

[modifica] Latch in logica a rapporto

Un'ulteriore strategia per la progettazione dei latch, molto usata agli albori dell'elettronica digitale, è quella della forzatura del segnale in uscita. La soluzione non è particolarmente elegante, ma consente di risparmiare sul numero di transistor usati, sui tempi di propagazione e sul carico del segnale di clock. Una possibile implementazione è la seguente:


Immagine:Latch5.png


Quando il clock è basso, il latch è isolato rispetto al segnale D e il dato è mantenuto dalla catena di retroazione formata dai due inverter. Quando il clock è alto, il segnale D passa attraverso il transmission gate e giunge, negato, all'uscita Q attraverso il primo inverter. L'inverter sul ramo di retroazione tenderebbe a scaricare il segnale all'uscita Q, ma se tale inverter è progettato opportunamente (e i suoi transistor hanno rapporti di forma più piccoli rispetto a quelli del primo inverter) la sua azione è minore rispetto a quella del primo inverter, quindi quest'ultimo "vince" e il segnale è riportato correttamente in uscita. Lo svantaggio di questo approccio sta nelle specifiche di progetto più dettagliate. È infatti indispensabile progettare i transistor dei due inverter con rapporti di forma diversi e fare in modo che tali rapporti di forma facciano funzionare correttamente il latch, e questo richiede mezzi tecnologici più sofisticati per l'incisione su silicio di transistor con rapporti di forma diversi.

[modifica] Latch SR

Il flip-flop che abbiamo esaminato nel capitolo precedente ha il difetto di essere un circuito completamente asincrono, senza l'intervento di un segnale di clock, mentre tutta l'elettronica digitale moderna è di tipo sincrona. È quindi necessario, se si vuole creare un circuito di set-reset, modificare il circuito visto in precedenza, rendendolo un latch sensibile al segnale di clock, nel seguente modo:


Immagine:Sr2.png


Prendiamo brevemente in esame il comportamento di questo circuito.

Quando il clock è alto e S=1 (e R=0), M5 ed M6 sono accesi, e scaricano a massa il nodo #Q, portandolo ad una tensione nulla (#Q=0). La tensione nulla al nodo #Q accende il PMOS M4 e spegne l'NMOS M3, e questo, associato al fatto che M7 è spento, carica il nodo Q ad una tensione VDD (Q=1). Caso speculare per S=0 e R=1. Quando sia S che R sono nulli, oppure quando il clock è basso, i nodi Q e #Q sono isolati dalla massa, e la loro relativa tensione è preservata dal circuito di retroazione che si viene a formare.

[modifica] Latch dinamici

I latch visti finora erano di tipo strettamente statico, ovvero il segnale elettrico viene memorizzato all'interno del circuito stesso mediante un circuito di retroazione, e il circuito di retroazione stesso garantisce la memorizzazione del segnale fino all'interruzione del ramo di retroazione. Il prezzo da pagare per una soluzione simile è però quello di una maggiore complessità circuitale in fatto di numero di transistor e numero di collegamenti, che si traduce sia in un costo maggiore del circuito, sia in un'occupazione maggiore in termini di area di silicio. La soluzione adottata nel caso di circuiti dalla grande capacità di memorizzazione o pipeline abbastanza lunghe è quella dinamica, che memorizza lo stato elettrico non attraverso un ramo di retroazione statico ma sulle armature di un condensatore. La soluzione circuitale è la seguente:


Immagine:Regdyn.png


Quando il clock è alto, la transmission gate è spenta e la carica sul condensatore viene conservata. Quando il clock è basso, il segnale D carica o scarica le armature del condensatore, che passa quindi in fase di memorizzazione. Il latch in questione è quindi di tipo negativo (attivo sul clock basso), ma per renderlo positivo basta invertire i due segnali di clock ai capi della transmission gate. L'inverter a valle viene usato per rigenerare il segnale (si possono anche usare più inverter in pipeline, sappiamo che un inverter in logica CMOS ha proprietà "rigenerative" del segnale, specie se il segnale in questione è memorizzato su un componente non MOS come può essere un condensatore). Siamo passati quindi dall'implementazione di un latch a 10 transistor, a un'implementazione con soli 2 transistor (solo la transmission gate, escludendo gli inverter in cascata) e un condensatore. Il prezzo da pagare sta però nelle correnti di perdita del condensatore. Un condensatore non è infatti un componente ideale, specie quelli implementati all'interno di una logica CMOS, che sono generalmente condensatori parassiti dalla capacità molto bassa. Un condensatore presenta delle correnti di perdita, che generalmente lo scaricano in tempi nell'ordine del millisecondo. Se si vuole implementare un circuito di memorizzazione in logica dinamica è quindi necessaria la presenza di un circuito ausiliario, detto circuito di refresh, che periodicamente ristabilizzi il livello elettrico presente sui singoli condensatori in modo da contrastare le correnti di perdita. La presenza di un simile circuito si traduce in un assorbimento maggiore di potenza elettrica da parte del dispositivo, e questo può essere un problema quando parliamo di dispositivi mobili, ma è il prezzo da pagare per costruire circuiti di memorizzazione a basso costo e dalle dimensioni molto scalate. Si usa infatti l'approccio dinamico in genere per costruire memorie RAM, dette anche appunto DRAM (Dynamic RAM), dato che lì l'obiettivo è produrre memorie di grandi dimensioni a costi contenuti, anche a scapito delle prestazioni e del costo in termini di potenza elettrica richiesto dal circuito di refresh. Si usano invece approcci statici per la costruzione di memorie cache o RAM di piccole dimensioni (SRAM, static RAM), dove il costo e la complessità del componente è scalato dalle dimensioni relativamente piccole della memoria, e si pone l'accento sulle prestazioni della memoria.

Strumenti personali