Quali sono le differenze e le somiglianze tra FPGA, ASIC e General Microcontroller?


25

Ho letto questo post e non risponde alla mia domanda nella sua interezza:

Penso a un microcontrollore come a qualsiasi cosa che abbia memoria, registri e in grado di elaborare una serie di istruzioni come LOAD, STORE e ADD. Contiene porte logiche e simili per svolgere il suo ruolo, ma il suo compito principale è quello di essere un processore universale di bit. Penso a un Microntroller come a un sistema di progetti ASIC interconnessi per creare la capacità di memorizzare ed elaborare le istruzioni.

Penso a un dispositivo ASIC come a un circuito che è stato appositamente costruito utilizzando componenti logici ed elettrici per eseguire un singolo compito, senza altri compiti in mente né hardware aggiuntivo incluso.

Penso a un dispositivo FPGA come a un dispositivo ASIC (un dispositivo di basso livello) + un mucchio di cose inutilizzate rimaste, utilizzate per implementare una particolare tabella di verità.

Nonostante il suo nome, un FGPA sembra molto "specifico per l'applicazione", poiché deve essere ricablato per eseguire un compito nuovo e diverso. Questo porta alla confusione con ASIC. Anche se, nel caso di ricablare un FPGA, dovrebbe essere presente tutto l'hardware necessario. Inoltre, gli FPGA sono pensati per essere programmabili, ma non è questo il significato di un microcontrollore?

Il post sopra che ho citato menziona anche HDL, con cui ho familiarità. HDL non può essere utilizzato sia per ASIC che per FPGA e per procura per progettare un intero microcontrollore?


1
Non è molto chiaro quale sia la tua domanda. Hai letto domande correlate su FPGA vs ASIC? L'HDL è effettivamente effettivamente utilizzato per progettare ASIC e implementazioni FPGA e puoi progettare un microcontrollore in HDL.
pjc50,

3
Altera offre un ebook gratuito chiamato FPGA per Dummies , che spiega bene la differenza tra FPGA, ASIC e microcontrollori.
kkrambo,

@kkrambo È Callin' me un manichino? :) Scusa, non ho resistito ... Lo controllerò.
user58446

Ho aggiunto la parola "somiglianze" al titolo della domanda, perché sembra che ci siano minuscoli dettagli tecnici di gergo che potrebbero confondere il modo in cui i tre diversi dispositivi si collegano: ad esempio un dispositivo può contenere uno degli altri due dispositivi, oppure può contenere molti componenti simili ma differiscono per alcuni aspetti importanti. Questo è già stato toccato da alcune delle risposte esistenti. Grazie.
user58446,

Risposte:


28

ASIC vs FPGA

Un array di gate programmabile sul campo può essere visto come la fase di prototipazione dei circuiti integrati specifici dell'applicazione: gli ASIC sono molto costosi da produrre e una volta realizzati non si può tornare indietro (poiché il costo fisso più costoso sono le maschere [tipo di produzione "stencil "] e il loro sviluppo). Gli FPGA sono riprogrammabili molte volte, tuttavia a causa del fatto che un array generico di porte è collegato per raggiungere il tuo obiettivo, non è ottimizzato come gli ASIC. Inoltre, gli FPGA sono dispositivi nativamente dinamici in quanto se lo spegni, perdi non solo lo stato corrente ma anche la tua configurazione. Esistono ora delle schede che aggiungono un chip FLASH e / o un microcontrollore per caricare la configurazione all'avvio, quindi tende ad essere un argomento meno importante. Sia ASIC che FPGA possono essere configurati con linguaggi descrittivi hardware, e talvolta gli FPGA vengono utilizzati per il prodotto finale. Ma in genere gli ASIC si attivano quando il design è fisso.

FPGA vs microcontrollore

Per quanto riguarda la differenza tra un microcontrollore e un FPGA, puoi considerare un microcontrollore come un ASIC che sostanzialmente elabora il codice in FLASH / ROM in sequenza. Puoi creare microcontrollori con FPGA anche se non è ottimizzato, ma non il contrario. Gli FPGA sono cablati proprio come i circuiti elettronici in modo da poter avere circuiti veramente paralleli, non come in un microcontrollore in cui il processore salta da un pezzo di codice a un altro per simulare un parallelismo abbastanza buono. Tuttavia, poiché gli FPGA sono stati progettati per attività parallele, non è facile scrivere codice sequenziale come in un microcontrollore.

Ad esempio, in genere se si scrive nello pseudocodice "let C be A XOR B", su un FPGA che verrà tradotto in "costruire un gate XOR con i mattoncini lego contenuti (tabelle di ricerca e chiavistelli) e collegare A / B come input e C come output "che verrà aggiornato ad ogni ciclo di clock indipendentemente dal fatto che C sia utilizzato o meno. Considerando che su un microcontrollore che verrà tradotto in "istruzioni di lettura - è un XOR di variabili all'indirizzo A e indirizzo B di RAM, risulta archiviare all'indirizzo C. Caricare i registri delle unità logiche aritmetiche, quindi chiedere all'ALU di fare un XOR, quindi copia il registro di uscita all'indirizzo C della RAM ". Sul lato utente, tuttavia, entrambe le istruzioni erano 1 riga di codice. Se dovessimo fare questo, POI qualcos'altro, in HDL dovremmo definire quello che viene chiamato un Processo per fare sequenze artificialmente - separato dal codice parallelo. Considerando che in un microcontrollore non c'è nulla da fare. D'altra parte, per ottenere il "parallelismo" (sintonizzazione dentro e fuori davvero) da un microcontrollore, dovresti destreggiarti con fili che non sono banali. Diversi modi di lavorare, scopi diversi.

In sintesi:

ASIC vs FPGA: fisso, più costoso per un piccolo numero di prodotti (più economico per volumi elevati), ma più ottimizzato.

ASIC vs microcontrollore: sicuramente come confrontare uno strumento con un martello.

FPGA vs microcontrollore: non ottimizzato per l'elaborazione sequenziale del codice, ma può svolgere anche compiti veramente paralleli molto facilmente. Generalmente gli FPGA sono programmati in HDL, i microcontrollori in C / Assembly

Ogni volta che la velocità delle attività parallele è un problema, prendi un FPGA, evolvi il tuo design e infine rendilo un ASIC se ti costa meno a lungo termine (produzione di massa). Se le attività sequenziali vanno bene, prendi un microcontrollore. Immagino che potresti fare un IC ancora più specifico per l'applicazione se questo ti costa meno a lungo termine. La soluzione migliore sarà probabilmente un po 'di entrambi.

Che rapida ricerca dopo aver scritto questo mi ha dato: inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

FPGA vs Microcontroller, proprio su questo forum


14

Gli FPGA possono essere "ricablati" riprogrammando. Un FPGA carica la sua configurazione nelle sue celle logiche configurabili quando alimentato . Ciò significa che può essere riprogrammato senza modifiche all'hardware.

Gli ASIC possono essere ricollegati solo modificando le maschere fotolitografiche presso la fonderia di silicio.

Un microcontrollore è un tipo di ASIC, che esegue un programma e di conseguenza può fare cose generiche. Tuttavia, se si desidera modificare il set di istruzioni o fare qualcosa di simile, è necessario modificare il layout effettivo del silicio IC.


La differenza tra un FPGA e un MCU è più sfocata. Fondamentalmente, ciò che è un FPGA, a livello hardware, sono molte piccole celle SRAM, tutte collegate a una densa matrice di multiplexer. Fondamentalmente, un FPGA è un intero mucchio di logica discreta che può essere "ricablata" elettronicamente ** semplicemente riprogrammando i multiplexer e le celle SRAM.

Pertanto, è possibile implementare effettivamente un MCU all'interno di un FPGA, poiché un MCU è solo una certa configurazione di celle logiche. In effetti, gli FPGA sono molto comunemente usati nel processo di progettazione degli MCU.

Un microcontrollore è un'implementazione di una determinata configurazione logica. Il motivo per cui li abbiamo è che implementando un MCU direttamente nel silicio, la quantità complessiva di spazio della matrice in silicio richiesta può essere considerevolmente ottimizzata e alcune ottimizzazioni delle prestazioni possono essere fatte che la "generalità" richiesta di un FPGA proibisce. Ciò consente di ridurre drasticamente i costi di produzione di una MCU e, di conseguenza, la MCU comune è molto più economica di una FPGA in grado di contenere la logica equivalente.


Gli FPGA sono utili in alcune applicazioni, perché possono implementare strutture logiche in un modo che le MCU non possono. Ad esempio, se è necessario aggiungere X1 + Y1, X2 + Y2, X3 + Y3 e X4 + Y4, l'MCU dovrà eseguire ciascuna operazione in sequenza *. Un FPGA può semplicemente avere 4 ALU separate contemporaneamente , quindi può fare la stessa operazione in un quarto del tempo (supponendo che i due dispositivi siano sincronizzati alla stessa velocità).

È qui che FPGA (o ASIC progettati per lo stesso compito) possono davvero brillare, nel fatto che è possibile fare molte, molte cose contemporaneamente , cosa che un singolo processo può fare solo in sequenza.

* (nota: sto ignorando alcune cose come SIMD qui)


Non credo che la distinzione FPGA / ASIC sia sfocata; in un FPGA, i circuiti il ​​cui "cablaggio" può essere cambiato funzionano simultaneamente e indipendentemente. Una MCU ha una grande quantità di circuiti il ​​cui cablaggio non può essere modificato, il cui comportamento è controllato attraverso informazioni a cui si accede frammentariamente da un array di memoria programmabile. In qualsiasi momento, una CPU sarà generalmente in grado di eseguire solo un'operazione da un elenco di poche migliaia a qualche miliardo di scelte, ma l'MCU sarà progettata in modo tale da mettere insieme tali operazioni in sequenza consentirà di fare lavoro utile.
supercat

Grazie. MOLTO vicino a diventare la risposta ... anche se 10 mesi dopo. +1 per fare ammendate.
user58446

6

Questa è una buona domanda

Fondamentalmente un micro controller e un ASIC hanno hardware (spesso indicato come silicio) che è impostato su pietra e non può essere modificato. Un FPGA può essere configurato per rappresentare molti diversi tipi di hardware (questo può includere microcontroller).

Potresti pensare che un microcontrollore possa essere fatto per fare molte cose diverse, ma tutto questo viene eseguito eseguendo programmi diversi - tecnicamente software ma a volte indicato come firmware - l'hardware stesso non cambia essenzialmente, fa le stesse operazioni ma in un ordine diverso con ingressi diversi.

Gli FPGA vengono generalmente utilizzati per generare i progetti che si impegnano negli ASIC, la differenza è che se si desidera aggiornare il funzionamento interno di un FPGA o aggiungere / rimuovere blocchi funzionali tutto ciò che è necessario fare è aggiornare il firmware, questo non può essere fatto su ASIC poiché i meccanismi interni sono stati dedicati al silicio, non è riconfigurabile.

Quindi in breve, con un microprocessore si utilizza lo stesso hardware per eseguire programmi diversi, con un FPGA si sta riconfigurando l'hardware per eseguire funzioni diverse e gli ASIC sono come un microcontrollore in quanto l'hardware non può essere modificato ma di solito è progettato per eseguire una singola funzione estremamente efficiente.

Sia gli ASIC che gli FPGA possono contenere microcontroller e se lo fanno puoi scrivere programmi per loro come faresti con un microcontrollore autonomo, un esempio di questo è il processore incorporato NIOS II di Altera.

Se questo è ancora confuso, fammi sapere cosa non è chiaro e farò del mio meglio per chiarire la mia risposta.

zingaro


3

bene, nessun FPGA è programmato da segnali elettrici se si comportano come una raccolta specifica di gate, alcuni FPGA includono memoria flash per memorizzare questa configurazione, altri no e devono essere riprogrammati dopo ogni ripristino dell'alimentazione.

Un ASIC esce dalla linea di produzione già configurata.

I bug FPGA possono essere corretti con un aggiornamento del firmware, i bug ASIC non possono essere riparati economicamente.


2

Nonostante il suo nome, un FGPA sembra molto "specifico per l'applicazione", poiché deve essere ricablato per eseguire un compito nuovo e diverso.

Questo è l'opposto di ciò che significa "specifico per l'applicazione". È possibile utilizzare un FPGA per più di un'applicazione ricablandolo. Non è possibile modificare un ASIC, quindi può essere applicato solo a un'attività (tale attività potrebbe implementare un microcontrollore).

Anche se, nel caso di ricablare un FPGA, dovrebbe essere presente tutto l'hardware necessario.

Non sono sicuro del significato. Di solito c'è un'interfaccia software per riprogrammare un FPGA. È un ASIC che richiede milioni di [unità di valuta] hardware.

Gli FPGA sono pensati per essere programmabili, ma non è questo il significato di un microcontrollore?

Un microcontrollore consente di programmare software sequenziale per un hardware fisso. Proprio come un normale computer, ma molto piccolo e con risorse limitate. Un FPGA consente di programmare qualsiasi hardware desiderato utilizzando un HDL.

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.