Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Rubrica Pic32: stima prestazioni velocità.

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentegrandegiove » 27 ago 2011, 8:59

Ciao a tutti,

l'approccio ai PIC32 continua e visto che il progetto, a prescindere dal micro, funziona abbastanza bene ci accingiamo a realizzare dei prototipi su circuito stampato.

Prima di fare ciò stavo provando un attimo le prestazioni del micro: durante l'esecuzione del programma la CPU sarà sollecitata da una quantità di elaborazione abbastanza pesante o meglio, dovrà rispettare vincoli temporali piuttosto ristretti, e volevo quindi verificare effettivamente di usare il micro al masssimo delle sue potenzialità.

Il clock del sistema è 80 MHz (oscillatore XT 8MHz + PLL x10) quindi il massimo utilizzabile. Ho letto alcune discussioni che discutono del fatto che con C32 di Microchip per ottenere il masssimo delle prestazioni è necessario apporre la magic function:

Codice: Seleziona tutto
SYSTEMConfigPerformance(80000000);


che permette di settare il valore di "wait states" di flash e ram opportuno per ottenere il top delle prestazioni. Dopo aver cercato invano di replicare la funzione di libreria Microchip con MikroCpic32 sembra che gli sviluppatori MikroElektronika abbian chiarito che i valori sono automaticamente settati dal compilatore per ottenere il massimo delle prestazioni.

Detto questo veniamo al dunque:grazie alle istruzioni atomiche INV SET CLR che permettono di invertire, settare o pulire un registro con una sola istruzione dovrebbe quindi essere possibile ottenere un onda quadra in uscita di frequenza=40 MHz.
Ho trovato questo esempio scritto per C32

Codice: Seleziona tutto
#include <p32xxxx.h>
#include <plib.h>

// sysclock = 80MHz
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_2, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1


extern void toggle(int *portinv, int mask);

int main(void)
{       
    // configure cache, wait states, PBDIV
        SYSTEMConfigPerformance(80000000UL);
        mJTAGPortEnable( 0);
       
        // enable pin RA0 output
        TRISA = 0xFFFE;
       
    // call the infinite loop
    toggle( &LATAINV, 0x0001);  // toggle LED0 continuosly

        return 0;
} // main



grazie al quale l'autore sostiene di riuscire ad ottenere in uscita un'onda quadra a 40 MHz.

Ho provato a scrivere qualcosa di simile in MikroC:

Codice: Seleziona tutto
while(1)
LATGINV=0x2000;  // toggle LED0 continuosly


Ottenendo in uscita una onda quadra 10 MHz.

La mia domanda (che ai più sembrerà banale ma ben venga se questo sevirà a fugare ogni mio dubbio) è:

guardando l'equivalente assembly il codice corrisponde a:

Codice: Seleziona tutto
L_main274:
;Vision Salad.c,1177 ::       LATGINV=0x2000;  // toggle LED0 continuosly
ORI   R2, R0, 8192
SW   R2, Offset(LATGINV+0)(GP)
J   L_main274
NOP


Qui interviene la mia ignoranza nel rapporto linguaggio macchina-esecuzione del codice: da quante istruzioni è composto ogni ciclo? O meglio:quanto tempo impiega ogni ciclo?

O meglio ancora: sto viaggiando davvero a 80 MHz e quindi con l'acceleratore a manetta?

Grazie mille.
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[2] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto UtenteTardoFreak » 27 ago 2011, 10:04

Penso proprio di no.
Secondo me non stai affatto andando a tutta manetta. [-X

Nota: per farlo viaggiare a 80 MHz con un quarzo da 8MHz devi prima dividere per 2 e poi moltiplicare per 20 con il PLL. La frequenza d' ingresso del PLL deve essere compresa fra 4 e 5 MHz.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentegrandegiove » 27 ago 2011, 11:00

Sì sì sono in queste condizioni:

Quarzo: 8MHz
PLL Input divider: 2x divider
PLL Multiplier: 20x multiplier
Oscillator Confgiuration bits: Primary osc + PLL
Primary oscillator configuration: XT osc


Come sospettavo non sto andando a manetta.. Ma se stessi viaggiando a 80 MHz, con quel listato assembly che frequenza dovrei ottenere in uscita?

In quale altro modo posso verificare a che frequenza sto relamente andando?

[A margine: ho provato ad interrogare il micro con la funzione MikroC Clock_MHz e mi dice 80 ma non so esattamente se va a verifcare qualcosa o faccia riferimento solo alle impostazioni. Ma non usando MikroC questa info è inutile #-o ]
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[4] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto UtenteTardoFreak » 27 ago 2011, 11:45

Non ho mai lavorato in assembler ma ogni istruzione dovrebbe essere eseguita in un ciclo, cioè in 12,5 ns. Quelle sono 3 istruzioni quindi dovresti trovarti una frequenza di 26 MHz circa.
Ma non ne sono sicuro.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[5] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentegrandegiove » 27 ago 2011, 12:00

Esatto! Per tornarmi i conti invece dovrebbero essere 4! Ci dormirò sopra questo week end..

Per ora ti ringrazio davvero moltissimo per il supporto! :ok:

Buon fine settimana a tutti!
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[6] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto UtenteTardoFreak » 27 ago 2011, 12:04

A meno che quel salto non sia eseguito in due cicli.
Ripeto: non uso assembler. :(
Potresti provare a farlo andare istruzione per istruzione con l' assembler. Dovrebbe indicarti i cicli macchina se non ricordo male.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentegrandegiove » 31 ago 2011, 16:53

Mediante il timer1 ho verificato che sto viaggiando a 80 MHz; calcolando il periodo dell'onda quadra generata dall'interrupt del TImer1 ho verificato che i conti tornassero.

Timer 1:
-16 bit
-prescaler 256
-clock 80 MHz

Invertendo l'uscita ad ogni interrupt del timer (65535 cicli) ottengo un onda dei periodo 419,4 ms

Calcolo teorico:
1/80 MHz = 12,5 ns

12,5 ns * 65535 = 819,1875 µs

819,1875 µs * 256(prescaler)= 209.712 ms

209.712 * 2 (semiperiodi onda quadra)= 419,424 ms


Sono quindi "sicuro" che il clock del sistema sia 80 MHz.

Resta qualche dubbio sul settaggio dei valori di "wait states" di flash e ram opportuno per ottenere il top delle prestazioni in termini di velocità di esecuzione delle istruzioni. Sarei stato più tranquillo apponendo una funzione analoga alla magic istruction SystemConfig() di C32 ma non potendo fare altro mi fiderò di quanto detto dagli sviluppatori di MikroC (ovvero che il settaggio viene fatto automaticamente dal compilatore in fase di compilazione)

Grazie mille, ciao! :ok:
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

0
voti

[8] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentecrestus » 31 ago 2011, 19:00

Se proprio vuoi sapere cosa fa quella funzione di ottimizzazione potresti andarti a cercare quello che fai nei.c e .h che descrivono quella funzione, nelle cartelle del compilatore C32...

Scoperto che fa dovrebbe essere possibile replicare in qualche maniera anche in MikroC.
:roll:
...:::Pivello allo sbaraglio:::...

MY WEBSITE! come and see... ;) <-- Di nuovo online... spiacente per i problemi tecnici!
Avatar utente
Foto Utentecrestus
1.295 2 7 13
Expert EY
Expert EY
 
Messaggi: 478
Iscritto il: 3 ott 2008, 10:28
Località: studente al politecnico di torino

0
voti

[9] Re: Rubrica Pic32: stima prestazioni velocità.

Messaggioda Foto Utentegrandegiove » 14 set 2011, 10:41

E sì.. credo sia l'unica soluzione..

Leggersi i .c e .h e cercare di capire cosa fanno.. Non sono arrivato a tanto per questioni di tempo e per il fatto che sembra che comunque il PIC viaggi a manetta.. Non nego che un giorno mi piacerebbe approfondire il discorso per fare finalmente chiarezza sul tema..

Grazie mille per la dritta :ok: Ciao!
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti