Quando è possibile utilizzare FPGA e non utilizzare microcontrollori / DSP?


28

Devo scegliere tra un corso su microcontrollori avanzati e un corso su FPGA avanzati.

Ho avuto corsi introduttivi in ​​entrambe le materie e ciò che ora mi preoccupa è che sono già abbastanza bravo nello sviluppo del firmware per i microcontrollori e non riesco a vedere quali prodotti / progetti posso realizzare con un FPGA e non con un microcontrollore / DSP.

Puoi trovare alcune applicazioni / prodotti / progetti in cui un microcontrollore o un DSP non sarebbero sufficienti e perché?

Macchine fotografiche? Telecamere ad alta velocità? Elaborazione di immagini ad alta velocità?


4
Le ragioni principali sono praticamente 1. reazioni deterministiche al 100%, 2. potenziale enorme di parallelismo. Tuttavia, molti progetti incorporano una CPU di tipo core nell'FPGA, poiché è molto più facile programmare una logica folle per un processore, piuttosto che per l'hardware.
Dzarda,

La distinzione tra ciò che è possibile con ciascun dispositivo non è molto chiara. Ognuno ha vantaggi e ci sono soluzioni ai problemi su entrambi i lati. Non ho seguito corsi introduttivi su ciascuno di essi, mi aspetto che tu lo capisca, quindi mi chiedo esattamente cosa stai chiedendo.
Phil Frost,

Sto cercando applicazioni in cui un microcontrollore nella maggior parte dei casi non sarebbe sufficiente o in cui un FPGA sarebbe la scelta più ovvia.
Jolle,

4
Quale hai trovato più facile da capire, nel tuo corso introduttivo? Quindi scegli l'avanzato sull'altro, poiché (forse) sarai in grado di studiare il più facile da solo.
woliveirajr,

Risposte:


21

Vedi anche FPGA vs microcontrollori

L'elaborazione di immagini o video ad alta velocità è un buon esempio. O elaborare "immagini" che non sono semplici immagini ottiche, come radar o sistemi basati su laser.

La cosa fondamentale da considerare è la velocità effettiva e i requisiti di latenza . Un microcontrollore può servire un interrupt (molto approssimativamente) una volta per microsecondo. Può servire solo un interrupt alla volta. Se è necessario elaborarlo in modo elaborato, ciò limita il numero di servizi che è possibile eseguire in un determinato momento.

Con un FPGA, puoi generalmente rispondere immediatamente a un evento di input (beh, al prossimo ciclo di clock). Puoi avere molte unità di elaborazione in parallelo. Se sai che il tuo filtro impiega 20 cicli, è del tutto indipendente da qualsiasi altra cosa accada.

Il calcolo intensivo con numeri interi altamente paralleli funziona meglio su FPGA, specialmente se esistono dipendenze complesse di dati. Tuttavia, non hanno molta memoria integrata; puoi aggiungere un po 'di DRAM a lato ma a costo di latenza.

Potresti anche volerne uno per le periferiche o parlare del bus digitale ad alta velocità. Non è possibile eseguire il bit-bang dell'HDMI all'interno o all'esterno di un microcontrollore. Non è possibile creare una scheda PCI attorno a una.


16

Bene, faccio l'elaborazione in tempo reale di video HD in FPGA. Parte di ciò che faccio potrebbe essere fatto in un chip GPU, ma non su un microcontrollore o DSP. L'FPGA è più flessibile.

Molti sistemi combinano FPGA e MCU / DSP per ottenere il meglio da entrambi i mondi. Un progetto a cui sto lavorando presto prevede il riconoscimento di oggetti in un flusso video. I passaggi preliminari (rimozione del rumore, normalizzazione, rilevamento dei bordi, ecc.) Sono meglio eseguiti nell'FPGA, ma la logica di livello superiore che decide quali caratteristiche di basso livello sono parti degli oggetti che vengono riconosciuti viene eseguita meglio su una CPU (o all'interno o all'esterno dell'FPGA).

Alla fine, vorrai essere esperto in entrambe le aree, quindi è davvero solo una questione di quale fai prima.


14

In breve, gli FPGA sono buoni dove è necessario eseguire una piccola elaborazione su molti dati e le CPU sono buone dove è necessario eseguire una grande elaborazione su pochi dati.

Un flusso video HDMI contiene molti dati. Può essere fatto da una CPU, GPU o ASIC nel caso video generale, ma se devi fare un po 'di lavoro su di esso (aggiungi un overlay, ad esempio) potresti scegliere un FPGA.

Un flusso audio non contiene molti dati, ma se è necessario eseguire il riconoscimento vocale su di esso, si preferisce una CPU a un FPGA.

Mentre puoi fare radio definita da software in una CPU, puoi gestire una porzione molto più ampia dello spettro con un FPGA più facilmente che in una CPU.

Sebbene sia possibile creare un controller tastiera da un FPGA, un microcontrollore sarà più economico, consumerà meno energia e sarà più facile sviluppare un software tastiera avanzato (macro, funzioni di gioco, rimappatura) per un FPGA.

Ovviamente puoi fare qualsiasi cosa in ognuna di esse, con compromessi, ma se sei competente in entrambi, sarai in grado di soppesare i compromessi in modo più competente ed eviterai il costo maggiore delle parti o dei tempi di sviluppo che dovrai sostenere scegliendo soluzione errata a un determinato problema.


12

In genere, si utilizza un microcontrollore quando può fare il lavoro. Un microcontrollore esegue la logica eseguendo istruzioni sequenziali.

Un FPGA esegue la logica perché i suoi gate hardware sono logicamente cablati per farlo. Ciò significa che può fare le cose molto più velocemente e un certo numero di tali cose allo stesso tempo. Generalmente è più complicato e difficile creare ed eseguire il debug della stessa logica in un FPGA come in un micro, quindi si utilizza un FPGA quando sono necessarie velocità extra e bassa latenza.


8

Un'applicazione che non ho ancora menzionato è l'ingegneria microelettronica o la progettazione dei chip MCU / CPU / GPU / ASIC stessi. Questi chip sono spesso prototipati progettandoli in HDL e quindi implementati in un FPGA. Ciò li rende più facili, economici e veloci da testare e modificare prima di utilizzare finalmente l'HDL per creare il layout necessario per la produzione del silicio reale nel processore o nell'ASIC.

Un commentatore lo ha menzionato sotto forma di chip soft-core (anche se avevano un refuso e li chiamavano chip sort-core). Puoi prendere un ARM / 8051 / ecc. soft-core e qualsiasi periferica soft-core necessaria e essenzialmente progettare il proprio microcontrollore personalizzato implementato in un FPGA. Quindi, supponendo che tu abbia le risorse, potresti avere questo fabbed nel tuo microcontrollore.

Se questo tipo di applicazione ti interessa, dai un'occhiata a OpenCores per vedere cosa è possibile.


6

Costruiamo strumenti radar (apertura prevalentemente sintetica) che utilizzano ampiamente FPGA. Non credo che un microcontrollore possa facilmente soddisfare i requisiti di temporizzazione rigida. Credo che molti strumenti LIDAR utilizzino anche FPGA.

Fondamentalmente qualsiasi cosa in cui i requisiti di temporizzazione sono nei nanosecondi ha bisogno di FPGA o ASIC.


5

Un microcontrollore può elaborare i dati solo in sequenza, un'istruzione alla volta, quindi se hai un'operazione molto costosa, potresti voler rendere il tuo calcolo parallelo in qualche modo. L'elaborazione di audio / video ne è un buon esempio. Per soddisfare tale esigenza, sono stati sviluppati processori di segnali digitali che possono svolgere determinate attività in parallelo, ma non sono abbastanza generalizzati per implementare alcun algoritmo arbitrario, quindi questi processori funzioneranno per molte attività ma non per tutte. Un FPGA è un componente hardware generalizzato. Poiché è possibile definire, essenzialmente, il design del proprio hardware e quindi scaricarlo sull'FPGA, è possibile implementare qualsiasi algoritmo immaginabile, dato che ha risorse sufficienti per farlo.

Un esempio concreto: Ken Perlin suggerisce un'implementazione hardware del suo algoritmo di rumore simplex. Può essere fatto relativamente velocemente con CPU tradizionale o microcontrollore, ma può essere reso super veloce con hardware personalizzato. Poiché dubito che un DSP funzionerebbe per questo, la cosa più semplice sarebbe un FPGA. Il modo più difficile, ovviamente, sarebbe quello di avere un chip fisico reale fabbricato per te, che è incredibilmente costoso. http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf


5

Una risposta che non è qui è l'acquisizione dei dati. Se si desidera utilizzare un ADC per campionare un segnale (ad esempio un segnale RF) a 200 Mhz ed elaborarlo, un microcontrollore semplicemente non sarà in grado di elaborare i dati abbastanza velocemente. Una tipica scheda FPGA DAQ riceverà, filtrerà, eseguirà un DDC e passerà i dati RF a una CPU a una frequenza molto più bassa. Gli FPGA possono anche eseguire operazioni FFT e di canalizzazione sullo spettro RF.

Un'altra applicazione è il routing dei pacchetti, ad esempio un dispositivo che gestisce una (o più) interfacce ethernet XAUI operanti a 10 Gb / s ciascuna. Questi FPGA filtrano e programmano le code dei pacchetti per diverse destinazioni. Un microcontrollore / CPU convenzionale non sarebbe in grado di gestire la larghezza di banda di queste interfacce.


4

Il motivo fondamentale per cui microprocessori e microcontrollori possono fare così tanto con una quantità relativamente piccola di circuiti è che se il micro deve solo eseguire un calcolo complesso 1.000 volte al secondo e impiega 20 microsecondi (quindi il micro lavorerà sul calcolo 2 % del tempo), la maggior parte dell'hardware che verrebbe utilizzato per quel calcolo può essere utilizzato per altri scopi il restante 98% del tempo. I microcontrollori possono quindi utilizzare una modesta quantità di hardware per eseguire un numero molto elevato di funzioni distinte, purché le funzioni non siano necessarie contemporaneamente.

La quantità di circuiti in un FPGA sarà spesso paragonabile a quella di un microcontrollore (gli FPGA variano di dimensioni di alcuni ordini di grandezza, così come i microcontrollori, ma i range si sovrappongono). A differenza di un microcontrollore, tuttavia, i cui elementi circuitali saranno collegati in modo tale da facilitarne l'utilizzo per molte attività non simultanee, un FPGA sarà progettato per dedicare parti dei suoi circuiti a varie attività "a tempo pieno". Se si volesse che un microcontrollore conteggi il numero di impulsi che si verificano su ciascuno dei 100 ingressi, si limiterebbe a contare impulsi sufficientemente lenti da consentire al controller di gestirli in modo sequenziale, individualmente, se tutti gli ingressi potessero pulsare indipendentemente, anche un controller veloce avrebbe difficoltà a contare più di qualche migliaio di impulsi al secondo per ingresso. Al contrario,


1

FPGA implementa un circuito logico hardware o un blocco funzionale, in teoria può implementare tutto ciò che desideri. E quei blocchi sono in esecuzione contemporaneamente, probabilmente una MCU convenzionale esegue la programmazione riga per riga. Pertanto, le prestazioni dell'FPGA sono molto meglio dell'MCU, ma richiede di conoscere il linguaggio HDL o VHDL che differisce dal linguaggio di programmazione in termini di sintassi, stile e concetto.


Come ho detto, può implementare qualsiasi cosa, quindi non sorprende che tu possa implementare una MCU con blocco funzionale per facilitare lo sviluppo con alte prestazioni. C'è un blocco funzionale fornito da Xilinx per te nella MCU integrata, chiamato Microblaze. Pertanto è anche possibile eseguire un programma di sistema incorporato in FPGA.


Ad esempio, si desidera implementare un equalizzatore audio programmabile e la parte di calcolo più pesante come FFT può essere implementata mediante blocco funzionale anziché eseguire il calcolo del software. Ma alcuni dei semplici compiti come LCD, interfaccia I / O possono essere eseguiti da MCU. E FPGA ti consente di avere un sistema MCU integrato e blocchi funzionali hardware contemporaneamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.