CPU FPGA, come trovare la velocità massima?


14

Sto solo entrando negli FPGA e, se ho capito bene, stai collegando le porte logiche usando il codice. Quindi, se progetto una CPU in Verilog, dovrebbe connettere alcune porte logiche e funzionare, ma come faccio a sapere quanto velocemente può funzionare la mia CPU DIY? Da cosa dipende?


12
@KingDuken Sono curioso dell'alternativa a Verilog per progettare qualcosa come CPU che hai in mente (non VHDL presumo :))?
Eugene Sh.

1
@KingDuken Non è questo il problema, ho già creato la mia CPU e la sua architettura su breadboard e voglio portarla su un FPGA. La mia domanda è: come posso calcolare quale sia il clock di frequenza massima per la mia CPU, cosa lo limita?

4
Potresti voler google "analisi di temporizzazione statica"
The Photon,

14
@KingDuken Come qualcuno che ha progettato due CPU, non richiede molto tempo. Puoi avere un processore funzionante in 1-2 mesi, se sai cosa stai facendo.
user110971,

2
@KingDuken Curiosità: Sun / Oracle ha rilasciato il codice sorgente di Verilog sui propri processori UltraSPARC T1 e T2. Mi è capitato di averne visti diversi di persona e tutti hanno funzionato. Cordiali saluti, sono persino andati a vincere SPECint_rate2006! : D Ciò dimostra chiaramente quanto sia impossibile progettare CPU in Verilog o in altri HDL. L'ho fatto anche io un paio di volte per hobby, e non è proprio nulla di impossibile (una volta che lo tiri fuori, come sempre)
Richard the Spacecat,

Risposte:


29

La velocità di un design è limitata da diverse cose. Il più grande sarà probabilmente il ritardo di propagazione attraverso la logica combinatoria nel tuo progetto, chiamato percorso critico . Se usi un FPGA veloce e scrivi il tuo HDL con molta attenzione, potresti probabilmente colpire 700 MHz su qualcosa come Virtex Ultrascale +. Su un FPGA di fascia bassa, ad esempio uno Spartan 6, una cifra ragionevole è probabilmente più simile a 250 MHz. Ciò richiede il pipelining ovunque in modo da avere la quantità minima assoluta di logica combinatoria tra componenti stateful (minimizzare i livelli di logica), fan-out bassi (minimizzare il caricamento su elementi logici) e nessun ratto-nidi congestionato (percorsi di routing efficienti).

La logica del tessuto di diversi FPGA avrà parametri di temporizzazione diversi. Gli FPGA più veloci e più costosi avranno ritardi minori e di conseguenza possono raggiungere frequenze di clock più elevate con lo stesso design o eseguire un design o un design più complesso con meno pipeline alla stessa frequenza. Le prestazioni all'interno di un determinato processo possono essere simili - ad esempio, Kintex Ultrascale e Virtex Ultrascale sono realizzate sullo stesso processo e hanno ritardi simili di cella e instradamento. È impossibile dire quanto sarà veloce un determinato progetto senza eseguirlo attraverso la catena degli strumenti e guardare i rapporti di temporizzazione dall'analisi di temporizzazione statica.

Quando si eseguono corse di toolchain per determinare la massima velocità di clock, tenere presente che gli strumenti sono basati sul timing: cercheranno di soddisfare i vincoli di timing specificati. Se non vengono specificati vincoli di temporizzazione, il risultato può essere molto scarso poiché gli strumenti non tenteranno di ottimizzare la progettazione per la velocità. In generale, gli strumenti dovranno essere eseguiti più volte con vincoli di periodo di clock diversi per trovare la frequenza di clock massima raggiungibile.

Se riesci a ottimizzare il tuo progetto in modo che il percorso critico non sia il limite, ti imbatterai in limitazioni nella generazione e nella distribuzione di clock (PLL, DCM, buffer di clock e reti di clock globali). Questi limiti possono essere trovati nei fogli dati delle parti, ma avvicinarsi con un design non banale è difficile. Ho eseguito roba su un Virtex Ultrascale a 500 MHz, ma era solo una manciata di contatori per fornire segnali di innesco ad altri componenti.


22

Sintetizzi il tuo design nella tecnologia target (un particolare FPGA) e lasci che gli strumenti di analisi del timing statico ti diano qual è il periodo di clock minimo.

In alternativa, aggiungi innanzitutto i vincoli al progetto, quindi gli strumenti ti faranno sapere se sono stati rispettati o meno.


Cosa causerebbe il mancato rispetto dei vincoli? Cosa limita il periodo di clock? Dipende dall'FPGA che uso o è lo stesso per l'intera famiglia di FPGA (o forse per ogni FPGA esistente?)

3
Dipende dalla velocità dell'FPGA e da quanta logica combinatoria metti tra gli FF nel tuo progetto.
Dave Tweed

9
@ appmaker1358, hai provato a leggere la scheda tecnica per un FPGA? La valutazione della velocità è uno dei parametri più importanti indicati nella scheda tecnica.
The Photon,

2
La velocità sarà limitata dal percorso di temporizzazione più lungo, che sarà il ritardo di propagazione più lungo attraverso la logica e il routing tra due elementi con stato (flip flop, RAM, ecc.). FPGA diversi avranno parametri di temporizzazione diversi e quindi un design raggiungerà velocità diverse su FPGA diversi. Ci sono alcune parti dell'FPGA che sono limitate in frequenza - i componenti di distribuzione dell'orologio e i PLL di solito hanno dei limiti, ma è difficile scrivere HDL che si avvicini a quelli per progetti non banali.
alex.forencich,

3
Inoltre, è sempre necessario aggiungere vincoli di temporizzazione. Il posizionamento e il routing tengono conto dei vincoli e lavorano per cercare di soddisfarli. Se non aggiungi alcun vincolo, gli strumenti non si impegneranno molto e non otterrai un numero molto ottimista.
alex.forencich,

13

La velocità con cui verrà eseguita la CPU si baserà sul ritardo flop-flop più lungo nel progetto sintetizzato. Il ritardo flop-to-flop includerà clock-to-Q, routing, logic / LUT e tempo di configurazione del flop. Questi aggiunti insieme formano il percorso critico del tuo tempismo, che puoi ispezionare nell'output del rapporto di temporizzazione mediante lo strumento Place-and-Route.

Esistono intere discipline di progettazione dedicate alla realizzazione di architetture che minimizzano questo ritardo per ottenere il massimo da un determinato processo: pipeline, esecuzione parallela, esecuzione speculativa e così via. È un compito affascinante e coinvolgente, strappare quell'ultima oncia di prestazioni da un FPGA (o, del resto, un ASIC).

Detto questo, i fornitori FPGA forniranno diversi gradi di velocità per le loro parti, che corrispondono a una frequenza MHz massima. Ad esempio un -2 Xilinx Artix è una parte '250 MHz' in termini approssimativi sebbene sia in grado di frequenze di clock più elevate per i progetti con pipeline molto elevate.

Quando interagisci con gli strumenti di sintesi FPGA e Place-and-Route, dovrai dare dei vincoli per il tuo progetto. Questi indicano al flusso dell'utensile il ritardo flop-flop target che stai cercando di ottenere. In Quartus (Altera) e Vivado (Xilinx) questi vincoli usano una sintassi chiamata SDC, che sta per Synopsys Design Vincoli. La DSC proveniva inizialmente dal mondo ASIC ed è stata adottata anche dall'industria FPGA. Conosci la DSC: ti aiuterà a ottenere i risultati che desideri.

Altera e Xilinx hanno comunità online per aiuto su come usare la sintassi della DSC e molti altri argomenti.

Detto questo, se ti interessa la velocità, dovresti considerare un FPGA che ha una macro hard CPU, come Zynq.


-2

La CPU non funzionerà più velocemente degli orologi globali, quindi ciò porterebbe un limite superiore alla velocità con cui potrebbe funzionare. Di solito le informazioni sulla frequenza di clock massima sono elencate nei fogli dati FGPA.

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.