Salta al contenuto
Note per Studenti Registri e contatori

Registri e contatori

In questa pagina 5

Registro parallelo

Definizione (registro parallelo con Load). nn flip-flop D (vedi Latch e flip-flopReti sequenziali e retroazione; latch SR con porte NOR e stato proibito; latch SR e D abilitati dal clock; flip-flop D master-slave sensibile al fronte; flip-flop JK e T; tempi di setup e hold; clock e periodo minimo.Latch e flip-flop →) con lo stesso clock memorizzano una parola di nn bit. Per caricare solo quando serve si aggiunge un segnale Load: davanti a ogni flip-flop un multiplexerMultiplexer, decodificatore e codificatore; semisommatore e sommatore completo; sommatore a propagazione del riporto e suo ritardo, idea dell'anticipo del riporto; sommatore-sottrattore in complemento a 2 con rilevazione dell'overflow; comparatore.Circuiti combinatori notevoli → sceglie tra il nuovo dato (Load = 1) e il valore attuale QQ (Load = 0). PC, IR, MAR, MBR sono registri di questo tipo.

Esempio. Con Load=1\text{Load}=1 e dato 10111011 il registro a 44 bit contiene 10111011 dopo il fronte; con Load=0\text{Load}=0 conserva il valore.

Banco dei registri

I registri generali del processore (16 in ARM, 32 in MIPS) formano il banco dei registri (register file), tipicamente con:

  • due porte di lettura: due numeri di registro selezionano, tramite due MUX a 16 o 32 ingressi, i due operandi;
  • una porta di scrittura: un decoder dal numero del registro destinazione, insieme al segnale di abilitazione alla scrittura, attiva il Load di un solo registro.

Così un'istruzione come ADD r1, r2, r3 legge due registri e ne scrive un terzo nello stesso ciclo.

Registro a scorrimento

Definizione (registro a scorrimento). L'uscita di ogni flip-flop è l'ingresso del successivo: a ogni fronte il contenuto scorre di una posizione.

Esempio. Da 00000000 con ingresso seriale 1,0,1,11,0,1,1: 0001→0010→0101→10110001\to0010\to0101\to1011.

Esempio a 4 bit, ingresso seriale a destra, sequenza 1, 0, 1, 1: 0000→0001→0010→0101→10110000 \to 0001 \to 0010 \to 0101 \to 1011.

Contatori

Definizione (contatore asincrono ripple). Contatore asincrono (ripple): flip-flop T con T=1T = 1; il clock del primo è il clock del sistema, quello di ognuno dei successivi è l'uscita del precedente. Semplice, ma i bit cambiano uno dopo l'altro: per un attimo compaiono valori intermedi sbagliati, e il ritardo cresce con il numero di bit.

Esempio. In un ripple a 33 bit il passaggio 011→100011\to100 attraversa per un attimo 010010 e 000000.

Formula (contatore sincrono). Contatore sincrono: tutti i flip-flop hanno lo stesso clock. Il bit ii commuta quando tutti i bit meno significativi valgono 1:

T0=1,T1=Q0,T2=Q1Q0,T3=Q2Q1Q0T_0 = 1, \quad T_1 = Q_0, \quad T_2 = Q_1Q_0, \quad T_3 = Q_2Q_1Q_0

Esempio. Da Q2Q1Q0=011Q_2Q_1Q_0=011: T0=T1=T2=1T_0=T_1=T_2=1, commutano tutti i bit e si passa a 100100.

Conteggio a 3 bit: 000, 001, 010, 011, 100, 101, 110, 111, 000, … (modulo 23=82^3 = 8).

Contatore modulo N

Proprietà (contatore modulo N). Per contare da 0 a N−1N-1 si riporta a zero il contatore quando arriva a N−1N - 1 (sincrono) o si progetta come automa (vedi Reti sequenziali e automi a stati finitiModello di una rete sequenziale sincrona (stato in flip-flop, logica di stato prossimo e di uscita); automi di Moore e di Mealy; procedimento di sintesi con esempio svolto di un riconoscitore della sequenza 11.Reti sequenziali e automi a stati finiti →).

Esempio. Per contare da 00 a 55 (N=6N=6) servono ⌈log⁡26⌉=3\lceil\log_26\rceil=3 bit e dopo 101101 si torna a 000000.

Esempio: contatore modulo 6 con flip-flop D, stati 000…101.

Q2Q1Q0Q_2Q_1Q_0 prossimo
000 001
001 010
010 011
011 100
100 101
101 000
110, 111 indifferenti

Dalla tabella (usando le indifferenze):

D0=Q0‾D1=Q2‾ (Q1⊕Q0)D2=Q1Q0+Q2Q0‾D_0 = \overline{Q_0} \qquad D_1 = \overline{Q_2}\,(Q_1 \oplus Q_0) \qquad D_2 = Q_1Q_0 + Q_2\overline{Q_0}

Controllo su 101: D0=0D_0 = 0, D1=1‾⋅(0⊕1)=0D_1 = \overline{1} \cdot (0 \oplus 1) = 0, D2=0+1⋅0=0D_2 = 0 + 1 \cdot 0 = 0 → 000 ✓. Su 011: D0=0D_0 = 0, D1=1⋅0=0D_1 = 1 \cdot 0 = 0, D2=1D_2 = 1 → 100 ✓.

Formula (frequenza del bit QiQ_i di un contatore). Usi: contatore di programma (il PC è un registro con incremento), divisori di frequenza (il bit QiQ_i di un contatore binario ha frequenza fclock/2i+1f_{clock}/2^{i+1}), temporizzatori.

Esempio. Con clock a 11 MHz il bit Q2Q_2 di un contatore binario ha frequenza 1/23=1251/2^3=125 kHz.

Errori tipici

  • Pensare che in un contatore ripple tutti i bit cambino insieme.
  • Dimenticare il segnale di abilitazione alla scrittura nel banco dei registri: senza, ogni ciclo sovrascriverebbe un registro.

Versione ripasso

Registro e banco

Contatori

Errori tipici: credere che nel ripple i bit cambino insieme; omettere l'abilitazione alla scrittura.

Teoria collegata