Cos’è una sequenza? Una sequenza è una successione finita di valori, dove ogni valore ha una durata prefissata e costante (T). I valori della sequenza sono dei numeri di n bit e nel caso di n=1 questi diventano 0 e 1 T n=1 n=4 Sequenze di 7 valori 2 8 A F 5 Vogliamo realizzare una rete logica che generi una prefissata sequenza di valori di 1 bit (n=1) e ripeta sempre tale sequenza. Fissiamo, ad esempio, il numero di valori della sequenza a 6. Quindi la sequenza da generare è questa (ai = 0 oppure ai = 1) : a0 a1 a2 a3 a4 a5
Generatore di sequenza La rete sarà certamente sequenziale sincrona ed è descritta dalle seguenti equazioni (S è lo stato):
Generatore di sequenza Nella rete serve un elemento che possa contare i valori della sequenza: nel nostro caso bisogna tenere il conto di quale dei 6 valori è stato generato…ci serve quindi un contatore x6, che si potrebbe realizzare con un contatore X8 con ingresso di reset sincrono, che noi attiveremo quando il valore del contatore è 5. Il periodo del clock del contatore è T. COUNT SEQ 000 a0 001 a1 010 a2 011 a3 100 a4 101 a5 COUNT CLOCK x6 ? SEQ 3 La rete combinatoria ‘?’ si ottiene con le normali tecniche di sintesi!
Generatore di numeri successivi CLOCK SEQ x6 Da notare che il contatore è già un generatore di sequenze, infatti se omettiamo la rete combinatoria, il contatore genera una sequenza con valori di 3 bit. In particolare se usiamo un contatore x 2, il segnale SEQ è un clock con frequenza pari alla metà della frequenza del segnale originale di CLOCK. COUNT SEQ 000 001 1 010 2 011 3 100 4 101 5
Potenziale problema: impulsi spuri sull’uscita Vanno eliminati solo se pericolosi Sulle uscite di un generatore di sequenze possono in generale verificarsi impulsi spuri sui segnali di uscita in risposta agli impulsi di clock. Questi impulsi sono inevitabili se il codice del contatore non è a distanza 1. Ad esempio, in figura, quando si passa dalla configurazione 011 alla configurazione 100, si potrebbe transitare per la configurazione 001 che dà origine a un impulso indesiderato di uno. Oppure, passando da 1 a 2 si potrebbe passare per 0, con conseguente impulso indesiderato di 0. Se questo disturbo transitorio non è accettabile allora bisogna tentare di eliminarlo a priori. La soluzione proposta prevede che si adottino contemporaneamente due accorgimenti: COUNT SEQ 000 001 1 010 011 100 101 Si sceglie un contatore che conti con un codice a distanza 1 Si esegue la sintesi delle reti combinatorie di uscita con una tecnica che garantisca l’assenza di alee.
Contatore concodice a distanza 1 Se serve un generatore di sequenza con configurazioni a distanza 1, si può utilizzare un contatore con codifica Gray solo se il periodo della sequenza è una potenza di due. Gray SEQ 000 a0 001 a1 011 a2 010 a3 110 a4 111 a5 101 a6 100 a7 Se la sequenza non è composta da 2^n valori, sono costretto a riinizializzare il contatore Gray quando la sua configurazione ha una distanza >1 dalla configurazione 0..00.
Contatore Johnson (a riempimento e svuotamento) Il contatore Johnson si realizza con uno shift register retroazionato. La retroazione si realizza collegando l’uscita negata dell’ultimo FFD all’ingresso del primo FFD. J2 J1 J0 D Q Q* D Q Q* D Q Q* … CLK Utilizzando n Flip Flop D il contatore conta 2*n valori. Dunque se la sequenza è formata da un numero pari di valori si usa il contatore Johnson. Se la sequenza è formata da 2^n valori, il contatore Johnson va ancora bene, ma si può anche utilizzare il contatore Gray!
Contatore Johnson (a riempimento e svuotamento) Partiamo dalla configurazione iniziale di tutti ‘0’. Per l’ultimo FFD vale Q2=0 e quindi Q2*=D0=1, cioè nello shift register c’è sempre ‘1’ in ingresso finché Q2* non diventa 0 cioè Q2=1 e questo avviene quando tutti i Q precedenti (Q0 e Q1) diventano ‘1’ (riempimento totale) allora in ingresso troviamo sempre 0 e inizia lo svuotamento fino a tornare nella configurazione tutti ‘0’ e il ciclo ricomincia. J2,J1,J0 SEQ 000 a0 100 a1 110 a2 111 a3 011 a4 001 a5 Ovviamente anche il contatore Johnson se resettato prima della fine del conteggio non conserva la codifica a distanza 1. In definitiva la soluzione non è più valida se la sequenza è composta da un numero dispari di valori! Riempimento Svuotamento