Hallo zusammen,
da ich noch nichts wirklich Größeres (mehr als Xlinx 100 Slices)
entwickelt habe, würde mich mal interessieren was das Größte (gemessen
an Slices) war was ihr (hobbymäßig) realisiert habt und wie lange da die
Synthese + Place&Route dauert.
Da ich aus der Softwareecke komme musste ich mich schon ein bisschen
daran gewöhnen, dass die Berechnungen für ein winziges FPGA-Projekt hier
fast länger dauern als die Kompilierung eines recht umfangreichen
Softwareprojekts...
Ciao,
Chris
> war was ihr (hobbymäßig) realisiert habt und wie lange da die> Synthese + Place&Route dauert.
Das 400k Spartan3 FPGA zu 99% voll (= ca. 2500 Slices). Dabei war der
P&R-Prozess war schon schwer am Rödeln (optimieren). Turn-Around-Zeiten
von ca. 10-15 min :-o
Lothar Miller schrieb:
>> war was ihr (hobbymäßig) realisiert habt und wie lange da die>> Synthese + Place&Route dauert.> Das 400k Spartan3 FPGA zu 99% voll (= ca. 2500 Slices). Dabei war der> P&R-Prozess war schon schwer am Rödeln (optimieren). Turn-Around-Zeiten> von ca. 10-15 min :-o
Und was hast du da gebaut?
> Und was hast du da gebaut?
Ursprünglich war das ein Kamera-Interface, das die Daten kommend von
einem S5D0127 erst mal decodiert hat, und dann in einen Speicher
geschrieben hat. Über ein Businterface konnte dein AVR dann in einen
anderen Speicherbereich ein Overlay abbilden, sodass über (oder
transparent) das Kamerabild ein Menü abgebildet werden kann. Zur
Reduzierung der Buslast kann das FPGA dann einfachere Funktionen selber
berechnen (wie z.B. Linien malen oder ein Fenster mit Rahmen zeichnen).
Zusätzlich sind darin einige SPI-Master, quasi eine
Monster-State-Machine, die aus dem DPRAM schrittweise frei
konfigurierbare SPI Übertragungen abgearbeitet hat.
Und weil ich gerade so am Basteln war und ich einfach wissen wollte,
wann das FPGA denn nun voll sein wird, noch ein paar andere Dinge, die
einfach so angefallen sind:
Drehgeber (Encoder-)Interface,
Bitstrom-Decoder für Microsonic Ultraschallsensoren,
Schnelle Eingänge (eine Art Mini LA im BRAM, Pegelwechsel + Zeitstempel)
Schrittmotor-Ansteuerung (nur lineare Rampe und nicht unterbrechbar)
Ein universelles PWM-Modul ...
Ziemlich viel Platz brauchte das Debugging:
Das lief über einen PCI-Kern als Schnittstelle zum PC
(das war mehr eine Spielerei, heute verwende ich einen LA ;-)
Meine Beobachtung:
Wenn das FPGA mal zu 99% voll ist, dann bleibt es auch so voll :-o
Nur die Rechenzeit für P&R steigt signifikant an.
Im Rahmen des Studiums, ein Cyclone 2 mit ~18000 Logikelementen voll
belegt.
Waren viele Projekte, insbezüglich was Parallelismus auf der untersten
Ebene angeht. Zum Beispiel ein Sortieralgorithmus (batcher) der direkt
die Ergebnisse einer Phase an die nächste überträgt.
Wartezeit lag da so bei 6-7 Minuten komplett mit allem.
Warscheinlich so schnell weil es tausendfach die gleichen Elemente
waren.
Iulius schrieb:
> Im Rahmen des Studiums, ein Cyclone 2 mit ~18000 Logikelementen voll> belegt.> (...)> Warscheinlich so schnell weil es tausendfach die gleichen Elemente> waren.
Ich arbeite sowohl mit Xilinx als auch mit Altera Tools, und ich habe
den Eindruck, dass Altera deutlich schneller synthetisiert. Soweit ich
weiß, können die Altera-Tools die Last auf mehrere Prozesoren verteilen,
die Xilinx-Tools aber nicht.
Bin auf der Arbeit mit einem Cyclone III und 22K LEs dabei.
Um den FPGA vollzukriegen reicht es doch oftmals einen Softcore +
Speicher + Bus zusammenzuklicken.
Notfalls noch eine FPU mit rein ;-)
Das Multicore Feature gibts aber nur bei der kostenpflichtigen Quartus
Version.
Bei meiner einfachen Web Edition ist es jedenfalls ausgegraut, ich
kann/konnte nur einen Kern nutzen.
Im Studium hatten wir letztes Semester einen FPGA-Kurs.
Der Kursleiter war im Chipdesign tätig und erzählte uns, dass die
Synthese eines ASIC (MIMO-Wlan-Systeme) auf einem
8-Doppelkernprozessor-Server im Schnitt ca. 16h dauert.
@Lothar
Deine Beobachtungen kann ich bestätigen.
Zunächst scheint das XST die Logik und die FFs getrennt in die Slices zu
legen, jedenfalls kann man die verwendeten %-Angaben von FFs und LUTs
addieren und kommt in etwa auf den Wert der Auslastung.
Je voller das Design wird, desto mehr LUTs müssen mit den FFs in einem
gemeinsamen Slice untergebracht werden.
(Teilweise hat mein Design im Synthesize Nutzung von 130%
rausgeschmissen und hat trotzdem zuende übersetzt.)
Wenn das design kurz davor ist, dass nichts mehr geht, nehmen die Werte
"Unrelated Logic" stark zu.
Ein Projekt mit dem Virtex 4 LX40, das allen Blockram belegt
(FIFO-Cores) und nur etwa 10% der Slices braucht auf meinem aktuellen
Core 2 Duo mit 4GB RAM und 3GHz immernoch etwa 15 Minuten für den
kompletten Durchlauf bis zum Bitfile. Ist mit ISE 11 schon besser
geworden. Vorher konnte ich in Ruhe Kaffee kochen und trinken gehen.
Cyclone 3c40, ca 25 kLE braucht in einer virtuellen Maschine mit 2 GByte
RAM ca. 25 Minuten zum fitten (4 Cores, 8 GByte RAM)... und das mit
incremental compilation.
Das Beste ist -- ist incremental compilation an, funktioniert parallel
compilation nicht :-o (Ein Bug... äh... Feature von Altera ;-))
Grüße,
Kest