1 ISTITUTO DI ISTRUZIONE SUPERIORE “ANGIOY” I Circuiti combinatori: LOGISIM Prof. G. Ciaschetti 1. Le porte logiche Un circuito combinatorio (o sistema combinatorio o rete combinatoria) è un circuito elettrico, fatto di fili che portano corrente e componenti elettronici digitali che si chiamano porte logiche. E’ detto combinatorio perché la grandezza in uscita dipende solo dalle grandezze in ingresso, a differenza dei sistemi sequenziali, in cui la grandezza in uscita al sistema dipende dalle grandezze in ingresso e dallo stato del sistema). Facciamo alcuni esempi per capire di cosa parliamo: - un tubo dell’acqua è un sistema combinatorio: la quantità di liquido che esce dal tubo dipende solo dalla quantità di liquido che entra nel tubo. - un ascensore è un sistema sequenziale: il suo comportamento (uscita del sistema) dipende dai dati di input (il tasto premuto) e anche dal suo stato (il piano dove si trova). Se ad esempio si schiaccia il tasto 3, l’ascensore salirà se si trova al secondo piano, o scenderà se si trova al quarto piano. I circuiti combinatori servono a calcolare espressioni booleane. I fili elettrici portano dei segnali in ingresso al circuito (1 = c’è corrente, 0 = non c’è corrente), e le porte logiche realizzano le operazioni booleane. Ponendo le porte logiche nella stessa sequenza con cui si calcolano le espressioni, facciamo in modo che in uscita al circuito ci sia il valore dell’espressione che vogliamo calcolare. Porta logica NOT: se in ingresso c’è corrente, in uscita non ce n’è, mentre se in ingresso non c’è corrente, in uscita avremo corrente x 0 1 1 0 Porta logica AND: in uscita c’è corrente solo quando in ingresso c’è corrente in entrambi i fili x y 0 0 1 1 0 1 0 1 xy 0 0 0 1 2 Porta logica OR: in uscita c’è corrente quando in ingresso c’è corrente in almeno uno dei due fili. Alternativamente, si può dire che in uscita non c’è corrente solo quando non c’è corrente in nessuno dei due fili in ingresso. x y in uscita c’è corrente tranne quando in ingresso c’è corrente in entrambi i fili. x y 0 0 1 1 x y 0 1 0 1 0 1 1 1 Porta logica NAND: 0 0 1 1 x y 0 1 0 1 1 1 1 0 Porta logica NOR: in uscita c’è corrente solo quando in ingresso non c’è corrente in entrambi i fili. x y x y 0 0 1 1 1 0 0 0 0 1 0 1 Porta logica XOR: in uscita c’è corrente solo quando in ingresso c’è corrente in uno solo dei due fili. x y 0 0 1 1 0 1 0 1 x y 0 1 1 0 2. I circuiti Come abbiamo detto in precedenza, i circuiti combinatori servono a calcolare espressioni booleane. E infatti, nell’ALU (Alrithmetic Logic Unit, la parte della CPU che deve eseguire i calcoli) ci sono dei circuiti proprio simili a quelli che impariamo a disegnare noi, per eseguire i calcoli logici e, come vedremo successivamente, anche i calcoli matematici. Ma come si fa a costruire un circuito? Ricordando quanto detto nel precedente paragrafo, bisogna ricordarsi soprattutto due cose: (i) le porte logiche che realizzano le diverse operazioni (ii) le precedenze tra gli operatori. Mostriamo come si fa con qualche esempio: ESEMPIO 1: Realizzare il circuito combinatorio che calcola l’espressione y = 3 Innanzitutto, notiamo che ci sono solo due variabili nell’espressione, cioè due segnali in ingresso al nostro circuito. e , quindi avremo Poi, osserviamo che, per calcolare l’espressione, la prima operazione che dobbiamo effettuare è l’operazione OR tra e . Quindi inseriamo una porta logica OR nella quale facciamo entrare i due fili, nel seguente modo: All’uscita della porta logica OR avremo il risultato di x 1 + x2. Su questo, ora, dobbiamo applicare l’operazione NOT. Facciamo allora entrare il filo che esce dalla porta OR in una porta NOT: Abbiamo trovato, in uscita alla porta NOT, il risultato della nostra espressione, che possiamo chiamare y: y ESEMPIO 2: Realizzare il circuito che calcola l’espressione y x1 x2 x3 Procedendo come nell’esempio precedente, costruiamo il circuito utilizzando le porte logiche necessarie a fare le operazioni che compaiono nell’espressione, e applicando le regole di precedenza tra le operazioni. Più precisamente, andremo a disegnare: a) gli ingressi x1, x2 e x3 b) una porta NOT nella quale entra il segnale x1, per ottenere x1 c) una porta NOT nella quale entra il segnale x2, per ottenere x2 d) una porta XOR nella quale entrano i segnali x3 e x2 e) una porta NOR nella quale entrano i segnali x1 e x2 x3 4 3. Logisim Logisim è un software gratuito per la simulazione di circuiti combinatori. E’ possibile scaricarlo dal nostro sito informaticangioy.altervista.org. Non useremo tutte le sue potenzialità, pertanto introdurremo qui solo quelle parti del programma che ci servono per fare i nostri circuiti booleani. All’avvio, il programma si presenta nel seguente modo, mettendo a disposizione un’area di lavoro e una serie di strumenti per disegnare il circuito. Tutti gli strumenti che ci serviranno si trovano all’interno delle cartelle gates (le porte logiche), wiring (i fili elettrici e i pin di ingresso e di uscita), e base (le caselle di testo). Alcuni di questi comandi li troviamo anche sulla barra dei pulsanti in alto a sinistra. Iniziamo a lavorare con il programma: supponiamo di voler disegnare il circuito dell’esempio precedente: y x1 x2 x3 Notiamo che nell’espressione ci sono tre variabili, x1, x2 e x3, quindi abbiamo bisogno di tre segnali di ingresso. Selezioniamo lo strumento pin dal menu wiring oppure dalla barra degli strumenti in alto a sinistra, e disegniamo i tre pin di ingresso. Ora scegliamo lo strumento label (etichetta, cioè una casella di testo), e chiamiamo i tre pin di ingresso con i nomi delle tre variabili dell’espressione: 5 Iniziamo a fare le operazioni con le porte logiche: la prima operazione è un NOT, per ottenere x1 . Selezioniamo allora la porta dalla cartella gates (oppure dalla barra degli strumenti in alto a sinistra) e ne piazziamo una proprio a destra del pin x1. A questo punto, non resta che far entrare nella porta appena disegnata un filo che porta il segnale del pin x1. Basta posizionarsi con il mouse sul pin, e non appena appare un cerchietto verde possiamo disegnare un filo trascinando il mouse fino alla porta NOT. Ripetiamo lo stesso per ottenere x2 . Ora dobbiamo effettuare l’operazione XOR tra x2 e x3. Selezioniamo la porta XOR nella cartella gates, e disegniamo una porta a destra delle due porte NOT, dove faremo entrare i fili che portano i segnali di x2 (in uscita dalla porta NOT dove entra x2) e x3. Collegando i fili, dovremmo ottenere la seguente figura: 6 Bene, possiamo continuare a costruire il nostro circuito. Manca solo una porta NOR, nella quale far entrare i fili che escono da x1 (la porta NOT a destra di x1) e dalla porta XOR appena messa. Di nuovo, cerchiamo la porta che ci serve nella cartella gates, la piazziamo opportunamente nel circuito, e la colleghiamo con i fili come abbiamo detto. Abbiamo quasi terminato. Non resta che mettere un pin di uscita che catturerà il segnale in uscita dalla porta NOR, che chiameremo y. Lo troviamo in alto a sinistra nella barra degli strumenti Il nostro circuito è terminato. Per avviare la simulazione, dobbiamo selezionare lo strumento poke (manina) dal menu base o dalla barra degli strumenti in alto a sinistra, e utilizzarlo per cambiare i valori in ingresso al circuito. Ogni volta che facciamo click con la manina su un pin di ingresso, il valore di ingresso cambia: se il valore è 0, diventa 1, mentre se il valore è 1, diventa 0. 7 Come facciamo a sapere se il circuito è corretto? Abbiamo un altro modo per analizzare l’espressione: ricordate le tavole di verità? Possiamo costruire la tavola di verità dell’espressione, e verificarla con il circuito. Riga per riga della tavola, consideriamo il valore delle variabili di ingresso, e verifichiamo se l’uscita del circuito è uguale a quella della tavola di verità. ESEMPIO 3: Data l’espressione z = , costruire la tavola di verità e verificarla con il circuito. Stavolta le variabili di ingresso si chiamano x e y, e la variabile di uscita si chiama z (si noti che i nomi delle variabili non sono importanti, è una scelta arbitraria che facciamo noi). Tavola di verità: x 0 0 1 1 y 0 1 0 1 x+y 0 1 1 1 1 0 0 0 xy 0 0 0 1 1 0 0 1 Circuito: Verifica: Se consideriamo la prima riga della tavola di verità, notiamo che quando le variabili x e y sono entrambe 0, la variabile z è pari a 1. Nel circuito, dall’immagine precedente, notiamo che quando x = 0 e y = 0, l’uscita del circuito z = 1. Consideriamo ora la seconda riga della tavola di verità: con x = 0 e y = 1, il risultato dell’espressione è z = 0. Proviamolo nel circuito. Cambiamo con la manina il valore di y, e troviamo che l’uscita è proprio come ci aspettiamo: zero! Ripetiamo la verifica per la terza riga: con x = 1 e y = 0, l’espressione vale 0. Nel circuito abbiamo: 8 Giusto! L’ultima riga della tavola di verità ci dice che con x = 1 e y = 1, il valore dell’espressione è 1. E infatti, anche nel circuito troviamo questo risultato: