A giudicare dall'altra tua domanda, sei un ragazzo di Xilinx. Quindi consiglio vivamente di ottenere la scheda tecnica per il tuo chip Xilinx e andare al capitolo Descrizione funzionale. Per il chip Spartan 3 che uso, sono 42 pagine di lettura divertente. Descrive esattamente quali componenti sono all'interno di un FPGA: IOB, CLB, slice, LUT, Block RAM, Moltiplicatori, Digital Clock Manager, Clock Network, Interconnect e alcune informazioni di base sulla configurazione. È necessario comprendere queste informazioni se si desidera sapere che aspetto ha un "HDL compilato".
Una volta che hai familiarità con l'architettura del tuo FPGA, puoi capire questo processo. Innanzitutto, il tuo design HDL viene eseguito attraverso il motore di sintesi, che trasforma il tuo HDL sostanzialmente in RTL. Quindi il Mapper elabora i risultati di Synthesis, "mappandoli" sui pezzi disponibili di architettura FPGA. Quindi il router esegue Place And Route (PAR), che capisce dove vanno quei pezzi e come collegarli. Infine, i risultati di PAR vengono trasformati in un file BIT. In genere questo file BIT viene quindi trasformato in qualche modo in modo che possa essere caricato in un chip Flash, in modo che l'FPGA possa essere programmato automaticamente all'accensione.
Questo file di bit descrive l'intero programma FPGA. Ad esempio, i CLB in uno Spartan 3 sono composti da slice, che sono composte da LUT, che sono solo SRAM a 16 bit a 16 indirizzi. Quindi una cosa che il file BIT conterrà è esattamente quali dati vanno in ogni indirizzo della SRAM. Un'altra cosa che il file BIT contiene è come ogni input del LUT è cablato alla matrice di connessione. Il file BIT conterrà anche i valori iniziali che vanno all'interno della RAM del blocco. Descriverà cosa è collegato al set e ripristinerà i pin di ogni infradito in ogni slice. Descriverà come è collegata la catena di trasporto. Descriverà l'interfaccia logica per ciascun IOB (LVTTL, LVCMOS, LVDS, ecc.). Descriverà tutte le resistenze pull-up o pull-down integrate. Fondamentalmente tutto.
Per Xilinx, la memoria dell'FPGA viene cancellata quando viene avviata la configurazione (ovvero viene affermato PROG_B). Quando la memoria è libera, INIT_B si alza per indicare che la fase è completa. Il file BIT viene quindi caricato, tramite JTAG o l'interfaccia del chip Flash. Una volta caricato il programma, il Global Set / Reset (GSR) viene pulsato, riportando tutti i flip flop al loro stato iniziale. Il pin FATTO diventa quindi alto, per indicare che la configurazione è completa. Esattamente un ciclo di clock più tardi, viene rilasciato il segnale Global Three-State (GTS), che consente il pilotaggio delle uscite. Esattamente un ciclo di clock più tardi, viene rilasciato il Global Write Enable (GWE), che consente alle infradito di iniziare a cambiare stato in risposta ai loro input. Si noti che anche questo processo di configurazione finale può essere leggermente riordinato a seconda dei flag impostati nel file BIT.
MODIFICARE:
Vorrei anche aggiungere che la ragione per cui il programma FPGA non è permanente è perché il tessuto logico è composto da memoria volatile (ad esempio SRAM). Quindi, quando l'FPGA perde potenza, il programma viene dimenticato. Ecco perché hanno bisogno, ad esempio, di chip Flash come memoria non volatile per il programma FPGA, in modo che possa essere caricato ogni volta che il dispositivo è acceso.