Nome modulo: Architettura dei Calcolatori Elettronici (Informatica 4). CFU: 6. Lingua insegnamento: Italiano. Contenuti: Codifica dell’informazione numerica ed alfanumerica; algebra booleana; teorema fondamentale; porte, circuiti e basi; analisi e sintesi di circuiti; moduli combinatori (codificatori, decodificatori, multiplatori, demultiplatori, ROM, PLA); elementi di memoria, registri e RAM; aritmetica binaria; circuiti ALU; principi fondamentali di funzionamento delle architetture, moduli funzionali, interaccia, planimetrie, formati istruzione, classificazione delle istruzioni, microsequenze, programmi e ciclo di programmazione; processori MIPS, pipelining; Input/Output; BUS; prestazioni; gerarchia di memoria; cenni di traduzione e di programmazione assembler. Testi di riferimento: 1. Introduzione alla organizzazione ed alla progettazione di un elaboratore elettronico, Franco P. Preparata, Franco Angeli editore, 2002; 2. Struttura e progetto dei calcolatori: l’interfaccia hardware e software, David A. Patterson e John L. Hennessy, Zanichelli editore, 2006; 3. Introduzione all’architettura degli elaboratori, D. P. Bovet, Zanichelli, 1996; 4. Introduzione all’architettura dei calcolatori, McGraw-Hill, 1997. Obiettivi in termini di conoscenza e comprensione: Il corso intende fornire adeguate competenze sulla struttura ed sul funzionamento delle architetture mono-processore. Conoscenze essenziali sono richieste nel contesto della codifica dell’informazione, dell’analisi/sintesi delle reti circuitali e delle principali componenti funzionali e di interfaccia. In tale scenario si richiede la comprensione dei principi fondamentali che consentono di realizzare l’elaborazione attraverso le dichiarazioni di programmazione. Il programma del corso è integrato da concetti preliminari sui traduttori e sulla programmazione assembler. Propedeuticità consigliate (prerequisiti): elementi di 1. 2. 3. 4. Geometria, Analisi I, Fisica 1, Programmazione procedurale. Obiettivi in termini di capacità di applicare, conoscenza, comprensione e modalità di verifica dell’apprendimento: La verifica delle competenze si basa sulla valutazione di un elaborato scritto che deve contenere una disamina dei concetti e dei risultati fondamentali di programma, presentati attraverso idonei esempi, applicazioni, schemi circuitali e commenti. Requisisti fondamentali di verifica riguardano la capacità di organizzazione logica e di discussione, rigorosa ed esaustiva, degli argomenti di programma. Programma esteso: 1. Introduzione: elaborazione ciclica CPU-RAM, unità centrale di elaborazione, unità aritmetico-logica, unità di controllo, registri, memoria ad accesso casuale, unità di input/output, interfaccia. 2. Rappresentazione dell’informazione: codifiche numeriche ed alfanumeriche, modulo e segno, proprietà e tecniche di codifica, approssimazione, complemento a due, notazione scientifica, standard IEEE 754, singola e doppia precisione, notazione esadecimale, codici alfanumerici, codici per il controllo di errori. 3. Reti Combinatorie: funzioni booleane; porte logiche, circuiti combinatori, espressioni booleane, algebra di commutazione, minterm, forme SOP e POS, teorema fondamentale e duale, semplificazioni di espressioni, circuiti minimali, ottimizzazione di Carnaugh, analisi e sintesi di circuiti, basi. 4. Moduli combinatori: codificatori, codificatori di priorità, decodificatori, multiplatori, demultiplatori, memorie a sola lettura (ROM), sintesi dei moduli fondamentali, applicazioni. 5. Memorie: latch, clock, temporizzazione, sincronizzazione, flip/flop (F/F) set-reset, F/F master-slave, F/F edge-triggered, F/F di tipo d, registri con caricamento/scorrimento parallelo, memoria ad accesso casuale (RAM). 6. Unità aritmetico-logica: aritmetica binaria, somma di interi in complemento a due, celle addizionatrici, addizionatori seriali e paralleli, circuiti moltiplicatori, circuiti per la divisione, celle ALU, estensioni e riduzioni, aritmetica in virgola mobile, traboccamento. 7. Architetture semplificate e modello di Von Neumann: CPU, RAM, registri di CPU, formati istruzione, programmi, ciclo di programmazione, microsequenze, FETCH ed EXECUTE di istruzioni, indicizzazione della memoria. 8. Architetture MIPS: formati ed istruzioni, fasi di microprogrammazione, progetto di processori, indipendenza di istruzioni, pipelining, alee, risoluzione delle alee, prestazioni. 9. Periferiche e dispositivi: sincronizzazione, protocolli, input/ouput (I/O) programmato, I/O da interruzione, I/O con accesso diretto alla memoria, vantaggi e svantaggi delle tecniche di I/O, cenni di multiprogrammazione, dispositivi fisici di I/O, mouse, hard disk, stampanti. 10. Interfaccia: bus, classificazione, bus sincroni ed asincroni, banda passante e larghezza di banda, accesso, arbitraggio, standard, caratteristiche tecniche. 11. Prestazioni: sistemi digitali, risorse hardware e software, tempi di esecuzione, tempo di turnaround, throughput, utilizzo di CPU, tempo di attesa, scala temporale, periodo e frequenza di clock, scala di frequenza, definizione di prestazione, confronto di prestazioni, calcolo del tempo di esecuzione, numero medio di cicli di clock per istruzione (CPI), stima/calcolo dei CPI, overclocking, MIPS, MFLOPS, anomalie, valutazione delle prestazioni. 12. Gerarchia di memoria: località spaziale e temporale, livelli di gerarchia, capacità; velocità di accesso, costi, DRAM, SRAM, prestazioni, tempo di successo, penalità di fallimento, progetto di una gerarchia, cache, organizzazione con indirizzamento diretto, locazioni di cache, schema con indirizzamento diretto, gestione dei successi e dei fallimenti, indicizzazione di blocchi di dati, implementazione di schemi di indicizzazione a blocchi, dimensione dei blocchi e prestazioni, schemi di progetto, prestazioni. 13. Cenni di traduzione del software: traduttori, elaborazione di programmi, compilatori, binding, schema di traduzione, segnalazione di errori, tavola dei simboli, assemblatore, collegatore, caricatore. 14. Cenni di programmazione assembler: linguaggio C, programmi, assembler, verifiche, esempi, assembler MIPS, macro, direttive, allocazione di memoria, convenzioni di utilizzo dei registri, procedure, I/O, controllo/lettura ricevitore, esempi di traduzione di codice C, servizi di sistema.