1 of 58

Sistemi di calcolo

Corso di Laurea in Ingegneria Informatica e Automatica

2 of 58

Docenti

Canale 1:

  • Cristian Assaiante (3 CFU)
  • Leonardo Querzoni (6 CFU)

Canale 2:

  • Emilio Coppa (6 CFU)
  • Simone Agostinelli (3 CFU)

Tutor:

  • Gianluca Capozzi
  • Giorgia Di Pietro

3 of 58

Informazioni sul corso

Sito del corso: https://season-lab.github.io/SC

  • Dispensa
  • Virtual Machine BIAR
  • Diario delle lezioni: argomenti e link registrazioni video
  • Esercitazioni:
    • Occorre registrarsi: vedere link sul sito in Avvisi/Esercitazioni
    • Meccanismo per aver bonus (fino a 2.5 punti) all’esame se si partecipa

4 of 58

Bonus esercitazioni

5 of 58

In ricordo di Camil Demetrescu

“Il corso è molto impegnativo, ma la nostra missione è che nessuno rimanga indietro.”�

Camil Demetrescu�Docente che ha creato e seguito il corso per otto edizioni

6 of 58

Prerequisito fondamentale

  • Nozioni di base sul modello di macchina di Von Neumann;
  • Algebra booleana;
  • Rappresentazione dei numeri interi con e senza segno, rappresentazione dei numeri in virgola mobile;
  • Conoscenza del linguaggio C (in particolar modo i tipi array, i puntatori, gli operatori */& e l’aritmetica dei puntatori).

7 of 58

Sistemi di calcolo

Capitolo 1

Corso di Laurea in Ingegneria Informatica e Automatica

8 of 58

Sistemi di calcolo moderni

9 of 58

Perché studiare i sistemi di calcolo?

10 of 58

Macchina di Von Neumann

11 of 58

Macchina di Von Neumann, più in dettaglio

12 of 58

Macchina di Von Neumann, più in dettaglio

Regola fondamentale USB…

13 of 58

Struttura della memoria

14 of 58

Obiettivi di questa settimana

Vogliamo capire, almeno in principio, come si realizzano in hardware:�

  • Additizionatore di due “variabili” a K bit

  • Registro (memoria) da 1 bit

�Il nostro è un accenno. Cercheremo di capire l’idea, senza definire sempre e comunque tutti i dettagli.��Per saperne di più, vi rimandiamo ai corsi:�

  • Architettura dei calcolatori
  • Elettronica

15 of 58

Da dove partiamo?

Supponiamo di voler veramente realizzare questi componenti, andando ad implementare i loro circuiti al minimo costo possibile e puntando alla massima semplicità.��Ci servirà avere/conoscere:

  • Legge di Ohm (costo: gratis!)
  • Resistenze in ceramica (costo <1 euro)
  • Diodo LED (costo <1 euro)
  • Transistor BJT (costo <1 euro)
  • Batteria 5V (costo <5 euro): noi useremo 5V/GND di un Arduino UNO
  • Breadboard (costo <2 euro) e interruttore meccanici (costo <1 euro)

16 of 58

Come recuperare questi componenti elettrici?

Potete facilmente comprare un kit �“Arduino” su un qualsiasi ecommerce per una decina di euro.��Non programmeremo la board Arduino. Essa verrà usata solo per alimentare a 5V i nostri circuiti.

17 of 58

Componenti

Resistenza

Transistor

Diodo LED

Interruttore

18 of 58

Partiamo da un semplice circuito

Assumiamo di lavorare ad una tensione di 5V:

Domanda: perché abbiamo messo una resistenza dal valore di 220 Ohm?

19 of 58

Il nostro circuito integra un diodo LED

Un'eccessiva corrente/tensione può bruciare il LED. Per questo dobbiamo introdurre una resistenza. Il loro datasheet ci fornisce dettagli sulle loro specifiche caratteristiche tecniche.��Semplificando, LED comuni possono lavorare con una corrente compresa tra:�

[10 mA, 30 mA]��Come calcoliamo la resistenza che ci serve supponendo di lavorare con 5V?

Catodo�(-)

Anodo�(+)

20 of 58

Elementi di elettronica: resistenze e legge di Ohm

La legge di Ohm esprime una relazione tra:

  • I: Corrente (Ampere)
  • V: Tensione (Volt)
  • R: Resistenza (Ohm)

V = R x I��che può essere riscritta:

R = V / I

21 of 58

Nel nostro circuito

R = 5 / [0.01, 0.03] = [166, 500]

Quindi ci serve una resistenza con un valore tra 166 Ohm e 500 Ohm per funzionare correttamente il LED (poca corrente: non si accede, troppa corrente: si brucia).��Supponiamo di aver a disposizione una resistenza come questa:

Che valore di Ohm ha?

22 of 58

Quanti Ohm ha una resistenza? [Approccio #1]

= 0.2 ± 5% Ohm

= 220 ± 1% Ohm

2

0

10-2

5%

23 of 58

Quanti Ohm ha una resistenza? [Approccio #2]

24 of 58

Quanti Ohm ha una resistenza? [Approccio #3]

25 of 58

Realizziamo il nostro primo circuito

Per evitare di dover saldare i componenti, useremo una breadboard:

26 of 58

Realizziamo il nostro primo circuito

Per evitare di dover saldare i componenti, useremo una breadboard:

Useremo un Arduino �UNO come “batteria” �a 5V.

27 of 58

Realizziamo il nostro primo circuito

Come la breadboard potenzialmente interconnette i punti:

...e così via….

...e così via….

28 of 58

Esempio di semplice circuito + DEMO

29 of 58

Transistor

Principali usi di un transistor:

  • Interruttore elettronico
  • Amplificatore di segnali

Tipologie

  • BJT (Bipolar Junction Transistor)
  • MOSFET

BJT PNP

BJT NPN

Tre poli:

  • Base (B)
  • Collettore (C)
  • Emettitore (E)

30 of 58

Transistor

31 of 58

Transistor come interruttore

Consideriamo un BJT NPN come il 2N3904 o BC337

Semplificando, possiamo dire che se sulla base B arriva una corrente, allora il collettore C e l’emettitore E sono tra loro collegati. Altrimenti sono scollegati.

La corrente che deve arrivare su B può essere anche�molto piccola: 0.5 mA nei nostri esempi.

Se lavoriamo a 5V, per la legge di Ohm, ci servirà�mettere una resistenza da 10kOhm sulla base tra�la batteria e la base per generare una corrente da�0.5 mA.

32 of 58

Circuito semplice con transistor

A cosa ci può servire in pratica usare un transistor?��PORTE LOGICHE

33 of 58

Porte logiche elementari

Grazie alle porte logiche, riusciremo a realizzare un addizionatore ed una memoria registro da 1 bit.

34 of 58

Tavola di verità porta AND

35 of 58

Circuito porta AND

36 of 58

Porta AND su breadboard

37 of 58

Tavola di verità porta OR

38 of 58

Circuito porta OR

39 of 58

Porta OR su breadboard

40 of 58

Tavola di verità porta NOT

41 of 58

Circuito porta NOT

42 of 58

Porta NOT su breadboard

43 of 58

Tavola di verità porta XOR

44 of 58

Porta XOR realizzata con porte AND, OR e NOT

X XOR Y = ((NOT X) AND Y) OR (X AND (NOT Y))

45 of 58

Esercizio per casa

46 of 58

Ma le CPU integrano davvero queste porte?

Dal punto di vista concettuale, sì. In pratica, l’industria riesce a produrle in scala molto minore rispetto ai nostri esempi.����

Surface-mount technology:

Resistenza SMD

Questa scala non è più adeguata per le CPU/SoC moderni….

47 of 58

Circuiti integrati VLSI + DEMO

48 of 58

Logica combinatoria

La porta XOR l’abbiamo realizzata come la combinazione di porte AND, OR, e NOT. Per tale motivo, tale circuito viene detto combinatorio.��E’ possibile realizzare funzione booleane arbitrarie attraverso circuiti combinatori.��Vediamo come realizzare finalmente un addizionatore...

49 of 58

Circuiti combinatori: es. addizionatore parziale

Somma(X, Y) = X XOR Y

Riporto(X, Y) = X AND Y

50 of 58

Tabella verità addizionatore completo

51 of 58

Addizionatore completo

Addizionatoreparziale #2

Addizionatoreparziale #1

52 of 58

Addizionatore a 4 bit

53 of 58

Logica sequenziale

  • Diversamente dai circuiti combinatori, che realizzano funzioni booleane il cui valore di output dipende esclusivamente dal valore attuale delle sue linee di input, i circuiti sequenziali hanno una nozione di stato
  • Un esempio classico è il flip-flop, un circuito che mantiene la memoria di un 1 bit
  • I circuiti sequenziali in un sistema di calcolo sono spesso pilotati da un segnale di clock (onda quadra con una certa frequenza).

54 of 58

Flip-flop

SET

RESET

Q = NOT Q’

Un flip-flop ha due uscite. Per implementare un registro, potremmo osservare solo Q.

DUE USCITE:

DUE INPUT:

FORBIDDEN:

55 of 58

Per implementare un flip-flop: porta NOR

56 of 58

Flip-flop (SR Latch)

1

1

0

0

0

1

0

1

0

0

1

0

NOR

NOR

ESEMPIO:

57 of 58

Design alternativi

58 of 58

Gated SR Latch

Segnale�di clock

Problema: metastabilità, capacità di un circuito di rimanere in uno stato “instabile” per un tempo indefinito, es. se R=1 S=1 e poi si cambia ingressi in modo valido (es. S=0 R=0) avrò stato stabile ma difficile valutare dopo quanto e con quale output. Tecniche di sincronizzazione possono limitare effetti di metastabilità.��Usando il segnale di clock, un circuito può controllare quando i segnali di ingresso devono essere letti dal flip-flop. Infatti, i segnali in ingresso potrebbero richiedere un tempo di convergenza prima di raggiungere un valore stabile. Il clock sincronizza diversi componenti.