Circuiti logici digitali elementari

Le porte logiche non sono vendute singolarmente ma sono vendute in delle unità chiamate circuiti integrati o chip . Questi chip sono pezzi di silicio di forma rettangolare su cui è stampato il circuito.

I chip vengono classificati in base al numero di porte che contengono :

  • SSI - Small Scale Integrated : da 1 a 10 porte
  • MSI - Medium Scale Integrated : da 10 a 100 porte
  • LSI - Large Scale Integrated : da 100 a 100 000 porte
  • VLSI - Very Large Scale Integrated : più di 100 000 porte

Circuiti combinatori

Important

I circuiti combinatori sono quei circuiti dove l’output dipende esclusivamente dall’input.

Infatti non tutti i circuiti hanno questa proprietà, per esempio un circuito con elementi di memoria generano l’output dipendendo non solo dall’input ma anche dai valori memorizzati ( circuiti sequenziali )(vedremo in seguito).

Multiplexer

Important

Un multiplexer è un circuito con input, input di controllo ( selettori ) e un output. Il valore dell’input selezionato dagli input di controllo viene “direzionato” verso l’uscita.

Per esempio questo è un MUX :

e la sua tabella di verità sarà :

Usando quindi un multiplexer adatto possiamo implementare una qualsiasi funzione.

Example

Consideriamo la funzione di maggioranza, ovvero che da se il numero di “zeri” è maggiore del numero di “uni” e da viceversa :

quindi se vogliamo utilizzare un multiplexer avremo bisogno di input di controllo e “adattare” gli input secondo la tabella di verità e l’output “voluto”, quindi daremo in input :

  • ( con ) a
  • ( con GND ovvero massa ) ai restanti con :

quindi il nostro MUX sarà di questo tipo :

Decoder

Important

Un decoder ha input e output. Il numero in binario formato dagli -bit, “seleziona” (setta a ) uno dei input.

Example

Prendiamo per esempio un decoder :

supponiamo che come input entra , allora l’unico output che sarà è , siccome

Questo circuito sequenziale è utile quando alla memoria viene presentato un indirizzo e si vuole selezionare il chip corrispondente.

Comparatore

Un comparatore, “confronta” due word in input e restituisce se sono uguali e viceversa. Prendiamo per esempio un comparatore a 4 bit ( ovvero che prende in input word a 4 bit ) : review

questo circuito comparatore infatti prende due word da 4 bit e mette a XOR ogni 2 bit, e con . Viene utilizzata la porta XOR, infatti la porta XOR da in output se sono diversi gli input e se sono uguali, quindi se mettiamo in XOR ogni bit di con , ognuno deve restituire se sono uguali, quindi poi basta metterli in NOR, infatti se tutti sono il NOR restituisce , se almeno uno è il NOR restituisce .

Array logici programmabili - PLA

Important

Il PLA ( Programmable Logic Array ) è un chip con porte AND e OR programmabili, che permette di implementare una qualsiasi funzione in formato somma di prodotti ( SOP ).

le caratteristiche di un PLA sono :

  • ha 12 ingressi, dove ogni ingresso passa anche per il suo inverso, quindi avremo 24 segnali ( 12 originali + 12 invertiti ).
  • matrice 24x50 AND : il primo stadio è composto da 50 porte AND programmabili
    • ogni porta AND è connessa attraverso un fusibile a qualsiasi sottoinsieme dei 24 segnali
      • se il fusibile è intatto il segnale passa
      • se il fusibile è bruciato il segnale non passa
  • matrice OR : il secondo stadio è composto da 6 porte OR programmabili
    • ogni porta OR prende in input l’uscita di tutte le 50 porte AND del primo stadio, anche qui le connessioni cono stabilite con i fusibili

Circuiti aritmetici

Important

I circuiti aritmetici sono un’altro classico esempio dei circuiti combinatori

Shifter

Lo shifter è un circuito con 8 bit in input ( word a 8 bit ) e 8 bit in output, che “shifta” (fa scorrere) verso sinistra o destra tutti gli 8 bit di 1 bit. review

L’input determina se fare uno left shift ( ) o right shift ( ), per capire come funziona analizziamo gli AND “interni” :

  • quando (right shift) : gli AND di destra di ogni coppia si “attivano” e quindi il risultato di quel AND sarà uguale al corrispondente
  • quando (left shift) : la cosa è inversa verso sinistra notiamo inoltre che nel caso di un right shift , sempre, mentre nel caso di un left shift, .

Lo shifter serve per fare operazioni di moltiplicazione e divisione per potenze di 2 :

  • left shift (<<) di bit è uguale a moltiplicare per
  • right shift (>>) di bit è uguale a dividere per

Example

Come possiamo moltiplicare un numero per , beh abbiamo bisogno sia dello shifter che del sommatore, infatti possiamo osservare che :

ora la domanda è come faccio a fare ? Ora è più facile perché , quindi posso “shiftare” volte a sinistra il numero . Una volta ottenuto il risultato basta sommarlo a e otteniamo . PS : questa è una domanda di esame

Sommatori

Important

Un sommatore è un circuito capace di fare la somma tra bit.

Half-adder

Un primo “prototipo” è un “mezzo-sommatore” ( perché non gestisce il riporto in entrata ) che prende in input due bit e , e ritorna la somma e l’eventuale riporto :

Full-adder

Il full-adder è un circuito sommatore composto da due half-adder è fa la somma tra 3 bit dove è un eventuale riporto in input, restituisce quindi in output la somma e un eventuale riporto in output :

_sum = (a xor b) xor cin
cout = (a and b) or (cin and (a xor b))

Quindi se vogliamo costruire un adder (ripple carry adder) che sommi due word da 16 bit, basta mettere in serie e replicare 16 full-adder.

Dal corso di LRL sappiamo abbastanza su sta roba e sappiamo anche come costruire un adder più efficiente ( propagazione del riporto Adder-Subtractor ).

ALU - Arithmetic Logic Unit

Important

La ALU ( ad 1-bit ) contiene 3 unità principali :

  • DECODER
  • UNITÀ LOGICA
  • FULL-ADDER e può eseguire una di queste funzioni :
  • (somma)

  1. DECODER : serve per selezionare secondo gli input e quale funzione eseguire.
    • Per esempio se allora viene eseguito
  2. UL : ha il compito di eseguire , e
  3. FULL-ADDER : ha il compito di eseguire , considerando anche eventuali riporti in input e ritornando anche l’eventuale riporto in output

Inoltre ci sono altre caratteristiche :

  • possibilità di lavorare con grazie al bit in input INVA
  • possibilità di forzare a 0 gli input e , basta negare passare 0 a ENA o ENB ( rispettivamente )

È possibile collegare tra di loro più ALU a 1-bit per costruire ALU di lunghezza variabile, questa tecnica si chiama ==bit slice==.

Example

ALU a 8-bit costruito con 8 ALU da 1-bit ognuna :

È possibile passare anche un segnare INC in input alla nostra ALU a -bit, utile solo per le operazioni di addizione, per esempio per eseguire o .

Clock

Molti circuiti digitali usano i clocks per avere sincronizzazione.

Important

Un clock è un circuito che emette una serie di impulsi con larghezza precisa e a intervalli precisi. Ad ogni impulso la CPU esegue una operazione elementare o passa alla successiva.

Ogni intervallo compreso tra le due estremità di due impulsi consecutivi è chiamato ==ciclo di clock== o periodo ( T ) :

La frequenza di clock è di solito tra 100 MHz e 4 GHz, corrispondenti ai 10 nanosecondi (0,00000001 sec) e 250 picosecondi (0,00000000025 sec).

In un computer, molti eventi possono accadere durante un singolo ciclo di clock, però alcune volte è molto utile farli accadere seguendo un ordine preciso, per questo è necessario dividere il ciclo di clock in sotto-cicli. Una tecnica molto utilizzata per dividere il ciclo di clock in sotto-cicli è di :

  1. intercettare il clock originale e inserirlo in circuito di cui si conosce il ritardo
  2. questo circuito genererà un secondo clock dopo il primo

Infatti quest’ultima figura (b) rappresenta un diagramma temporale che fornisce 4 “momenti” diversi che possono essere utilizzati per sincronizzare eventi diversi :

  1. Fronte di salita di C1 ( rosa )
  2. Fronte di discesa di C1 ( blu )
  3. Fronte di salita di C2 ( verde )
  4. Fronte di discesa di C2 ( rosso )

A volte invece di avere un momento preciso, è utile l’intervallo di tempo in cui un’azione deve avvenire. Per esempio : leggimi questo dato ogni volta che il segnale è alto. Infatti ad un evento gli può essere consentito di verificarsi solo quando C1 è alto e invece un’altro evento verificarsi solo quando C2 è alto.

Se abbiamo bisogno di più di due diversi intervalli, possiamo fare in modo che quando i segnali dei due clock ( C1,C2 ) sono alti, si sovrappongono (in AND) in modo da avere 4 diversi intervalli :

  • C1 AND NOT C2 ( verde )
  • NOT C1 AND C2 ( viola )
  • C1 AND C2 ( rosso )
  • NOT C1 AND NOT C2 ( arancione )


Memoria