Salta al contenuto
Note per Studenti Circuiti combinatori notevoli

Circuiti combinatori notevoli

In questa pagina 6

Blocchi combinatori (vedi Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh →) che si ritrovano in ogni processore: nel datapathMicroarchitettura come realizzazione dell'ISA; elementi del datapath (PC, memoria istruzioni e dati, banco dei registri, ALU, estensione del segno, multiplexer); percorso di un'istruzione aritmetica, di una load, di una store e di un salto; datapath a ciclo singolo e suo periodo di clock; datapath multiciclo.Datapath e microarchitettura →, nella ALURuolo dell'ALU, ingressi, uscite e flag; ALU a 1 bit con AND, OR e sommatore selezionati da un multiplexer; estensione a 32 bit, sottrazione, confronto set-less-than e rilevazione dello zero e dell'overflow; tabella dei segnali di controllo; unità di moltiplicazione e virgola mobile.Unità aritmetico-logica (ALU) →, nella decodifica degli indirizzi di memoria.

Multiplexer (MUX)

Sceglie uno tra 2n2^n ingressi dati in base a nn ingressi di selezione. MUX 2:1:

Y=S‾ I0+S I1Y = \overline{S}\,I_0 + S\,I_1

MUX 4:1 con selezione S1S0S_1S_0: Y=S1‾ S0‾I0+S1‾S0I1+S1S0‾I2+S1S0I3Y = \overline{S_1}\,\overline{S_0} I_0 + \overline{S_1}S_0 I_1 + S_1\overline{S_0} I_2 + S_1 S_0 I_3. Con un MUX a 2n2^n ingressi si realizza qualsiasi funzione di nn variabili, mettendo sugli ingressi dati i valori della tabella di verità. Un MUX a 32 bit sono 32 MUX in parallelo con la stessa selezione: nel datapath sceglie per esempio se il secondo operando dell'ALU è un registro o una costante.

Decodificatore e codificatore

  • Decoder n→2nn \to 2^n: attiva una sola delle 2n2^n uscite, quella il cui numero è l'ingresso. Decoder 2→4: D0=A1‾ A0‾D_0 = \overline{A_1}\,\overline{A_0}, D1=A1‾A0D_1 = \overline{A_1}A_0, D2=A1A0‾D_2 = A_1\overline{A_0}, D3=A1A0D_3 = A_1A_0. Usi: selezionare la cella di memoria o il chip dall'indirizzo, il registro di destinazione dal campo dell'istruzione.
  • Encoder 2n→n2^n \to n: l'inverso, dà il numero dell'unico ingresso attivo. L'encoder con priorità dà il numero dell'ingresso attivo più importante (usato per scegliere tra più richieste di interrupt).

Sommatori

Semisommatore (half adder): somma due bit.

S=A⊕BC=ABS = A \oplus B \qquad C = AB

Sommatore completo (full adder): somma due bit e il riporto in ingresso.

AA BB CinC_{in} SS CoutC_{out}
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

S=A⊕B⊕CinCout=AB+Cin(A⊕B)=AB+ACin+BCinS = A \oplus B \oplus C_{in} \qquad C_{out} = AB + C_{in}(A \oplus B) = AB + AC_{in} + BC_{in}

Sommatore a propagazione del riporto (ripple carry) a nn bit: nn full adder in cascata, il CoutC_{out} di ognuno è il CinC_{in} del successivo. Il bit ii è corretto solo quando è arrivato il riporto dal bit i−1i-1: il ritardo cresce linearmente con nn (circa 2n2n porte). Se una porta ritarda 20 ps, a 32 bit servono circa 64⋅20=128064 \cdot 20 = 1280 ps, cioè più di un ciclo di un clock a 1 GHz.

Anticipo del riporto (carry lookahead): si definiscono per ogni bit gi=AiBig_i = A_iB_i (il bit genera un riporto) e pi=Ai+Bip_i = A_i + B_i (lo propaga), e si calcolano i riporti direttamente dagli ingressi:

c1=g0+p0c0,c2=g1+p1g0+p1p0c0,…c_1 = g_0 + p_0c_0, \quad c_2 = g_1 + p_1g_0 + p_1p_0c_0, \quad \dots

Più porte, ma ritardo che cresce circa come log⁡n\log n.

Sommatore-sottrattore

Un solo sommatore fa anche la sottrazione in complemento a 2 (vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →): ogni bit di BB passa per una XOR con il segnale SUB\text{SUB}, che è anche il riporto iniziale.

  • SUB=0\text{SUB} = 0: B⊕0=BB \oplus 0 = B, c0=0c_0 = 0 → A+BA + B.
  • SUB=1\text{SUB} = 1: B⊕1=B‾B \oplus 1 = \overline{B}, c0=1c_0 = 1 → A+B‾+1=A−BA + \overline{B} + 1 = A - B.

Overflow (complemento a 2): V=cn⊕cn−1V = c_n \oplus c_{n-1}, XOR tra il riporto che entra e quello che esce dal bit di segno.

Comparatore

Uguaglianza di due numeri di nn bit: E=(A0⊕B0)+(A1⊕B1)+…‾E = \overline{(A_0 \oplus B_0) + (A_1 \oplus B_1) + \dots}, cioè NOR delle XOR bit a bit. Il confronto di ordine si fa di solito con una sottrazione guardando i flag N, Z, C, V.

Errori tipici

  • Scrivere S=A+B+CinS = A + B + C_{in} con il + dell'OR: la somma di un full adder è uno XOR a tre ingressi.
  • Pensare che il ritardo di un sommatore ripple non dipenda dal numero di bit.

Versione ripasso

Blocchi di Reti combinatorie e mappe di KarnaughRete combinatoria (uscite funzione dei soli ingressi attuali); mintermini e maxtermini, forme canoniche SOP e POS; mappe di Karnaugh a 3 e 4 variabili con esempi svolti; condizioni di indifferenza; costo e ritardo di una rete a due livelli.Reti combinatorie e mappe di Karnaugh → nel datapathMicroarchitettura come realizzazione dell'ISA; elementi del datapath (PC, memoria istruzioni e dati, banco dei registri, ALU, estensione del segno, multiplexer); percorso di un'istruzione aritmetica, di una load, di una store e di un salto; datapath a ciclo singolo e suo periodo di clock; datapath multiciclo.Datapath e microarchitettura →, nella ALURuolo dell'ALU, ingressi, uscite e flag; ALU a 1 bit con AND, OR e sommatore selezionati da un multiplexer; estensione a 32 bit, sottrazione, confronto set-less-than e rilevazione dello zero e dell'overflow; tabella dei segnali di controllo; unità di moltiplicazione e virgola mobile.Unità aritmetico-logica (ALU) →, nella decodifica degli indirizzi.

  • MUX 2:1: Y=S‾ I0+S I1Y = \overline{S}\,I_0 + S\,I_1; un MUX a 2n2^n ingressi realizza ogni funzione di nn variabili.
  • Decoder n→2nn \to 2^n: attiva una sola uscita (2→\to4: D0=A1‾ A0‾D_0 = \overline{A_1}\,\overline{A_0}, ..., D3=A1A0D_3 = A_1A_0). Encoder 2n→n2^n \to n, con priorità per le richieste di interrupt.
  • Semisommatore: S=A⊕BS = A \oplus B, C=ABC = AB. Sommatore completo: S=A⊕B⊕CinS = A \oplus B \oplus C_{in}, Cout=AB+Cin(A⊕B)C_{out} = AB + C_{in}(A \oplus B).
  • Ripple carry: nn sommatori in cascata, ritardo lineare (circa 2n2n porte; a 32 bit con 20 ps per porta 12801280 ps).
  • Anticipo del riporto: gi=AiBig_i = A_iB_i, pi=Ai+Bip_i = A_i + B_i, c1=g0+p0c0c_1 = g_0 + p_0c_0, c2=g1+p1g0+p1p0c0c_2 = g_1 + p_1g_0 + p_1p_0c_0; ritardo circa log⁡n\log n.
  • Sommatore-sottrattore: XOR di BB con SUB\text{SUB}, che è anche il riporto iniziale (Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →): A+B‾+1=A−BA + \overline{B} + 1 = A - B. Overflow: V=cn⊕cn−1V = c_n \oplus c_{n-1}.
  • Comparatore: uguaglianza E=(A0⊕B0)+(A1⊕B1)+…‾E = \overline{(A_0 \oplus B_0) + (A_1 \oplus B_1) + \dots}; l'ordine si ricava con una sottrazione.

Errori tipici: la somma del sommatore completo è uno XOR a tre ingressi; il ritardo del ripple cresce con i bit.

Teoria collegata