Cosa succede quando un FPGA è "programmato"?


13

Da quello che ho capito, il processo di programmazione di un FPGA si divide in due parti:

  1. Codifica la descrizione dell'hardware in bit che l'FPGA può comprendere (ad esempio scrivere un po 'di HDL e compilarlo)
  2. Caricare l'HDL compilato sull'FPGA.

La mia domanda è: "Cosa fa l'FPGA con l'HDL compilato?". Al momento, penso agli FPGA come a "hardware modellabile", in cui i fili e le porte logiche possono essere modellati su qualsiasi cosa tu voglia. Una delle cose belle è che la modellabilità è permanente: gli FPGA possono essere riprogrammati.

In che modo gli FPGA interpretano l'HDL compilato? Come si ottiene la stampabilità permanente?


4
In realtà non è permanente: il bitstream FPGA deve essere ricaricato dalla EEPROM ogni volta che viene applicata l'alimentazione. I CPLD non hanno questo problema e alcuni FPGA hanno EEPROM integrata che carica il loro flusso di bit ad ogni accensione.
AngryEE,

2
Penso che significhi "la modellabilità è permanente", cioè che il programma stesso non è permanente.
ajs410,

Risposte:


23

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.


6

La compilazione dell'HDL produce uno schema di bit che indica quali connessioni all'interno dell'FPGA devono essere attivate. L'FPGA non deve più interpretare l'HDL. Il modello di bit è programmato in un caricatore seriale Flash / EEPROM e all'avvio questo modello viene spostato nell'FPGA, effettuando i collegamenti necessari.


1
SINTESI significa tre frasi 1. Generazione di netlist 2. Ottimizzazione a livello di gate 3. Mappatura tecnologica.
Standard Sandun,

4

Il risultato della compilation è un bitstream (letteralmente un flusso di bit) che viene caricato dopo l'accensione. Questo si sposta attraverso l'FPGA che viene memorizzato in alcune celle di memoria (chiavistelli). Queste celle sono collegate a varie entità logiche, multiplexer, tabelle di consultazione, blocchi RAM, matrici di routing e costituiscono quella che viene chiamata "configurazione". Una volta caricato il bitstream, l'FPGA inizia a funzionare: i bit nei latch di configurazione "dicono" a ogni piccolo pezzo di FPGA come operare.

EDIT 24 aprile 2012: le infradito che ho citato non sono per le tabelle di ricerca o la loro configurazione. Come ha detto @ ajs410 quelli sono nella RAM, che è ancora meno transistor. Le infradito sono per l'archiviazione dei dati fuori dal LUT, se tale archiviazione è abilitata.


Quanta parte dei circuiti in un tipico FPGA è la logica e il routing effettivi e quanto è supportato dalla programmazione?
supercat,

Tecnicamente le "celle di memoria" sono infradito, non chiavistelli. Cioè sono innescati.
Brian Carlton,

@BrianCarlton: le infradito sono davvero utilizzate per tutte le celle di memorizzazione del programma? A quanto ho capito, le infradito hanno bisogno di qualcosa nell'ordine di 12-16 MOSFET per bit; al contrario, altre tecniche completamente statiche per la memorizzazione dei dati richiedono solo 5-8.
supercat,

1
Un LUT è in genere costituito da SRAM. Le infradito sono collegate all'output della SRAM.
ajs410,

1
@supercat: ho sentito che il 90% di un FPGA sta eseguendo il routing ... il resto è logico e di configurazione, ma non riesco a trovare rapidamente un riferimento :(
Martin Thompson,

1

Il termine standard è "configurazione" e non "programmazione" per un FPGA. L'FPGA è generalmente un dispositivo basato su SRAM. Una SRAM memorizza bit che indicano quali connessioni sono formate e interrotte all'interno del "tessuto logico" del dispositivo. Quando si verifica la configurazione, un flusso di bit viene inviato nell'FPGA che scrive in questa SRAM. Quando viene attivato l'FPGA basato su SRAM, i dati SRAM vengono cancellati e quando l'FPGA viene acceso, è necessario configurarli nuovamente.

Ora sappiamo questo, sono vari metodi per "configurare" e FPGA e quindi esistono diversi formati di file contenenti questo "flusso di bit". Alla fine della giornata, la struttura di questi file e i dettagli di come è configurato l'FPGA sono proprietari della produzione e queste informazioni non vengono mai condivise. Ma il principio generale rimane lo stesso per tutti gli FPGA.

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.