Programmazione FPGA, da dove cominciare


29

Sono uno sviluppatore di software (C, C ++, goal-c, java ...) e sono interessato a imparare a programmare FPGA. Ora la domanda potrebbe sembrare semplice per te, ma per favore prenditi del tempo per aiutarmi su questo, dato che sono un po 'bloccato in questo momento. La mia azienda mi ha chiesto di familiarizzare con la tecnologia e lavorare su un prodotto reticolare. La mia domanda è da dove iniziare? Dopo alcune ricerche ho scoperto che avrei potuto scegliere tra VHDL e Verilog, non ne ho mai usato nessuno. C'è qualche specialista che potrebbe suggerirmi da dove cominciare? Impara una lingua, scopri i componenti hardware e poi il prodotto reticolare? O iniziare direttamente con il prodotto Lattice (mentre leggo che i metodi di programmazione sono molto diversi tra i fornitori FPGA)?


3
Se hai familiarità con la programmazione C / C ++, allora dovresti scegliere Verilog , piuttosto che VHDL. La sintassi di Verilog è simile a C.
m

1
@ m.Alin Ho appena iniziato e ho scoperto che non importa, se sembra C, perché ho scoperto che la parte più difficile non era la sintassi, ma la differenza nei concetti. La semantica non è nemmeno vicina a quella di C.
Edgar Klerks,

Il più grande cambiamento che ho trovato da C / C ++ / Java / etc. è che i moduli che scrivi (equivalente suppongo alle unità di traduzione) sono puramente guidati dagli eventi. In C, semplificato secondo un principio di base, un programma compilato eseguirà la riga 1 del codice, quindi la riga 2, quindi 3, quindi 4, ecc. Non esiste nulla di simile in Verilog / VHDL, è un po 'come disegnare un'immagine : questo pin di input si connette a module1_input, module1_output commuta lo stato ogni volta che module1_input diventa alto. Invece che if(condition)lo è when(condition). La maggior parte degli IDE FPGA ha persino un input per la progettazione grafica, come se lo stessi disegnando su carta.
CharlieHanson,

Risposte:


40

Il design digitale non ha molto in comune con lo sviluppo del software (forse tranne per il fatto che la sintassi di Verilog assomiglia un po 'al linguaggio C ma sembra solo). Quindi è molto difficile rispondere adeguatamente a questo tipo di domanda. Ma come ragazzo che ha percorso un percorso dallo sviluppo del software alla progettazione hardware, ci proverò. Ripensandoci, ecco come mi sarei consigliato allora se avessi saputo quello che so ora:

Iniziare da zero

Dimentica tutto sullo sviluppo del software. Soprattutto i linguaggi di programmazione. Tali principi non si applicano al design digitale. Probabilmente sarebbe facile per un ragazzo che ha progettato una CPU programmarla in assemblatore o addirittura in C, ma un programmatore di assemblatori non sarà in grado di progettare una CPU.

Sul tuo percorso di apprendimento non tendono a risolvere quello che sembra essere un problema facile con le tue conoscenze esistenti dal software. Uno degli esempi classici è un "for loop". Anche se puoi scrivere un ciclo for in, diciamo, verilog - serve a scopi diversi. Viene utilizzato principalmente per la generazione di codice. Potrebbe anche essere un ciclo for come gli sviluppatori di software lo vedono, ma non sarà buono per nulla tranne la simulazione (cioè non sarai in grado di programmare FPGA in quel modo).

Quindi, per ogni compito che vuoi affrontare, non pensare di sapere come farlo, fai invece una ricerca - controlla libri, esempi, chiedi a persone più esperte ecc.

Impara l'hardware e il linguaggio HDL

Le lingue HDL più popolari sono Verilog e VHDL. Ci sono anche quelli specifici del fornitore come AHDL (Altera HDL). Dato che quei linguaggi sono usati per descrivere i componenti hardware, sono praticamente tutti usati per esprimere la stessa cosa in una moda simile ma con una sintassi diversa.

Alcune persone raccomandano di imparare Verilog perché assomiglia a C. Sì, la sua sintassi è un mix di C e Ada ma non rende facile per uno sviluppatore di software appoggiarsi. In effetti, penso che potrebbe anche peggiorare la situazione perché ci sarà la tentazione di scrivere C in Verilog. Questa è una buona ricetta per passare dei brutti momenti.

Avendo questo in mente, consiglierei di guardare dal VHDL. Anche se Verilog è OK, purché si tenga conto di quanto sopra.

Una cosa importante da tenere a mente è che devi capire cosa stai esprimendo con quella lingua. Che tipo di hardware viene "descritto" e come funziona.

Per questo motivo, ti consiglio di procurarti un libro sull'elettronica in generale e un buon libro come questo: HDL Chip Design (alias come un libro blu).

Ottieni un simulatore

Prima di iniziare a fare qualsiasi cosa in hardware e utilizzare qualsiasi funzionalità specifica del fornitore ecc., Procuratevi un simulatore. Stavo iniziando con un Verilog e ho usato Icarus Verilog insieme a GTK Wave. Questi sono progetti open source gratuiti. Esegui esempi che vedi nei libri, esercitati progettando i tuoi circuiti per avere un assaggio di esso.

Ottieni una scheda di sviluppo

Quando hai voglia di andare avanti, procurati una scheda di sviluppo. Se sai che il tuo datore di lavoro vuole andare con Lattice, allora prendi la scheda Lattice.

I metodi di programmazione sono molto simili, ma ci sono dettagli diversi. Ad esempio, strumenti diversi, opzioni diverse, interfacce diverse. Di solito, se si ha esperienza con un fornitore, non è difficile cambiare. Ma probabilmente vorrai evitare questa curva di apprendimento extra.

Mi assicurerei anche che la scheda sia dotata di componenti che si prevede di utilizzare o che siano estensibili. Ad esempio, se si desidera progettare un dispositivo di rete come un router, assicurarsi che la scheda disponga di Ethernet PHY o che possa essere estesa tramite, ad esempio, il connettore HSMC, ecc.

Le schede vengono generalmente fornite con un buon riferimento, una guida per l'utente ed esempi di progettazione. Studiali.

Leggere libri

Dovrai leggere libri. Nel mio caso, non avevo amici che conoscessero il design digitale e questo sito non è stato molto utile neanche per una semplice cosa: non sapevo nemmeno come formulare la mia domanda. Tutto quello che ho potuto venire è stato come "Uhm, ragazzi, c'è una cosa dcfifo e ho sentito qualcosa sulle sfide di attraversamento del dominio dell'orologio, cos'è e perché il mio design non funziona?".

Ho iniziato personalmente con questi:

I venditori FPGA hanno molti libri di cucina con le migliori pratiche. Studiali insieme a progetti di riferimento. Eccone uno di Altera, per esempio.

Torna con domande più specifiche

Mentre sfogli i tuoi libri, simuli un design, lampeggi alcuni LED sulla tua scheda di sviluppo, molto probabilmente avresti molte domande. Assicurati di non vedere una risposta a quelli nella pagina successiva del libro o online (cioè nel forum specifico di Lattice) prima di chiedere loro qui.


Grazie mille per questa risposta dettagliata, mi ha davvero aiutato a vedere come posso procedere. Sfortunatamente non ho amici che possano aiutarmi. Ma mi hai appena salvato da un sacco di problemi e ancora una volta grazie mille !!!!
Anila,

5
Risposta eccellente.
Assad Ebrahim,

A scuola, abbiamo imparato il C ++ prima di apprendere il VHDL. Stavo avendo molti problemi a capirlo, ma il punto in cui tutto è stato cliccato è stato quando ho capito che tutto accade in tempo reale e in parallelo (parallelo, non asincrono come nodejs). Lo sviluppo del software segue un flusso sequenziale, ma in HDL, tutto accade contemporaneamente (la maggior parte delle volte). Se hai qualcosa come "x = 1; y = 2; y = x; x = y", in SW, alla fine y sarà uguale a 1, in HDL, avrai una condizione di gara poiché sia ​​x che y proveranno a cambiarsi l'un l'altro allo stesso tempo. Ricordalo e la vita potrebbe essere più facile per te.
PGT,

@PGT Dovresti aspettarti che il valore di y sia diverso da 1 se 'y' è accessibile a più processi in esecuzione su un singolo core o su più core, il che può imporre la sua autorità su un processo più debole.
Adithya,

1

In alternativa, è possibile utilizzare alcune tecniche di sintesi di alto livello come Vivado HLS di Xilinx e la soluzione OpenCL di Altera. Forse questo allevierà la tua curva per imparare i linguaggi di descrizione dell'hardware, considerando il tuo background di software.


-1

Per prima cosa apprendi le basi del design digitale. Macchina di Mealy / Moore, logica combinatoria, tabella di verità, mappa karnaugh e così via. Inizia a creare un design semplice in schemi (contatore a 7 segmenti) e quindi impara un HDL. In Europa viene utilizzato VHDL, negli Stati Uniti Verilog. Infine, il tempismo è importante, tenere presente che i segnali hanno ritardi che sono componenti istantanei e la temperatura dipende e che ogni segnale ha un altro ritardo.

Libro da leggere: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

La conoscenza della sintassi di Perfect Language è per dopo, prima capire il design digitale e i problemi.


In Europa viene utilizzato VHDL, negli Stati Uniti Verilog.Non è affatto vero ...
Matt Young,

In effetti, ho imparato Verilog e vengo dal Regno Unito. È anche la lingua insegnata in uno dei moduli che ho fatto a uni (anche nel Regno Unito).
Tom Carpenter,
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.