Come ottenere un design del processore su FPGA


20

Di recente ho intrapreso un lungo viaggio nella progettazione della logica autodidatta. Il prodotto finale di questo è una CPU funzionale a 16 bit che funziona esattamente come progettato in un simulatore . Ora ho appena iniziato a esaminare la possibilità di inserirlo nel silicio tramite un FPGA. So che dovrò apportare molte modifiche all'arena di input / output (il mondo reale è diverso dall'ambiente di simulazione) e ho scoperto che ho fatto il mio disegno interamente in un programma che non esporta netlist o codice HDL quindi tutto quello che ho è uno schema.

Ma, supponendo che in qualche modo arrivi a un punto in cui ho una netlist o un codice HDL del mio progetto, qual è il mio prossimo passo per portarlo nel silicio? Così lontano da quello che ho letto sembra che FPGA sia la mia soluzione, ma guardando i siti Web Xilinx e Altera mi fa girare la testa. Sto abbaiando sull'albero sbagliato? Fondamentalmente, sto cercando una semplice descrizione inglese di quale sia il prossimo passo per un ragazzo con uno schema funzionale di una CPU. Una volta che so in quale direzione andare, posso rompere i libri e capire tutto quello che devo sapere su come arrivarci. Inoltre, sono su Mac OS X ma ho una finestra di Windows XP che posso collegare se devo assolutamente.


Quale programma ha fatto fare il vostro disegno a? Potrebbero esserci convertitori di terze parti là fuori.
Connor Wolf,

Risposte:


17

Complimenti per il design della tua CPU. Sì, l' FPGA è sicuramente il tuo prossimo passo. Ma non sei molto chiaro su ciò che ti fa girare la testa. Presumo sia il gran numero di dispositivi diversi offerti. Inoltre non dici quale simulatore stai usando.
Quando sintetizzi un progetto, il sintetizzatore dovrebbe fornirti un rapporto sulle risorse utilizzate , come il numero di porte e RAM. Questo dovrebbe darti un'idea delle parti adatte al tuo progetto. Assicurati di avere abbastanza spazio per la testa . Scegli una parte che ha un po 'di RAM aggiuntiva , di cui avrai bisogno per eseguire programmi sulla tua CPU.

modifica (re il tuo commento)
È necessario un sistema di sviluppo per un produttore specifico. Altera e Xilinx sono i grandi giocatori ed entrambi hanno i loro credenti. Quale scegli non è così importante, entrambi hanno abbastanza parti diverse per soddisfare le tue esigenze.
Se sceglieresti per Xilinx, ha il suo software di progettazione ISE WebPACK , che è gratuito (download di grandi dimensioni a 3,4 GB). Le limitazioni rispetto alle versioni più avanzate del software non dovrebbero disturbarti in questo momento.
Successivamente hai bisogno di una scheda di sviluppo. Devi avere un'idea di quale FPGA dovrai selezionarne uno. Se scegli Xilinx sceglierei uno Spartan, forse uno Spartan-6, il Virtex è già troppo di fascia alta IMO. Ci sono ancora molti tra cui scegliere, principalmente diversi negli extra sul tabellone. Avrai bisogno di una scheda con un po 'più di pochi interruttori e LED. Vorrei cercare un connettore per tastiera e un modulo display.
Xilinx ha un numero di schede e per FPGA Xilinx ci sono anche Digilent , Avnet , Xess e molti altri.

Quindi confronta un numero di schede (anche il prezzo avrà un ruolo, presumo) e scarica il software di sviluppo per l'FPGA che intendi utilizzare. Sintetizza il tuo progetto per verificare che si adatterà all'FPGA scelto, quindi sei pronto per acquistare una scheda attorno a questo FPGA.

Ho dimenticato di dire qualcosa sugli FPGA. Un FPGA è fondamentalmente una grande raccolta di porte con connessioni programmabili tra loro, in modo da poter creare praticamente qualsiasi funzione / sistema logico con esse. Nel corso di diverse generazioni, gli FPGA sono diventati più avanzati e ora hanno blocchi ottimizzati per creare funzioni efficienti come la RAM. Il sintetizzatore del tuo software di sviluppo crea lo schema di collegamento tra le porte. Questo non è memorizzato in modo permanente nell'FPGA, ma deve essere caricato all'accensione da una memoria flash di configurazione esterna. Ecco dove verrà archiviato il tuo design. Come qualsiasi altra memoria Flash, può essere cancellata e riscritta un gran numero di volte.


Ho usato Logisim, che è fantastico per gli schemi, ma manca un metodo per produrre qualsiasi cosa tranne le immagini (png, jpeg, ecc.). Sulle confusioni FPGA che ho, è in parte una questione della vasta gamma di dispositivi, ma anche non trovo risorse che spiegano le basi e i fondamenti. Se metto la mia CPU lì, come si interfaccia con il mondo esterno? Di quale attrezzatura ho bisogno? Posso riprogrammare ripetutamente l'FPGA? ecc. ecc. ecc. È davvero solo una totale mancanza di familiarità con l'argomento. Immagino di aver bisogno di una guida introduttiva, ma non la trovo da nessuna parte.
Rory O'Hare,

2
Le tue domande, in ordine: 1) Le FPGA si interfacciano con il mondo esterno tramite pin I / O. La differenza è che puoi scegliere i pin, a differenza dei chip dedicati. 2) È possibile iniziare con uno starter kit, un kit di sviluppo o simili. Questo avrà l'FPGA, alcuni connettori per I / O e alimentatori a bordo. La maggior parte include anche il programmatore; se uno non dimentica di prenderne uno. 3) Sì, è possibile riprogrammare l'FPGA. Il programma è memorizzato su chip in quello che è essenzialmente un registro a scorrimento gigante. All'avvio, una macchina a stati dedicata o una fonte esterna lo carica nel chip.
Mike DeSimone,

9

Non ho familiarità con gli strumenti di Xilinx, ma sono con quelli di Altera, quindi ti parlerò dei loro. Xilinx e altri non dovrebbero essere troppo diversi.

Verilog

La prima cosa che dovrai fare è imparare Verilog . Questo ti farà male alla testa perché Verilog (e il VHDL in qualche modo simile) è stato inizialmente progettato come un linguaggio di simulazione , e molti costrutti (come #5questo significa "attendere 5 fasi temporali", una fase temporale che di solito è un nanosecondo). Quindi ci sono molte restrizioni che devi tenere a mente per rendere sintetizzabile il tuo codice Verilog , ovvero compilabile in un flusso di bit per un FPGA.

Lo shock più grande, tuttavia, è che ciò che scrivi in ​​Verilog (e VHDL) è il comportamento che ti aspetti dal sistema , e il compilatore deduce la logica corretta dalla tua descrizione. Se non stai attento, puoi ottenere molti cattivi bug da questo.

Ad esempio, un infradito D appare come:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Descrive come funziona un DFF e il compilatore deve analizzarlo e capire che si desidera un DFF. Si @(...)chiama un elenco di sensibilità , che è un elenco di segnali che innescano una rivalutazione del blocco di codice; pertanto, in questo blocco, Qcambia solo se v'è un fronte di salita sul RESETo CLK(questo è per un ripristino attivo alto). Se si dimentica qualcosa nell'elenco di sensibilità (che dovrebbe contenere tutte le variabili del lato destro senza alcuno posedgeo negedgemodificatori per un blocco logico combinatorio) il compilatore sintetizzerà i latch secondo necessità anziché chiamare un errore. Pazzo, ma è così, perché in origine Verilog era un linguaggio di simulazione che nascondeva (e quindi non richiedeva) i dettagli di implementazione. VHDL è lo stesso ma molto più dettagliato.

Infine, una nuova versione di Verilog chiamata SystemVerilog è stata rilasciata qualche anno fa, il che rende molto più semplice la scrittura di codice sintetizzabile . Se possibile, impara questa lingua, poiché Xilinx ISE e Altera Quartus II la supportano entrambe. Il problema principale è l'assoluta mancanza di un buon materiale di riferimento.

La versione SystemVerilog di un DFF pulisce un paio di piccole cose:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Si noti che i segnali nell'elenco di sensibilità sono separati da virgole. Questo perché orera confuso poiché andnon poteva funzionare lì. Notare anche la sostituzione di 1'b0(un singolo 0bit) con '0(un simbolo che si espande a quanti 0bit sono necessari in base a ciò a cui è assegnato; molto più flessibile con i moduli parametrizzati). Infine, nota la sostituzione di always(che potrebbe essere utilizzata per qualsiasi cosa; logica combinatoria, chiavistelli e infradito) con always_ffcui è necessario sintetizzare il contenuto in infradito. C'è anche uno always_combche elimina l'elenco di sensibilità, dal momento che risolve solo le sensibilità dagli ingressi al blocco.

Il software di progettazione Altera si chiama Quartus II e cercherai la Web Edition . (Le edizioni in abbonamento sono piuttosto costose e necessarie solo per i modelli FPGA più veloci o più recenti.)

La parte triste è che non ho trovato un buon libro sull'argomento. Quello che ho imparato l'ho ottenuto mettendo insieme cose da più fonti, come i libri di Verilog che non fanno un buon lavoro nel dirti ciò che è sintetizzabile e cosa non lo è, e il codice di esempio. Quartus II ha un comando "Inserisci modello" che inserisce il codice modello per diverse strutture comuni, dalle infradito D alle macchine a stati.

Demo Hardware

Dopo aver implementato il tuo processore in Verilog, devi crearlo. Per il momento, lascia che Quartus scelga il chip (devi scegliere la famiglia; consiglierei il Cyclone IV) e le piedinature. Una volta che biulds, saprai di quanti chip hai bisogno. Ti dirà quanti elementi logici, infradito, bit RAM, ecc. Hai usato. Assicurati di non superare il 50% su nessuno di questi; se lo sei, guarda il chip scelto dal compilatore e seleziona manualmente il prossimo chip più grande (in elementi logici) che ha almeno altrettanti pin e ripeti fino a ottenere un utilizzo inferiore al 50%.

Quindi vai a fare shopping per una scheda demo che ha un chip grande almeno quanto quello con cui hai finalmente costruito. Verificare che abbia le periferiche e / o i connettori I / O necessari. Non è raro costruire una scheda figlia che si collega a un connettore di espansione per fornire qualsiasi hardware mancante.

Ora che hai scelto il tuo hardware, scopri i veri piedinatura e usa il Pin Planner per mettere i segnali giusti sui pin giusti. La scheda demo avrà una guida per l'utente che ti dirà quali pin sono collegati a quali dispositivi o pin del connettore sulla scheda demo.

Una volta impostati i piedinatura, crealo di nuovo in modo che utilizzi i pin desiderati. Tieni presente che alcuni segnali come gli orologi di sistema necessitano di pin di ingresso dedicati (quindi indirizzano direttamente ai PLL interni).

Usa il programmatore per scaricare il tuo progetto direttamente nell'FPGA (quel registro a turni di cui ho parlato qualche tempo fa). Ora sei nel familiare ciclo di debug di modifica-compilazione-esecuzione. Sbattilo finché non funziona.

Una volta che funziona, è possibile utilizzare il programmatore per scaricare il codice nel dispositivo di configurazione integrato in modo che il programma venga caricato ed eseguito all'accensione.

Questo è stato piuttosto lungo e spero che abbia aiutato alcuni. C'è molto da imparare; non è come imparare un nuovo linguaggio di programmazione tanto quanto è come imparare un nuovo paradigma di programmazione, ad esempio passare da linguaggi procedurali a linguaggi funzionali. Verilog è un linguaggio simultaneo; la maggior parte del codice è sempre in esecuzione.

In bocca al lupo!


Ottimo, molto utile. Solo per verificare una cosa, però, ho sentito parlare della cattura schematica. È una possibile alternativa all'apprendimento della verilog? Lo imparerò se devo, ma se non è necessario al 100% preferirei non aggiungerlo all'enorme elenco di cose che ho già bisogno di capire. Grazie mille
Rory O'Hare

Onestamente, non proprio. Un grosso problema è che sei in balia del programma di acquisizione schematica: se prende lo schema e genera Verilog errato, cosa puoi fare? Considerando che scrivere Verilog ti darà l'autorità necessaria per correggere tutti i bug. La grande ragione, tuttavia, è che ci sono cose che la cattura schematica non farà mai come Verilog: moduli parametrizzati e suddivisione e fusione del bus sono quelli che immediatamente vengono in mente.
Mike DeSimone,

1
Esistono strumenti che possono trasformare un linguaggio un po 'più "descrittivo hardware" in Verilog o VHDL (ad esempio se voglio che net Z sia un flip flop il cui input di dati è una combinazione di A, B e C, che viene reimpostato in modo asincrono mentre C e D sono veri, sarebbe bello poter dire qualcosa del genere Z:= A & (B # C); Z.ar = C & D;senza doversi preoccupare degli elenchi di sensibilità e simili).
supercat

Altera Quartus ti consente di inserire il tuo progetto come uno schema o AHDL (versione Altera di VHDL), o qualsiasi combinazione di questi, probabilmente includendo altri HDL. (essendo vecchio stile, ho usato principalmente la voce schematica per i miei progetti CPLD e FPGA, con un po 'di AHDL.)
Peter Bennett,

Per essere chiari, AHDL non è una versione di VHDL. Sia VHDL che Verilog sono linguaggi di inferenza , in cui il codice descrive il comportamento del circuito desiderato e il compilatore deve dedurre l'implementazione da quella descrizione comportamentale. Questo è un lascito del fatto che entrambi sono iniziati come linguaggi di simulazione e sono stati riutilizzati per la sintesi. AHDL è un linguaggio dichiarativo , in cui si dichiarano le primitive (ad es. Infradito, tabelle di verità) e come sono connesse, quindi il compilatore non deve indovinare. AHDL risale agli anni '80 ed è molto più vicino ad ABEL.
Mike DeSimone,

5

Sì, gli FPGA sono quasi sicuramente la tua soluzione!

È quasi certamente sarà necessario utilizzare uno dei linguaggi di descrizione hardware, o ri-inserire i schemi in uno strumento diverso. Consiglierei contro l'approccio schematico come

  1. i fornitori di strumenti FPGA non li supportano davvero bene
  2. Non è portatile

Dopo aver scritto HDL, purché non si inseriscano direttamente elementi dalla libreria dei fornitori utilizzando le loro varie "procedure guidate IP" o incollando direttamente i componenti dalle loro librerie, si avrà codice che è possibile trasferire su altri chip in modo equo facilmente (molto di più rispetto ad esempio al porting dell'IME C incorporato)

Inoltre, hai un ambiente di test e convalida molto migliore in quanto puoi scrivere test che "comprendono" la tua funzionalità e possono controllare i risultati per te, piuttosto che fissare le forme d'onda per vedere se tutto sembra a posto.

I 2 grandi HDL sono VHDL e Verilog. Potresti leggere questa risposta su come differiscono ...

VHDL o Verilog?

Direi anche che MyHDL vale la pena dare un'occhiata anche se conosci già Python - ti dà un'enorme capacità di verifica, ma comunque la maggior parte del controllo di basso livello che offre un HDL "normale".

Dopo aver scelto un HDL, e poi farlo funzionare (di nuovo, scusate!) In una simulazione, sarete quindi in uno stato in cui potete spingerlo attraverso gli strumenti del fornitore e apprendere il prossimo grosso pezzo dell'attività - una volta che simula correttamente, c'è sempre più sforzo di quanto pensi che riesca a sintetizzare :)

Se sei legato agli schemi e riesci a ottenere una licenza, LabviewFPGA potrebbe adattarsi a te.


3

Ottieni una copia del prototipo rapido dei sistemi digitali di Hamblen et al:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Utilizza principalmente VHDL, che preferisco a Verilog.

Include una CPU a 8 bit molto semplice, l'uP3, che ho implementato sul mio hardware Altera FLEX 10K alcuni anni fa, usando una versione precedente del libro. Lo porterò su questa scheda Cyclone II da $ 25 quando riceverò il mio PCB "pannello frontale". Include anche un processore MIPS e Altera NIOS II. Potresti lavorare attraverso gli esercizi uP3 nel libro con gli strumenti gratuiti Altera Quartus II, riscrivere il tuo codice CPU in VHDL e farlo funzionare su una scheda Cyclone II. In alternativa, Quartus II ha una voce schematica e dovresti essere in grado di inserire direttamente il tuo schema, simularlo ed eseguirlo sul Cyclone II.


1

Se la difficoltà è una ripida curva di apprendimento con abilità degli strumenti, segui il percorso più semplice. Actel (ora Microsemi) ha Libero , il pacchetto di strumenti FPGA che richiedono la lettura zero e sono facili da usare: immediatamente dopo averlo installato. Puoi effettivamente creare schemi lì a mano e con pochi clic è stato caricato su FPGA fisico, le schermate sulla strada per farlo sono molto autoesplicative.


0

Se scegli di imparare un HDL, dove ti trovi potrebbe influenzare qual è la lingua migliore. In Europa, VHDL è più popolare. Negli Stati Uniti, Verilog è più popolare, tranne per l'industria della difesa che è VHDL. (Il dipartimento della difesa degli Stati Uniti ha originariamente creato VHDL) Ciò significa solo che le persone vicino a te potrebbero essere in grado di aiutare meglio in una lingua o nell'altra. Ma se stai cercando aiuto online, potrebbe essere irrilevante.

Altri libri da considerare sono la prototipazione rapida dei sistemi digitali: SOPC Edition che si riferisce alle schede Altera DE1 e DE2. Esistono già diversi computer portati su DE1 e DE2, per darti idee su come funzionano. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), ecc. Vengono portati su questa scheda per dare un'occhiata agli esempi.

Se vai su Xilinx, ci sono due libri che mi piacciono adesso. Prototipazione FPGA di Verilog Esempi: Xilinx Spartan-3 Versione Prototipazione FPGA di VHDL Esempi: Xilinx Spartan-3 Versione Sebbene non conosca una scheda particolare da raccomandare con questi. Sono entusiasta di una scheda in arrivo, FPGA Arcade, ma dimentico se avrà un Xilinx o qualcos'altro.


0

Ho trovato questa variante che sta ulteriormente sviluppando Logisim, ora chiamato Logisim Evolution. Hanno implementato una funzione per esportare in VHDL dagli schemi di un circuito logico incorporato in logisim.

Può essere trovato qui: https://github.com/reds-heig/logisim-evolution

Sappi che questa domanda è vecchia, ma mi ha aiutato un mucchio, e spero che aiuti qualcun altro.

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.