INDICE
CAPITOLO 1:
INTRODUZIONE ALL’ARCHITETTURA DEI SISTEMI A
MICROPROCESSORE
1.1 Il contesto di riferimento: l’era dei sistemi embedded
e “smart”
1.2 L’architettura generale di un calcolatore
1.3 Il concetto di macchina a strati
CAPITOLO 2:
LA CODIFICA BINARIA E LA RAPPRESENTAZIONE
DELL’INFORMAZIONE
2.1 Il concetto di codifica e le unità di misura
dell’informazione
2.2 I sistemi di numerazione: posizionali e non posizionali
2.3 Il sistema binario, ottale ed esadecimale
2.4 Algoritmi di conversione di base
CAPITOLO 3:
ARITMETICA BINARIA E RAPPRESENTAZIONE DEI NUMERI
FRAZIONARI
3.1 I numeri naturali e l’aritmetica binaria
3.2 Rappresentazione dei numeri interi (con segno)
3.3 Aritmetica in complemento a 2 e il fenomeno
dell’overflow
3.4 Numeri frazionari, razionali e codifica testuale
CAPITOLO 4:
INTRODUZIONE ALLE RETI LOGICHE E ALL’ALGEBRA DI
BOOLE 4.1 L’algebra di boole: operazioni e proprietà
fondamentali
4.2 Funzioni booleane e insieme funzionalmente completi
4.3 Dalla teoria ai circuiti: reti, porte logiche e operatori
generalizzati
4.4 Tassonomia dei circuiti e metodologia di studio
4.5 Sintesi e minimizzazione: mappe di Karnaugh e don’t
care
CAPITOLO 5:
IMPLEMENTAZIONE REALE DEI CIRCUITI COMBINATORI E
MODULI STANDARD
5.1 Implementazione fisica dei valori logici e transistori
MOS 5.2 La tecnica CMOS e l’invertitore
5.3 Parametri temporali e di carico elettrico
5.4 Blocchi combinatori standard e interfacciamento BUS
5.5 Esecuzione dell’aritmetica hardware
CAPITOLO 6:
RETI SEQUENZIALI, SEGNALI DI CLOCK E COMPONENTI
DI MEMORIA
6.1 L’evoluzione verso i circuiti sequenziali: tempo e stato
6.2 Il segnale di clock: il metronomo del sistema
6.3 Elementi bistabili: dalle porte logiche ai latch
6.4 I flip-flop: sensibilità sui fronti ed evoluzioni
6.5 Architetture complesse: registri e contatori
CAPITOLO 7:
MACCHINE A STATI FINITI E DISPOSITIVI
PROGRAMMABILI
7.1 L’architettura generale di una macchina sequenziale
7.2 Il modello di Mealy e il modello di Moore
7.3 Diagrammi degli stati, tabelle e la codifica
7.4 Sintesi e dispositivi programmabili (PLS, FPGA, HDL)
CAPITOLO 8:
L’ORGRANIZZAZIONE DEI SISTEMI A MICROPROCESSORE
E L’EVOLUZIONE STORICA
8.1 L’evoluzione storica: dai sistemi “special purpose” ai
“general purpose”
8.2 Tassonomia moderna dei sistemi a microprocessore
8.3 Elementi fisici di un calcolatore
8.4 Architettura del Chipset: Northbridge e Southbridge
CAPITOLO 9:
STRUTTURA DEL PROCESSORE E MODELLI
ARCHITETTURALI
9.1 Unità funzionali e fasi di elaborzione
9.2 Tipologie di istruzioni
9.3 Il modello a registri e la gerarchia interna
9.4 Tipologie alternative di CPU: accumulatore e stack
CAPITOLO 10:
LA MEMORIA CENTRALE E LO SPAZIO DI
INDIRIZZAMENTO
10.1 L’interazione processore-memoria e i registri dedicati
10.2 Organizzazione della parola, endianness e allineamento
10.3 Spazio di indirizzamento e il fenomeno dell’aliasing
10.4 Gerarchia delle memorie, chip e packaging
CAPITOLO 11:
UNITÀ DI CONTROLLO, DATAPATH ED ESEMPI DI
PROCESSORI REALI
11.1 Il datapath e l’unità di controllo
11.2 Il ciclo del processore e le architetture di bus
11.3 Caso di studio 1: il processore coldfire (famiglia
motorale 68K)
11.4 Caso di studio 2: l’architettura ARM (advance risc
machine) 11.5 Caso di studio 3: Il processore Intel X86 (IA-32 /IA-
64)
CAPITOLO 12:
IL LIVELLO INSTRUCTION SET ARCHITECTURE (ISA) E IL
CODICE ASSEMBLY
12.1 Il ruolo dell’instruction set architecture (ISA)
12.2 Il ciclo di sviluppo del software e il linguaggio
Assembly
12.3 ISA e instruction format
Formato e codifica delle istruzioni (RISC VS CISC)
12.4 Modi di indirizzamento (addressing modes)
12.5 Le prestazioni di esecuzione (performance equation)
12.6 Compilatore
CAPITOLO 13:
L’INSTRUCTION SET ARCHITECTURE (ISA) DEL
PROCESSORE ARM
13.1 Modello a registri e modalità operative
13.2 Istruzioni di accesso alla memoria (LOAD/STORE)
13.3 Istruzioni aritmetico-logiche
13.4 Controllo del flusso ed esecuzione condizionatail
controllo del
Flusso in assembly
13.5 Direttive assemblatore e struttura di un programma
13.6 Istruzioni di accesso alla memoria
13.7 Istruzioni aritmetiche
13.8 Istruzioni MOV
13.9 Istruzioni logiche
13.10 Istruzioni di test
13.11 Istruzioni di controllo di flusso
13.12 Strutture di controllo elementare
13.14 Conditional execution
CAPITOLO 14:
L’INSTRUCTION SET ARCHITECTURE (ISA) DEL
PROCESSORE COLDFIRE
14.1 Il modello di programmazione e registri
14.2 Formato delle istruzioni e modi di indirizzamento
14.3 Set di istruzioni: aritmetica, logica e salti
CAPITOLO 15:
GESTIONE DELLE SUBROUTINE E DELLO STACK
15.1 Il concetto di stack e le subroutine
15.2 Subroutine linkage e chiamate innestate
15.3 Il passaggio dei parametri e lo stack frame
15.4 ARM subroutines e stack
15.5 Stack
15.6 Chiamate innestate e uso dello stack
15.7 Subroutine linkage
15.8 Pila
15.9 Passaggio parametri su stack
15.10 Link e allocate
CAPITOLO 16:
LA GESTIONE DELL’I/O: PROGRAM-CONTROLLED E
INTERRRUPT
16.1 Interfacce dei dispisitivi e memory-mapped I/O
16.2 Programm-controlled I/O (Polling)
16.3 Interrupt-based I/O e gestione delle eccezioni
16.4 Identificazione dei dispitivi
16.5 Nesting delle interruzioni e priorità
CAPITOLO 17:
ARCHITETTURA E PROGRAMMAZIONE DEL PROCESSORE
INTEL X86
17.1 Il modello di programmazione X86 (IA-32)
17.2 L’evoluzione a 64 bit (X64) e i registri multimediali
17.3 Organizzazione della memoria e struttura di un
programma
17.4 Modi di indirizzamento complessi e la sintassi
17.5 Gestione di funzioni e convenzione di chiamata
(calling conventions)
CAPITOLO 18:
GESTIONE AVANZATA DELLE INTERRUZIONI IN COLDFIRE
E ARM 18.1 Il sistema delle eccezioni nel motorola 6800
18.2 Il sistema delle eccezioni in ARM
18.3 Risposta ad un’eccezione
18.4 Ritorno da un’eccezione
18.5 Effetto della pipeline sul PC e indirizzamento di
ritorno in ARM
18.6 Calcolo dell’indirizzo di ritorno
18.7 Installazione di un exception handler
CAPITOLO 19:
ARCHITETTURA E PROGRAMMAZIONE INTEL X86/X64
19.1 Modello di programmazione e registri
19.2 Organizzazione della memoria e toolchain
19.3 Modi di indirizzamento X86
19.4 Segment registers e flat memory
19.5 La convenzione endianness (INTEL VS COLDFIRE)
CAPITOLO 20:
THE X86 ASSEMBLY LANGUAGE
20.1 Assembly line
20.2 Addressing
20.3 PTR directive
20.4 Esempio pratico con NASM
20.5 UBUNTU 18 Istruzioni
20.6 Esercizio
20.7 Arithemetic instructions
20.8 Bitwise opeartions
20.9 Branching
20.10 Variable length instruction encoding
20.11 Data moving
20.12 Loop-ing
20.13 Scan string (SCAS)
20.14 Data allocation
20.15 Data directive
20.16 Stack managemento – POP, PUSH
20.17 Funztions – CALL, RET
20.18 Stack evolution during X86 CALL/RETUNR
20.19 Calling conventions
20.20 GCC Disassembly (INTEL, STYLE & AT&T STYLE)
20.21 Operands FROM/TO variables
20.22 System call
20.23-24 Laboratorio
CAPITOLO 21:
CONVENZIONE DI CHIAMATA E PROGRAMMAZIONE
MISTA 21.1 L’evoluzione dello stack (call/return)
21.2 Calling conventions
21.3 Inline Assembly (integrazione C/ASM)
CAPITOLO 22:
DMA, GERARCHIE DI MEMORIA E MEMORIE CACHE
22.1 Direct memory access (DMA)
22.2 Interfaccia DMA device
22.3 Il principio della gerarchia delle memorie e delle
località
22.4 Le memorie cache e le politiche di scrittura
22.5 Chache hit
22.6 Tecniche di mapping (mappatura)
22.7 Algoritmi di sostituzione e performance
22.8 Le cache nei sistemi moderni
22.9 Intel cache levels
22.10 Analisi di un caso reale: INTERL I7-6700 SKYLAKE
CAPITOLO 23:
LA MEMORIA VIRTUALE E LA MMU
23.1 Il paradigma della memoria virtuale
23.2 Memory management unit (MMU) e paginazione
23.3 Traslazione lookaside buffer (TLB)
23.24 Il concetto di page fault
CAPITOLO 24:
PIPELINE, HAZARD E ARCHITETTURE SUPERSCALARI
24.1 Il concetto base di pipelining
24.2 Conflitti sui dati (data hazards) e forwarding
24.3 Conflitti sul flusso di controllo (branch hazards)
24.4 Predizione dei salti (branch prediction)
24.5 Architettura superscalari e out-off-order execution
CAPITOLO 25:
ARCHITETTURE PARALLELE: MULTITHREADING, SIMD E
GPU 25.1 Il multithreading hardware
25.2 Vector processing e architettura SMD
25.3 Estensioni multimediali su X86 (MMX E SSE)
25.4 Dalle CPU alle GPU (graphics processing units)
CAPITOLO 26:
ORGANIZZAZIONE LOGICA DELLA MEMORIA
26.1 Interazione processore-memoria: registri MA e MB
26.2 Il concetto di word e byte-addressability
26.3 Spazio di indirizzamento fisico e logico
26.4 Aliasing e indirizzi canonici
26.5 Endianness (ordine dei byte)
26.6 Memory aligment (allineamento in memoria)
CAPITOLO 27:
FONDAMENTI ARCHITETTURALI E RAPPRESENTAZIONE
DEI DATI 27.1 Tipi di computer e componenti fondamentali
27.2 Rappresentazione binaria dell’informazione
CAPITOLO 28:
INSTRUCTION SET ARCHITECTURE (ISA) E MODI DI
INDIRIZZAMENTO
28.1 L’accesso alla memoria e il set di istruzioni
28.2 Modi di indirizzamento
28.3 Implementazione dello stack e delle subroutine
CAPITOLO 29:
GESTIONE DELL’INPUT/OUTPUT E DELLE ECCEZIONI
29.1 Program-controlled I/O (polling)
29.2 Interrupt-based I/O
29.3 Eccezioni e stati privilegiati
CAPITOLO 30:
AMBIENTE DI SIMULAZIONE: ARM E MOTOROLA 68K
30.1 Il ciclo di sviluppo software
30.3 Easy68k (simulatore motorola 68K)
30.3 ARMDSIM# (simulatore ARM)
CAPITOLO 31:
SCHEDE DI LABORATORIO PRATICO (ASSEMBLY ARM E
68K) CAPITOLO 1
INTRODUZIONE ALL'ARCHITETTURA DEI SISTEMI A
MICROPROCESSORE
1.1 IL CONTESTO DI RIFERIMENTO: L'ERA DEI SISTEMI EMBEDDED E
"SMART"
Il mondo odierno è profondamente plasmato da tecnologie invisibili ma
onnipresenti. Da quando, quaranta anni fa, è nato il primo microprocessore, le
nostre vite sono state radicalmente ridisegnate dalla presenza di elaboratori
minuscoli ma estremamente potenti. Oggi viviamo in un mondo "smart", dove
piccoli computer integrati controllano e ottimizzano le interazioni fisiche e
digitali. Ad esempio, esistono sistemi energetici intelligenti in grado di
analizzare e ottimizzare i consumi all'interno degli edifici commerciali, sistemi
di traffico automatizzati che allontanano i guidatori dalle strade congestionate,
o ancora trattori automatizzati in grado di preparare i campi, piantare semi,
dispensare fertilizzante e raccogliere le colture in totale autonomia.
Nel settore automobilistico, la pervasività del software ha raggiunto vette
impressionanti. A titolo di confronto, un aereo da caccia di prima linea
statunitense come l'F-22 Raptor richiede circa 1,7 milioni di righe di codice
software per operare, mentre un aereo di linea come il Boeing 787 Dreamliner
necessita di circa 6,5 milioni di righe per gestire i suoi sistemi avionici e di
supporto. Sorprendentemente, un'automobile di classe premium moderna
supera di gran lunga queste cifre, arrivando a contenere quasi 100 milioni di
righe di codice software. Questo immenso carico computazionale viene
eseguito su una rete composta da un numero che varia tra 70 e 100
Electronic Control Units (ECUs): microcontrollori e sistemi elettronici
embedded dedicati che gestiscono specifiche funzioni fisiche e logiche
all'interno di un sistema complesso, coordinandosi attraverso una rete interna
per garantire il corretto funzionamento dell'intero veicolo. La presenza di questi
dispositivi non è limitata alle vetture di lusso; oggi anche le automobili di fascia
bassa ospitano tra le 30 e le 50 ECUs integrate capillarmente nella scocca,
nelle portiere, nel cruscotto, nel tetto, nei sedili e nel bagagliaio.
1.2 L'ARCHITETTURA GENERALE DI UN CALCOLATORE
Per comprendere il funzionamento dei complessi sistemi a microprocessore, è
indispensabile partire dall'architettura fondamentale di un elaboratore di base,
come il tipico Personal Computer. Ogni sistema informatico è composto da
blocchi funzionali ben definiti che interagiscono sinergicamente per acquisire,
memorizzare, elaborare e restituire i dati.
Il centro direttivo del sistema è la CPU (Central Processing Unit): il
processore centrale, spesso chiamato genericamente microprocessore, che
rappresenta il vero e proprio "cervello" dell'architettura hardware; ha il compito
essenziale di prelevare le istruzioni dalla memoria, decodificarle, eseguirle e
coordinare il funzionamento di tutte le altre unità operative. Affinché la CPU
possa lavorare efficacemente, ha bisogno di uno spazio di lavoro immediato: la
Memoria Centrale è un dispositivo di archiviazione elettronica ad accesso
primario ed estremamente rapido, nel quale risiedono momentaneamente sia i
dati da elaborare sia le istruzioni dei programmi in corso di esecuzione da parte
della CPU.
Tuttavia, CPU e Memoria Centrale sarebbero inutili senza un'infrastruttura
capace di farli comunicare tra loro e con il mondo esterno. Questo compito
vitale è affidato al Bus di Sistema: un canale di comunicazione elettronico e
condiviso, strutturato come un fascio di collegamenti fisici, attraverso cui
transitano velocemente i dati, gli indirizzi di memoria e i segnali di controllo e
sincronizzazione tra tutti i macro-componenti del calcolatore. È importante
notare che le periferiche esterne (come il monitor, la tastiera, il disco fisso e i
dischi rimovibili) non vengono collegate direttamente al bus, per motivi logici
ed elettrici. Esse si interfacciano all'elaboratore mediante appositi circuiti di
gestione detti Controllori di periferica (come il controllore del monitor o il
controllore del disco), i quali mediano le comunicazioni tra la periferica
specifica e il Bus di Sistema.
1.3 IL CONCETTO DI MACCHINA A STRATI
Un calcolatore è, nella sua essenza fisica, una fitta giungla di transistori e
circuiti. Se gli sviluppatori dovessero interagire direttamente con i segnali
elettrici, la stesura del software sarebbe un'impresa quasi impossibile. Per
questo motivo, in ambito informatico, si introduce e si adotta il concetto teorico
di Macchina a Strati: un modello logico-architetturale strutturato a livelli
gerarchici sovrapposti, dove ogni livello introduce un grado di astrazione
superiore nascondendo i dettagli tecnici complessi del livello sottostante,
offrendo così interfacce e servizi più semplici, funzionali e orientati all'utente.
La stratificazione architetturale si articola tipicamente in cinque livelli
principali, analizzabili dal basso verso l'alto:
1. Hardware: Il livello più basso e fondamentale, costituito dalle
componenti fisiche ed elettroniche reali.
2. Assembly Language (Linguaggio Assembly): Il primo strato di
astrazione logica, che fornisce una rappresentazione testuale e simbolica
delle istruzioni base eseguibili direttamente dal microprocessore.
3. Operating System (Sistema Operativo): Un complesso sistema
software che si interpone tra i programmi e l'hardware, fungendo da
amministratore e gestore delle risorse.
4. Problem-oriented Languages (Linguaggi Orientati al Problema): I
linguaggi di programmazione ad alto livello (es. C, Java, Python),
progettati per permettere agli sviluppatori di esprimere algoritmi in un
formato vicino alla logica umana piuttosto che alla logica della macchina.
5. User Level (Livello Utente/Application Programs): Il livello più alto e
astratto della gerarchia, formato dai programmi applicativi, con i quali
l'utente finale interagisce quotidianamente senza doversi preoccupare in
alcun modo dei sottostanti processi di elaborazione e conversione.
VERIFICA DELLE COMPETENZE
Parte A: Domande Teoriche (Esame Orale/Scritto)
Domanda 1: Illustrare il concetto di "Macchina a Strati", spiegando la sua
utilità per i programmatori e descrivendone accuratamente i livelli partendo da
quello a minor astrazione.
Linea guida per il massimo dei voti: Lo studente deve definire chiaramente
l'obiettivo del modello a strati (l'astrazione e l'occultamento della complessità).
Deve poi elencare, nell'ordine corretto dal basso verso l'alto, i livelli: Hardware,
Assembly Language, Operating System, Problem-oriented Languages e User
Level, descrivendo la funzione peculiare di ognuno.
Domanda 2: Descrivere l'architettura di base di un Personal Computer
concentrandosi sui componenti principali elaborativi e sull'infrastruttura di
comunicazione interna.
Linea guida per il massimo dei voti: Lo studente deve fornire definizioni
accurate di CPU, Memoria Centrale, Bus di Sistema e Controllori di periferica. È
essenziale sottolineare come il Bus di sistema faccia da mediatore generale e
perché le periferiche abbiano bisogno di un "controllore" dedicato piuttosto che
collegarsi direttamente al bus.
Parte B: Applicazione Pratica (Esercizi/Calcoli)
Scenario Pratico: Analisi dei livelli di astrazione in un Sistema Embedded
Automobilistico.
Siete incaricati di analizzare il funzionamento di un sistema antibloccaggio
delle ruote (una specifica ECU dei freni). Tracciate il flusso logico di un'azione (il
sensore rileva uno slittamento e aziona il freno) attraverso i 5 livelli della
Macchina a Strati discussi nel capitolo.
Risoluzione guidata passo dopo passo:
1. Livello 5 - User Level / Application Programs: L'applicativo "Anti-lock
Braking System (ABS)" esegue la sua logica continua: "Se rilevo che la
ruota si sta bloccando, riduci temporaneamente la pressione de
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti
-
Ambiente per la SImulazione dei sistemi a Microprocessore
-
Appunti di Architettura dei Sistemi Integrati - ASI
-
Architettura degli elaboratori - Appunti