So che un FPGA utilizza le tabelle di ricerca (LUT) per sintetizzare le porte logiche. Una LUT è un blocco di RAM indicizzato da un numero di input. L'output è il valore memorizzato in quell'indirizzo di memoria. La magia è che la LUT può essere programmata per visualizzare quello che vuoi per un particolare input. Quindi, una LUT può essere programmata con la tabella della verità di qualsiasi porta logica per imitarla! È così che un FPGA sintetizza le porte logiche che specifichi nel tuo codice HDL.
Stavo pensando l'altro giorno, come fa un normale computer a imitare le porte logiche? Per quanto ne so (che non è lontano), se scrivo un programma in C ++, prima deve essere compilato in codice macchina in modo che la CPU possa leggerlo. Quindi quando premo "run", il codice macchina va in memoria per attendere l'elaborazione da parte della CPU. Non sono molto chiaro su cosa accadrà dopo, ma a un certo punto la CPU deve aver eseguito le operazioni logiche contenute nel mio programma, giusto? A differenza di un FGPA, la CPU non può semplicemente sintetizzare le risorse di cui ha bisogno. Allora come esegue il programma?
Le mie ipotesi:
-
La CPU ha un numero di porte logiche predefinite. Quando incontra un'istruzione AND nel codice C ++ che sta eseguendo, utilizza uno dei suoi ANDgate. Se vede un'istruzione OR, utilizza una delle sue porte OR; se vede un'istruzione IF, usa una delle sue porte IF; ecc.
-
Oppure, la logica è implementata nella memoria in qualche modo simile a una LUT. Questo ha più senso per me poiché non si basa su un numero limitato di risorse di gate. Se il mio programma richiede tonnellate di logica OR, ad esempio, la CPU non subirà colli di bottiglia a causa della mancanza di porte OR.
Quindi, quanto sono lontano?
Modifica: grazie per le risposte a tutti, ho imparato un bel po 'di CPU e ALU. Inoltre, la "porta IF" nella mia prima ipotesi è un errore di battitura, che dovrebbe essere "porta OR" (sebbene sia solo un esempio, qualsiasi porta logica andrebbe bene). Mi dispiace per questa confusione.