Prestazioni in tempo reale per l’industriale

sistemi embedded contemporanei utilizzati per i servoazionamenti hanno bisogno di architetture ad alte prestazioni per implementare algoritmi di regolazione field-oriented che utilizzano portanti ad alte frequenze. Quando ciò viene combinato con i loop di posizione e viene usato per la generazione di traiettorie, il carico computazionale aumenta. La banda richiesta si incrementa ulteriormente quando viene aggiunto al sistema un secondo asse di movimento.Molte attuali soluzioni a microcontrollore mancano di banda nel processore in questo campo di applicazione; si possono utilizzare soluzioni con un Fpga in aggiunta a un Mcu o un soft-core per attenuare questo problema. Questo porta anche a una maggiore complessità del sistema e di conseguenza un maggior costo. Un’altra possibile soluzione è quella di utilizzare un Mpu con larghezza di banda superiore. In questo caso il problema è un incremento importante del clock della Cpu, così che la memoria di sistema non è in grado di funzionare a simili velocità, portando all’introduzione di cicli di wait o di memoria cache ad alta velocità. La memoria cache è problematica in un sistema real-time spinto poiché manca il determinismo necessario per un tempo di esecuzione limitato. Una tipica applicazione userà una quantità maggiore di programma e di dati che verranno posti nella cache. Se la cache è mancante il codice e i dati saranno caricati da una memoria più lenta, e ciò causerà una variazione dei tempi di esecuzione. I classici microprocessori Arm mancano anche di un controller degli interrupt vettorizzati, che forzerà il software a una maggiore elaborazione per trovare la sorgente di interrupt e attivare la corretta routine di servizio dell’interrupt stesso. La combinazione degli effetti della cache e dell’interrupt controller porta a un comportamento non deterministico e a un tempo di esecuzione non definibile se si verificano interrupts multipli.

Il processore real-time RZ/T1

Il processore RZ/T1 di Renesas è stato progettato per risolvere questa problematica per mezzo dell’utilizzo di un core Corex R4F. Il core R4F incorpora un nested vector interrupt controller e una Tcm (Tightly coupled memory). Il controllore di interrupt vettorizzati selezionerà per l’esecuzione il corretto interrupt handler tramite una tabella di vettori, e lo farà per mezzo di un hardware in grado di minimizzare la latenza dell’interrupt stesso. La Tcm è direttamente connessa al core con la stessa gerarchia di una memoria cache. La Tcm è una semplice Sram senza tags, presenti invece nella cache, risultando così più piccola ed efficiente da implementare. La Atcm è 512 KB ed è usata per il codice; la Btcm è 32 KB ed è usata per i dati. L’utilizzo di Atcm e Btcm permette al progettista di separare codice e dati così che essi possano essere prelevati dalla Cpu in contemporanea senza lo stallo dovuto alla pipeline. Il RZ/T1 ha fino a un 1 MB addizionale di Ram interna che è accessibile sul bus AXI tramite un sistema di cache L1. La cache L1 è organizzata come 8 KB di codice e 8 KB di dati. Ogni cache è una cache associativa indirizzata a quattro vie. La lunghezza di linea della cache è di otto words. Il bus AXI si connette anche ad un controllore di bus esterno per permettere l’uso di Sdram, Nor Flash e serial Nor Flash. La Atcm ha un accesso a singolo-ciclo se la velocità della Cpu è inferiore a 450 MHz. A 450 MHz o a 600 MHz il tempo di accesso deve includere un ciclo di wait; comunque, l’uso della pipeline e un meccanismo di predizione del flusso di programma permette di utilizzare la Tcm senza mandare in stallo la pipeline. L’accesso alla Btcm è sempre a singolo ciclo.

Benchmark di analisi del jitter

Per misurare le prestazioni real-time di RZ/T1 abbiamo creato un codice di test per eseguire il benchmark CoreMark mentre un software in background si occupa di misurare la latenza degli interrupt e il jitter nelle Isr (Interrupt service routines). Al processore è stato applicato un clock di 600 MHz e la Atcm ha un accesso con uno stato di wait e con il sistema di predizione del flusso abilitato. È stato attivato un compare match di un timer che genera un interrupt a una frequenza di 40 KHz e resetta il contatore del timer. Il contatore del timer viene letto nella Isr dopo un completo context switch nel quale tutti i registri vengono salvati. Il numero di ticks è il tempo tra l’evento di Irq e l’effettiva gestione del codice. Questo dato viene memorizzato in un istogramma e accumulato fino a che il benchmark non ha raggiunto le 20000 iterazioni. La granularità di misura è stata di 6.66 ns per tick. In prima istanza il test è stato eseguito con codice e dati nella Sram interna con la cache abilitata al fine di avere un riferimento di misura. Ciò ha portato ad avere una latenza di interrupt di 200 ns e un jitter massimo di 533 ns su un campione complessivo di 821,077 interrupts. Il test è stato ripetuto usando la Tcm dove il codice è stato posto nella Atcm e i dati nella memoria Btcm. Con questa modalità i risultati sono stati una latenza di interrupt di 200 ns, un jitter massimo di 200 ns su un campione di 882,098 interrupts. Per confronto, abbiamo eseguito lo stesso test sul Mpu RZ/A, che è un core Cortex A9 funzionante a 400 MHz con una grande quantità di Sram interna. Il benchmark è stato eseguito in Sram con 32 KB di instruction cache di livello L1 e 32 KB di data cache L1. La cache L2 non è stata utilizzata perchè la Sram interna (10 MB) è allo stesso livello gerarchico della cache L2. Il risultato finale ha mostrato una latenza dell’interrupt di 900 ns e un jitter di 900 ns su un numero di 20,068 interrupts. Questo dimostra che il RZ/A con 1000 Dmips è effettivamente più lento nella gestione degli interrupt rispetto a un RZ/T con 966 Dmips.

Soluzioni per servo controlli di movimento real-time

Per accelerare lo sviluppo delle applicazioni e abbreviare quindi il time to market, Renesas ha reso disponibile anche il Solution Kit RZ/T, una soluzione completa per lo sviluppo hardware e software che supporta fino a due servomotori in una singola piattaforma. Il kit include una scheda basata sulla Cpu RZ/T1 e un inverter dual-channel a bassa tensione con la possibilità di connettere encoder incrementali e assoluti. L’inverter è dotato di isolamento con circuiti di limitazione di corrente e di protezione contro le sovracorrenti. Un tool di Motion Utility molto flessibile e intelligente determina automaticamente il cablaggio del motore e la sincronizzazione. Tutto ciò che serve per iniziare la costruzione del proprio motore con pochi click di mouse. Per facilitare la personalizzazione, gli algoritmi sono scritti in codice sorgente.

Pubblica i tuoi commenti