LoL n°10 – ELE5 – Circuiti Microprocessore

by / domenica, 10 maggio 2020 / Published in Didattica, Lezioni On-line

 

LEZIONI on LINE n° 10

Elettronica

Circuiti del Microprocessore

 

Per gli alunni della classe 5° di elettronica Istituto Tecnico

Prerequisiti:

  1. simbologia ed utilizzo degli Schemi a Blocchi (SB);
  2. rappresentazione dei segnali elettrici
  3. lettura dei data sheet

Risorse a disposizione:

  1. libro di testo;
  2. appunti presi in classe;
  3. definizione dello studio autonomo-assistito
  4. ricerca su internet

Risorse a disposizione su internet:

http://www.iduesarchiaponi.com/lol-n6-ele5-circuito-sh/

http://www.iduesarchiaponi.com/lezione-a-distanza-n2-5d-convertitori-a-d/

 

(S&H) http://www.iduesarchiaponi.com/lol-n6-ele5-circuito-sh/

struttura interna del microprocessore (Samuele Costantinopoli)

http://www.iduesarchiaponi.com/struttura-interna-del-microprocessore-di-samuele-costantinopoli/

 

Un microprocessore spesso chiamato anche chip è un singolo circuito integrato in grado di effettuare operazioni decisionali, di calcolo o di elaborazione dell’informazione. Il microprocessore principale di un computer viene chiamato processore o CPU.

Va premesso che ormai questi circuiti sono prodotti con costi molto contenuti ma i processi costruttivi e tecnologici che troviamo alla loro base sono tutt’altro che semplici o addirittura banali (la scheda basata sul microprocessore Atmega328 costruita da Arduino che prenderemo in considerazione costa intorno ai 20 euro).

In figura la struttura interna di un microprocessore già vista

 

Nello schema troviamo:

(1) Bus Dati: consente lo scambio di dati tra i vari dispositivi che compongono il sistema.

(2) Bus indirizzi: rappresenta il canale attraverso il quale viene fornito da parte della CPU l’indirizzo della locazione di memoria o del dispositivo di I/O interessato dalla trasmissione.

(3) Bus controlli: consente di trasmettere l’insieme dei segnali necessari alla corretta gestione dell’intero sistema. La sincronizzazione dei vari dispositivi è gestita da questi segnali ed in particolare dal segnale di clock.

(4) ALU: Unità di controllo aritmetica e logica, è un circuito logico di natura combinatoria in grado di processare numeri binari (0 e 1). Può eseguire non solo le addizioni e sottrazioni ma anche le operazioni logiche AND, OR, XOR e NOT.

(5) Instruction Register: La funzione di questo registro è quello di memorizzare l’istruzione che deve essere eseguita. Questa istruzione è espressa in forma codificata per cui la sua esecuzione può avvenire solo dopo la sua traduzione in linguaggio macchina.

(6) Decodificatore di istruzioni: L’unità di decodifica si occupa di ricevere le istruzioni in ingresso e di attivare le opportune unità interne del processore per eseguire l’istruzione caricata.

(7) Registri di uso generale: Si tratta dell’insieme dei registri che, pur non svolgendo compiti particolari all’interno del microprocessore, risultano particolarmente utili in quanto consentono di memorizzare temporaneamente informazioni, dati o indirizzi all’interno del microprocessore.

(8) Accumulatore: E’ un registro molto utilizzato per memorizzare i risultati delle varie operazioni effettuate dalla ALU ed è interessato anche dalle operazioni di ricezione e di invio dei dati.

(9) Program Counter: questo registro scandisce la sequenzialità delle varie operazioni. Il program counter è un registro che conserva l’indirizzo di memoria della prossima istruzione da eseguire.

(10) Registro di Stato: Il registro di stato può essere scomposto in più celle elementari (flags) che consentono di ricavare una serie di informazioni relative allo stato delle unità interne al microprocessore. I flags comunemente presenti sono:

flag C = carry (presenza di riporti)

flag Z = zero (se il risultato è uguale a 0)

flag V = overflow (se esiste un traboccamento nell’esecuzione di somme aritmetiche (V))

flag S = segno (se il segno del risultato è positivo)

(11) Stack Pointer: Questo registro, presente in quasi tutti i tipi di microprocessore, viene utilizzato per indirizzare, secondo le istruzioni del programma denominata area di stack. Tale zona di memoria è organizzata come un registro LIFO (Last Input First Output).

Da quanto sopra vediamo che abbiamo utilizzato le seguenti strutture che andiamo ad analizzare in maggior dettaglio:

  • bus (wire di connessione)

  • ALU (circuito combinatorio)

  • decoder – IR

  • registri

    • generali – Acc. (registri generali a byte)

    • status register – SR (registri generali a bit)

    • stack pointer – SP (indirizza lo Stack che è una area di memoria di tipo LIFO a byte)

Si vede subito come i circuiti sono connessi tra loro dai bus, dati o indirizzi, che sono bidirezionali. I bus dati sono a 8 bits mentre i bus indirizzi sono a 16 bits (con 2 elevato alla 16 avremo la possibilità di indirizzare 64K locazioni di memoria). Per tutti i tipi avremo per ogni singolo bit il circuito sottostante che permette di gestire i dati in entrata o in uscita e quando serve li pone nello stato ad alta impedenza.

Questo circuito ci fa capire che prima di usare Arduino dobbiamo configurare il tipo del piedino, lo stato in alta impedenza permette la presenza del pin sul bus di collegamento senza subire danni.

Questo circuito è quello troviamo all’interno dei pin di connessione del microcontrollore come nel punto (6) seguente.

per proseguire caliamo la nostra teoria nella realtà vedendo lo schema circuitale della scheda Arduino:

questo schema comprende:

(1) Quarzo: è il clock di sistema che si può notare vale 16 MHz

(2) connettore di alimentazione: è connettore per la tensione e il punto di riferimento (massa) del sistema

(3) connettori dei dati di I/O: sono i connettori, digitali o analogici, per i dati della scheda. Particolare attenzione va posta ai pin digitali 1 e 2 nel caso si utilizzi il monitor seriale sullo schermo del PC

(4) CPU sulla scheda: nella scheda sono presenti due CPU di cui una provvista di una interfaccia USB. Queste due CPU sono basate sulla famiglia ATMEL ed esattamente la Atmega(8/16/32)U2 che è un microcontrollore basa sull’architettura RISC e la Atmega8

(5) connettore di tipo USB: è il connettore di tipo USB che ci permette di caricare velocemente il programma da eseguire sulla scheda

(6) pin di I/O del microcontrollore: sono i pin, digitali o analogici, dove sono connessi i segnali sia di controllo della scheda sia quelli provenienti dall’esterno. Dove i pin hanno lo stesso nome, come quelli evidenziati, vuol dire che sono tra di loro connessi.

 

Lo schema (schema Atmega8U2) che segue è preso dal data sheet del microcontrollore Atmega8U2 che possiamo considerare la CPU della scheda Arduino.

 

struttura interna

schema Arduino

(1) Bus Dati (3) connettori dei dati di I/O
(2) Bus indirizzi (6) pin di I/O del microcontrollore
(4) ALU

(5) Instruction Register

(6) Decodificatore di istruzioni

(7) Registri di uso generale
(9) Program Counter
(10) Registro di Stato
(11) Stack Pointer

In questo schema troviamo una parte che si riferisce alla struttura interna ed una altra parte che si riferisce alla schema Arduino, sono stati evidenziati con il box verde l’oscillatore interno della CPU e con il box porpora la memoria interna della CPU. Nella memoria di tipo EEPROM viene caricato il programma scritto dal programmatore e la memoria di tipo SRAM viene utilizzata per le variabili e i dati necessari al programma.

I circuiti combinatori (basati sulla struttura del Full Adder) della ALU sono già stati visti ed analizzati nell’articolo sulla struttura del microprocessore.

L’IR, anche se ovviamente fortemente influenzato dal clock per il sincronismo di tutto il sistema, è un circuito ti tipo decoder. Cioè un componente che in base all’istruzione in linguaggio macchina caricata nel registro attiva una combinazione di bit, opportunamente temporizzati, che sono inviati alle linee di controllo dei singoli blocchi per la corretta gestione di tutta la CPU.

I registri sono particolari dispositivi di memoria, di capacità ridotta (uno o due byte), posti all’interno del microprocessore, con i quali si possono manipolare temporaneamente dati e indirizzi.

Riportiamo come esempio lo schema interno del registro SN74194 che è uno shift register universale con ingressi ed uscite sia in serie che in parallelo. Capire il funzionamento del circuito non dovrebbe essere troppo complicato e viene lasciato come esercizio.

Abilitando in modo opportuno i segnali di controllo in ingresso possiamo scrivere il dato (a 4 bits) nel registro o in serie o in parallelo. In modo analogo abilitando i segnali di controllo in uscita possiamo leggere il dato che era stato precedentemente scritto nel registro oppure lo possiamo tenere memorizzato nello stesso. Il tutto ovviamente in maniera sincrona con il segnale di clock.

Lo status register avrà la stessa struttura ma ovviamente dovranno essere separati per ogni singolo dato i segnali di controllo in uscita.

I registri di tipo LIFO seguono la logica riportata nella figura sottostante ed è facile pensare che ancora una volta nello schema generale del registro, che rimane inalterato, devono solo essere cambiati in modo opportuno i segnali di controllo. Un ruolo importante è gestito dallo stack pointer dove viene memorizzato l’indirizzo della prossima istruzione, memorizzata nello stack, che deve essere eseguita.

 

Molti microprocessori moderni sono progettati per eseguire set di istruzioni molto complessi. Questo set di istruzioni renderebbe difficile l’esecuzione di più istruzioni contemporaneamente. Quindi molti microprocessori traducono le istruzioni complesse in sequenze di istruzioni più semplici da eseguire. Anche questo lavoro viene svolto dall’unità di decodifica. Nel caso di Arduino il set di istruzioni è piuttosto piccolo.

 

Esempio n° 1 – funzionamento della CPU:

Fasi per l’esecuzione di una istruzione all’interno della CPU:

Il processore, iterativamente, preleva (fetch) un’istruzione dalla memoria di programma (EEPROM), la decodifica (decode) e la interpreta, ed infine la esegue (execute) combinandola coi dati relativi all’istruzione stessa.

 

l’esecuzione di una istruzione avviene in due fasi:

  • fase 1 – fetch (prelevamento) e “decodifica”

  • fase 2 – execute

se consideriamo la semplice istruzione (carica il valore contenuto all’indirizzo specificato [il valore corrente di una variabile] in in registro)

load r1,loc

load (anche usato lw = load word) che necessita di due argomenti

indirizzo della locazione di memoria da leggere (loc)

il registro in cui scrivere il dato (r1)

nella fase 1 le operazioni sono comunicare l’indirizzo alla memoria e l’operazione di lettura

nella fase 2 trasferire il dato prelevato al registro scelto

 

in dettaglio avremo:

fase 1:

  1. nel PC è contenuto l’indirizzo dell’istruzione da eseguire

  2. l’indirizzo e caricato nell’IR

  3. che predispone i comandi per prelevare il dato dalla memoria e portarlo nell’IR

  4. i comandi vengono eseguiti per leggere l’istruzione in memoria

  5. e successivamente caricarla nell’IR

  6. viene decodificata

fase 2:

  1. l’indirizzo e caricato nell’IR

  2. che predispone i comandi per prelevare il dato dalla memoria e portarlo nel registro scelto

  3. i comandi vengono eseguiti per leggere il dato in memoria

  4. e successivamente caricarlo nel registro

  5. viene incrementato il PC, tranne per le istruzioni di salto dove nel PC viene scritto il valore opportuno

 

 

CONCLUSIONI:

Il microprocessore, ed il suo funzionamento, è un argomento molto complesso, questo articolo e solo una veloce introduzione per studi più complicati.

 

Roma 10 maggio 2020

Il docente

LERTERI C. Francesco

(7)

Lascia un commento

TOP