Migliorare le prestazioni con eMAC e MAC in ColdFire

processore coldfire freescale emac mac

Come migliorare le prestazione in Coldfire utilizzando eMAC e MAC. ColdFire non è un DSP general purpose, che non solo ha dei MAC, ma anche modalità di indirizzamento ed istruzioni “speciali”.

Gli accumulatori multipli (eMAC) integrati sono in ColdFire dei blocchi funzionali fondamentali. Molti algoritmi utilizzati in ambito di DSP processing e di crittografia si basano fortemente su operazioni di addizione e moltiplicazione, che può essere migliorato con MAC ed eMAC. Prima di leggere questo articolo, vi preghiamo di tenere a mente che ColdFire non è un DSP general purpose, che non solo ha dei MAC, ma anche modalità di indirizzamento ed istruzioni “speciali”. L’eMAC di ColdFire può accelerare le operazioni, ma non può sostituire un DSP.

Se desideri maggiori informazioni su questo prodotto Freescale, invia una richiesta ad Arrow utilizzando il seguente modulo.

Differenza fra MAC ed eMAC

Un unità MAC dispone di un solo accumulatore, ed è un’unità ottimizzata per moltiplicazioni 16×16. Il firmware può usare solo i 16 bit superiori di operandi per realizzare le moltiplicazioni, sebbene gli operandi input ed output siano lunghi 32 bit.

L’unità eMAC ha 4 accumulatori, ed è ottimizzata per moltiplicazioni 32×32 con 48 bit di data path in modo che nel codice ottimizzato, tutti i 32 bit degli operandi sono utilizzati. Di conseguenza la precisione dei calcoli aumenti. Gli eMAC hanno modalità di funzionamento tali per cui sono necessarie meno istruzioni rispetto all’analoga soluzione MAC. La modalità faction è assente nell’unità MAC. Così, eMAC sono più veloci e dispongono di una maggiore precisione.

L’audio digitale è normalmente campionato in 16 bit, comunque analizzare 16 bit richiede almeno 24 bit in un MAC. Pertanto, se state lavorando a un prodotto digitale relativo alla musica come ad esempio un MP3, un eMAC aggiunto al ColdFire vi permetterà si sceglierlo come DSP. Il MAC a 16 bit può essere utilizzato in altre applicazioni come la compressione delle immagini, i controlli automatici e l’analisi della voce. Si consiglia di leggere un manuale di istruzioni per Coldfire.

Per assistere la clientela nell’utilizzo di eMAC, Freescale offre alcune librerie software, applicazioni dimostrative e manuali utente particolarmente dettagliato. Si può imparare ad usare eMAC per migliorare la velocità di esecuzione degli algoritmi.

Operazioni matematiche e DSP Processing

prima di leggere il resto di questa guida, si prega di osservare che alcune parti ColdFire hanno una unità MAC che non supporta il factional mode, pertanto questi documenti usano un punto fisso con un tipo floating point, come ad esempio FRAC16/32/64, che potrebbe essere dipendente dal manuale. Leggere attentamente prima dell’uso.

La libreria Freescale DSPLIB è una libreria di funzioni di DSP progettato per lavorare con eMAC e MAC nei processori ColdFire. Include 3 delle più comuni funzioni DSP: Trasformata di Fourier (Fast-Fourier transform), filtro a impulso finito (FIR), filtro a impulso infinito. La libreria supporta configurazioni differenti, come quelle di eMAC vs MAC (operazioni a 16 bit – operazioni a 32 bit). Prima di integrare la libreria nei vostri progetti, si prega di leggere testi didattici riguardanti il funzionamento di un DSP general purpose, FFT, FIR, IIR. La libreria DSPLIB copre gli aspetti più importanti. La libreria diventa più completa se si utilizza la libreria software del CFLMOPM (ColdFire’s Library of Macros for Optimization Programmer Manual).

La libreria Freescale CFLMOPM è un manuale di programmazione per eMAC/MAC e per le ottimizzazioni sulle macro e librerie, che offrono varie operazioni ottimizzate scritte nell’assembler di ColdFire. Sebbene CodeWarrior offra librerie ottimizzate in C per ColdFire, la libreria di cui sopra è stata ottimizzata manualmente in linguaggio assembler per ottenrere le migliori performance. L’operazione convolge array monodimensionali, array bidimensionali, algoritmi DSP, funzioni matematiche e progetti d’esempio per CodeWarrior. Il Wind River e il GCC sono anch’essi mensionati, ma non ho potuto localizzare il codice per la libreria. Ho verificato il codice, il codice assembler delle macro dovrebbe essere invocato inline, piuttosto che attravarso una funzione di una libreria. Ciò significa che si dovrebbe prestare attenzione al registro. L’indice del manuale non è user-friendly così illustrerò la libreria qui di seguito.

Operazioni su array monodimensionali

  • La somma degli elementi dell’array di valori con segno/senza segno
  • La somma elemento per elemento di due array contenenti valori con segno/senza segno
  • La somma elemento per elemento di due array con valori con segno/senza segno e memorizza il risultato in un terzo vettore
  • La somma elemento per elemento di un array di valori con segno/senza segno con uno scalare con o senza segno
  • Il prodotto dell’array di valori con o senza segno
  • La moltiplicazione di due array di valori con o senza segno
  • La moltiplicazione di due vettori di valori con o senza segno e memorizzazione del risultato in un terzo vettore
  • La ricerca dell’elemento massimo in un array monodimensionale
  • La ricerca di un elemento minimo in un array monodimensionale
  • Casting/Conversione di un array di elementi di tipo word in un array con elementi long, che è utile quando un programmatore vuole utilizzare la libreria con array i cui elementi sono di tipo word.

Operazioni su array bidimensionali

  • La somma di array bidimensionali di valori con/senza segno
  • La somma elemento per elemento di array bidimensionali con valori con o senza segno
  • La somma elemento per elemento di array bidimensionali con valori con o senza segno e la memorizzazione del risultato in un altro array 2D
  • La somma elemento per elemento di array bidimensionali con valori con o senza segno con uno scalare con o senza segno
  • La moltiplicaziond di due array bidimensionali con/senza segno
  • La moltiplicazione di due array bidimensionali con/senza segno e memorizzare il risultato in un terzo array bidimensionale
  • La moltiplicazione di un array 2D per uno scalare con/senza segno
  • La ricerca del massimo di un array bidimensionale
  • La ricerca del minimo in un array bidimensionale
  • Il casting in un array bidimensionale da word a long

Operazioni DSP

  • Il prodotto di due array di valori con o senza segno.
  • Il prodotto inverso di due aray con o senza segno
  • Il prodotto di due matrici di valori con o senza segno
  • La convoluzione attraverso l’uso di array di campioni e di array di coefficienti (elementi array nel FRAC32)
  • Il calcolo della prima differenza su operandi di input frazionali, chiamata comunemente derivata discreta
  • Il calcolo della somma degli operandi frazionali, chiamato anche integrazione discreta
  • Un filtro a singolo polo passa-basso (LPF)
  • Un filtro a singolo polo passa-alto(HPF)
  • Un filtro passa basso a 4 stati con 5 coefficienti.
  • Un filtro passa banda (BPF) con 5 coefficienti
  • Un filtro elimina banda (BRF) con 5 coefficienti
  • Il filtro a media mobile

Funzioni matematiche

  • Sin: funzione che realizza il calcolo aritmetico a partire dal parametro angolo per ridurre il valore dell’angolo al range di [0...PI/4] e poi chiama la macro SIN_F/COS_F per calcolare la funzione seno
  • Cos: funzione che realizza il calcolo aritmetico a partire dal parametro angolo per ridurre il valore dell’angolo al range di [0...PI/4] e poi chiama la macro SIN_F/COS_F per calcolare la funzione coseno
  • SIN_F calcolo il seno di un angolo contenuto nel range suddetto. Il calcolo è realizzato da 6 elementi che costituiscono la serie di Teylor
  • COS_F calcola il coseno di un angolo nel range sopra indicato. Il calcolo è realizzato da 7 elementi che costituiscono la serie di Teylor
  • MUL calcola il prodotto di due punti fissi nel tipo FXIED64

Possiamo ora approfondire come le funzioni nella libreria di macro possono essere integrate nel dispositivo DSPLIB per formare una DSP library più completa.

Crittografia
In generale, la crittografia è una branca della matematica in cui alcuni algoritmi possono essere accelerati da unità MAC ed eMAC. Inoltre, Freescale offre anche un’unità CAU (Cryptographic Accelerator Unit) e un generatore di numeri random (RNG) nella linea di prodotti ColdFire. L’unità di accelerazione crittografica è un coprocessore che implementa un set di operazioni specializzate nell’hardware per migliorare il throughput di software base per la crittazione e per la funzione di message diagest. Le più recenti release di ColdFire v2 MCU Kirin3 MCF52259 hanno sia eMAC che CAU/RNG.

Gli algoritmi di crittografia più noti qui utilizati sono AES/DES/MD5/SHA-1/RSA ed alcuni altri algoritmi proprietari. L’algoritmo viene utilizzato nell’identificazione, nell’autenticazione, nell’autorizzazione, nella firma digitale, nella crittazione, nella decrittazione, nei pagamenti sicuri, in ambito SSL/IPSec/VPN, tutti argomenti importantissimi.

Il CAU è un coprocessore ColdFire “instruction-level”. Implementa un set di 22 comandi del coprocessore che operano su un file registro di 8 registri di 32 bit. Si possono implementare funzioni di basso livello usando le istruzioni del coprocessore, oppure implementare funzioni di alto livello utilizzando le istruzioni ColdFire standard. Per quanto riguarda la parte CAU enabled, Freescale offre una libreria software per il supporto agli algoritmi AES, DES, MD5 e SHA-1, libreria che può essere integrata direttamente in un progetto Coldfire.

Poiché la crittografia coinvolge anche molte funzioni matematiche oltre agli operatori logici, Freescale offre applicazioni di esmepio che usano un’unità ColdFire eMAC per migliorare la performance RSA. Il principio descritto in questo documento si può applicare anche ad altri tipi di calcoli e ad altri algoritmi di crittografia, inclusi RDS/EIGammal.

In effetti, la crittografia è un argomento interessante. Ho letto svariati documenti per via del mio precedente lavoro circa l’identificazione (RFID, Smart Card). A volte è necessario cercare una strada per migliorare ed accelerare gli algoritmi come RSA, altre volte al contrario è necessario (paradossalmente) peggiorare le prestazioni per bilanciare il consumo di energia che potrebbe essere un parametro noto che potrebbe a sua volta essere utilizzato dagli hacker come sistema di riferimento. Ad ogni modo, l’acceleratore hardware è un criterio importante e se il microcontrollore può implementare l’algoritmo in firmware, diventa troppo facile da attaccare.

References

RICHIESTA DI CONTATTO
Se desideri maggiori informazioni su questo prodotto Freescale, invia una richiesta ad Arrow utilizzando il seguente modulo.

Leave a Reply