Tutorials - PIC18 by Data Sheet

 

Pagina 58

 


Il ciclo delle istruzioni

Può essere di una certa importanza il conoscere quale sia il meccanismo di svolgimento di una istruzione.

Il clock in ingresso nel microprocessore, sia che venga da un oscillatore esterno ce da uno interno, viene diviso per quattro e genera quattro sotto clock in quadratura, non sovrapposti, denominati Q1, Q2, Q3 e Q4.

Internamente, il program counter è incrementato ad ogni Q1. 
Il codice dell' istruzione viene letto dalla cella della memoria programma in cui è conservato e viene latchata in un registro provvisorio detto Instruction Register (IR). L' istruzione è decodificata ed eseguita tra Q1 e Q4.

Le fasi relative ad una istruzione si sovrappongono con quelle dell' istruzione seguente, ottenendo una maggiore efficienza e rapidità di esecuzione.



Dal diagramma qui sopra si può vedere meglio il fatto che le varie fasi sono "pipelined", eseguite in parallelo.
Per cui fetch richiede un ciclo e decodifica e esecuzione richiedono un altro ciclo, ma, essendo sovrapposti quelli di una istruzione con quelli della successiva, si ottiene come risultato che la maggior parte delle istruzioni necessita di un solo ciclo per essere eseguita.

Il ciclo comincia in Q1 con la presa in carico del codice dell' istruzione nel registro IR. Questa istruzione è decodificata ed eseguita durante Q2, Q3 e Q4. La memoria dati è letta in Q2 e scritta in Q4.

Ad esempio, una breve sequenza di istruzioni si svolge in questo modo:

 

Questo rende conto del fatto che il ciclo di istruzione è 1/4 del clock primario.

Per cui ci sarà una relazione del tipo:

Ciclo Istruzione = Clock Principale / 4

e questo permette di calcolare con esattezza la durata di un certo insieme di istruzioni e creare riferimenti di tempo.

Ecco un a tabella per avere una idea del rapporto tra clock e durata dell' istruzione (a ciclo singolo).

 

Clock Ciclo istruzione   Clock Ciclo istruzione
32 kHz 125 us    16 MHz 250 ns
1 MHz 4 us   20 Mhz 200 ns
4 MHz 1 us   24 MHz 150 ns
8 MHz 500 ns   32 MHz 125 ns
10 MHz 400 ns   40 MHz 100 ns
12 MHz 300 ns   48 Mhz 83,3 ns

Istruzioni che impiegano più cicli avranno un impegno di tempo pari al numero dei cicli.

Ad esempio, un branch condizionato, del genere BTFSS, a 40 Mhz di clock impiega:

  • se non eseguito: 1 ciclo, ovvero 100 ns

  • se eseguito sull' istruzione successiva a 2 bytes: 2 cicli, ovvero 200 ns

  • se eseguito sull' istruzione successiva a 4 bytes: 3 cicli, ovvero 300 ns

 


 

 


NOTE:

Va notato che non tutte le istruzioni si risolvono in un solo ciclo. 
Ad esempio branch e jump richiedono più cicli. 
Così pure i salti condizionati, se eseguiti, richiedono due o tre cicli.

 

 


 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 03/11/10.