Hallo, ich möchte mich mal mit FPGAs beschäftigen da ich manche Dinge sehe die nur mit einem Logikbaustein (klein) umsetzbar sind. z.B möchte ich gerne 50 PWM mit unterschiedlichem Tastgrad generieren. Ich möchte mir dazu das ATLYS Board mit Spartan 6 hohlen und später eine entsprechende Platine fertigen. Ohne jetzt genau zu wissen welche Recaucen ich benötige bin ich etwas verwundert über die Beiträge und Beispiele. Ohne jemanden zu nahe zu treten und mit FPGAs fange ich gerade selber an, aber ich sehe irgendwie keine Projekte die einen ca. 30Euro teuren FPGA (oder weit mehr) rechtfertigen. Ohne die Diskussion in die falsche Richtung zu lenken: Wer setzt einen FBGA ein weil es nicht mit einer CPU zu lösen ist und baut mehr wie 1000 Stück davon. Ich finde eigendlich nur Prototypen Bastlerobjekte oder einfach Baugruppen aus Hochschulen. Ich arbeite mit ARM 7 9 und cortex M3. mehrere davon decken in der Regel alles ab. Natürlich rede ich hier von Dingen unter ein paar MHZ, dass es Ausnahmen gibt, ist klar. Da auch CPLDs nicht wirklich preiswerter sind frag ich mich zur Zeit ob es sich lohnt FPGA und Co zu erlernen wenn es nicht wirtschaftlich erscheint. Vieleich kann man die beantwortung ja in Bezug zu 50 PWMs setzen (500Hz, 10Bit)
Für 50 PWMs könnte es einfacher sein mehrere kleine billige Mikrocontroller zu verwenden... die ham ja alle schon Hardware PWMs, auch mit 16 Bit ;) Mit SPI verbinden und fertig. FPGAs sind sinnvoll wenns um hohen Datendurchsatz und geringe Latenz geht.
Wir setzen FPGAs ein. Ist zwar immer noch Kleinserie, aber mehr als 1000 Stück haben wir schon verbaut (Spartan 3e). Da gehts um schnelle Datenaufnahme und -verarbeitung von ADCs, 100MS/s mit 16 Kanälen parallel (2 Kanäle pro Spartan), das wird man kaum mit µC bewerkstelligen können. Das ist neben schnellen Kommunikations-Sachen das Hauptanwendungsgebiet. Schnelle, parallele Datenverarbeitung. Jedes DSO beispielsweise hat (mehrere) FPGA(s) im Frontend zum Daten sammeln. Übrigens haben aktuelle DVB TV Karten aucvh FPGAs on Board, beispielsweise die Mehrkanal-Tuner für PCIe von Digital Devices.
Es gibt auch Bausteine für LEDs. Die können soweit ich weiß pro Kanal in der Frequenz / Tastverhältnis parametriert werden. Die gibts auch in ziemlich groß. Evtl. reicht Dir da ein Baustein + uC. Schau mal bei Maxim...
Frank schrieb: > Vieleich kann man die beantwortung ja in Bezug zu 50 PWMs setzen (500Hz, > 10Bit) 500Hz? Das sollte ein Cortex M3 doch locker als Soft-PWM zustande bringen?
mit einem kleinen fpga der spartan a reihe zu 5,- das sTück lassen sich einige hunderte IOs schalten. die internen resourcen sollten für locker 100 pwms reichen, wenn man es pipelined aufbaut und multiplexed. mit 50 mhz Takt wären das 500kHz PWM wenn Dir das reicht
@ Frank (Gast) >Ohne jemanden zu nahe zu treten und mit FPGAs fange ich gerade selber >an, aber ich sehe irgendwie keine Projekte die einen ca. 30Euro teuren >FPGA (oder weit mehr) rechtfertigen. Jung du noch bist, mein ungeduldiger Freund. Wirr deine Gedanken und wild dein Herz. >Ohne die Diskussion in die falsche Richtung zu lenken: Wer setzt einen >FBGA ein weil es nicht mit einer CPU zu lösen ist Mensch die weiser sein als du, das Leben gesehen sie haben. Vor allem sie nicht zahlen wollen, die Kosten für ASIC, mit hohem Risiko verbunden sie sind. > und baut mehr wie 1000 Stück davon. >Ich finde eigendlich nur Prototypen Bastlerobjekte oder einfach >Baugruppen aus Hochschulen. Klein dein Horizont noch ist, weit gehen in die Welt du musst noch. >Ich arbeite mit ARM 7 9 und cortex M3. mehrere davon decken in der Regel >alles ab. Über den Tellerand schauen du musst. Die richtigen Fragen du finden musst, nicht Anwort geben du sollst. >Natürlich rede ich hier von Dingen unter ein paar MHZ, dass es Ausnahmen >gibt, ist klar. Ah, ein Lichtblick es gibt. > Da auch CPLDs nicht wirklich preiswerter sind frag ich >mich zur Zeit ob es sich lohnt FPGA und Co zu erlernen wenn es nicht >wirtschaftlich erscheint. Viele Firmen es gibt, die verkaufen gut FPGA. Viele Milliarden Umsatz sie machen in jedem Sonnenzyklus. Ein Zeichen das ist, nur deuten du musst. >Vieleich kann man die beantwortung ja in Bezug zu 50 PWMs setzen (500Hz, >10Bit) Ein nettes Spielzeug du willst, nicht schwer zu tun in FPGA. Möge die Macht mit dir sein.
5€ wird evtl. knapp. Spartan 6 LX 4 hat 600 Slices mit je 8 FlipFlops, das sollte für 100 PWM mit 10 Bit reichen. Der TQ144 hat 102 I/Os und kostet gerade mal 9€ bei Degikey. Vielleicht kriegt man einen Spartan 3 in der Größe für 5€. Die sind ja auch spottbillig mittlerweile.
Frank schrieb: > Ich finde eigendlich nur Prototypen Bastlerobjekte oder einfach > Baugruppen aus Hochschulen. Ist doch logisch - wer erzählt denn schon etwas über den internen Aufbau seiner Entwicklung? Genau, Bastler und Hochschulen. Frank schrieb: > Quelle??? der 5 Euro FPGAs die füe 100 PWMs reichen. Spartan 3E-100 sollte locker für 100 PWM reichen. Und der sollte in entsprechenden Stückzahlen für 5 Euro zu haben sein (Einzelstücke liegen bei 9 Euro bei Digikey). Ein MachXO sollte eigentlich auch reichen.
@ Frank (Gast) >Quelle??? der 5 Euro FPGAs die füe 100 PWMs reichen. Die kleinsten heute verfügbaren FPGAs machen das mit Gähnen. z.B. XC3S50A, kostet in der Apotheke Farnell 8 Euro, in Stückzahlen vielleicht 2-3 Euro. MFG Falk
Ein 50er Spartan wird nicht ganz für 100 PWMs reichen, weil alle Zustände mit entsprechenden Speichern gehalten werden müssen. Die internen slices reichen gerade fürs IO banking und an BRAM ist bei den S3A-Viechern nicht viel. Ein 200er kostet in Stückzahlen unter 4,-. Mit dem hat es gleich das 4 fache an slices und auch ausreichend Ram für gleich 200 PWMs.
@ Holger (Gast) >Ein 50er Spartan wird nicht ganz für 100 PWMs reichen, weil alle >Zustände mit entsprechenden Speichern gehalten werden müssen. Der 50er hat 704 SLices, macht 1408 FlipFlops. OK, wird bissel eng mit 100 PWMs, es sei denn man beschränkt sich auf 4 Bit ;-) Aber mit etwas Knoff Hoff und schnellen Takten baut man mit den BRAMs ne clevere State Machine und packt die 100 PWMs dort rein. Ansatz. Die PWM-Vergleichswerte liegen in einem BRAM, der fasst 2048 Byte. Wenn man nun die PWM per State Machine einzeln vergleich ala Soft-PWM, braucht man 100 Takte. Macht bei 100 MHz effektiv dann 1 MHz PWM-Takt. Naja, nicht so doll. Aber Halt, man kann ja parallelisieren. Den BRAM kann man 32 Bit breit nutzen, damit kann man vier PWMs parallel berechnen, macht schon mal 4 MHz. Und man kann die BRAM mit zwei Ports unabhängig nutzen, macht nochmal Faktor zwei, also 8 MHz. Der 50er hat drei BRAMs, also nochmal Faktor 3, macht 24 MHz PWM-Takt. Und mit bissel Ehrgeiz kommt man vielleicht auf 150 MHz, ist man schon bei 36 MHz PWM Takt. Not too bad. Also nicht so schnell die Flinte ins Korn werfen. MFG Falk
Die Kunst ist immer zu wissen, welche Technologie man für welches Projekt einsetzen sollte. Genauso wie man nicht alles in Basic, als Bash-Script oder in Java schreibt, gibt es hier auch Unterschiede. Die Erkenntnis kommt erst mit der Erfahrung (oder einem fiesen Problem, bei dem man merkt, dass es mit normalen µCs nicht mehr getan ist). Interessant werden FPGAs dann, wenn sie billiger als Controller-Lösungen sind, die das gleiche machen.
@ Mampf F. (mampf) >Interessant werden FPGAs dann, wenn sie billiger als >Controller-Lösungen sind, die das gleiche machen. Nicht nur dann, sondern auch, wenn sie Dinge machen, die Controller eben NICHT machen können. 100 PWMs mit 36 MHz macht auch der fetteste DSP nicht mehr ohne weiteres in Software. MFG Falk
Falk Brunner schrieb: > Den BRAM kann man 32 Bit breit nutzen, Du kannst die BRAMs auch 256 Bit breit nutzen und dazu jeden Datensatz in einem eigenen BRAM parken.
Tag, ich finde es schade das manches immer so weit auseinanderläuft, aber neben dummen Antworten ist ja auch etwas brauchbares dabei. Mir hat ein "Experte"mal gesagt das 14 Bit PWM mit 500 Hz und den entsprechenden Beiwerk wie Speicher für die Reloudwerte und den ganzen Timern sowie der Logik zum Bedienen über SPI schon einen LX45 (Spartan 6) ganz schön beschäftigen können. Der ist dann auch noch nicht voll, aber die Hälfte wurde mir schon vorhergesagt. Soll ja auch nicht statisch laufen sondern flüssig mit einer CPU die das ganze füttert. Deswegen bin ich jetzt etwas überrascht das manche schon 100 Pwm in einen spartan 3a hineinbekommen der bei 5€ 50k Gatter hat. Soll ja auch funktionieren und von "könnte gehen" abweichen. Ich programmiere nicht seit gestern und Softpwms habe ich auch schon programmiert, aber wenn es daran geht gleichzeitig eine Schnittstelle mit den Werten zu überwachen und noch ein paar andere Dinge ist bei CPUs schnell Ende. Die Hardware PWMs benutzen ja die Timer mit, und die brauch man leider auch öfter für andere Dinge. Werde mal nen Urlaub damit verbrauchen, ich hatte nur gehofft der ein oder andere hätte da schon mal etwas Erfahrung mit.
Na rechne doch mal selbst nach. Eine 14 Bit PWM braucht einen 14 Bit Zähler und ein 14 Bit Register für den Reload-Wert. Also 28 FlipFops. Für 100 PWM der Art also 2800 FlipFlops. Das ist nun wirklich nicht die Welt. Wenn du den o.g. Spartan 6 LX 4 nimmst, der hat schon 4800 FlipFlops, da ist der nicht mal halb voll. Dann noch ein paar Register für die SPI oder was auch immer für das Host Interface und gut. Bei einer PWM. Wie man damit einen LX45 halb voll bekommen soll ist mir unklar. 50Mhz ist da auch nicht die Welt, ist ja kaum Kombinatorik.
Frank schrieb: > Ich programmiere nicht seit gestern und Softpwms habe ich auch schon > programmiert, aber wenn es daran geht gleichzeitig eine Schnittstelle > mit den Werten zu überwachen und noch ein paar andere Dinge ist bei CPUs > schnell Ende. Hast du schonmal an eine Lookuptable für alle 1024 Werte (10 Bit) gedacht (RAM haben die Cortex Dinger ja ausreichend)? In jedem Tabelleneintrag (32 Bit) kannst du dann den Wert von 32 Pins speichern. Das heißt bei jedem Timerintervall (500Hz mal 1024) brauchst du nur einen Zugriff auf die Lookuptable. Da es Cortex Modelle jenseits von 100MHz gibt, sollte eine Timerfrequenz von etwa 500kHz und sagen wir mal großzügig 30 Cycles pro Intervall, doch mehr als ausreichend Spielraum für SPI übriglassen.
Christian R. schrieb: > 50Mhz ist da auch nicht die Welt, ist ja kaum Kombinatorik. Der Spartan 6 läuft ohne grössere Verrenkungen auf 150 MHz.
Falk Brunner schrieb: > @ Mampf F. (mampf) > >>Interessant werden FPGAs dann, wenn sie billiger als >>Controller-Lösungen sind, die das gleiche machen. > > Nicht nur dann, sondern auch, wenn sie Dinge machen, die Controller eben > NICHT machen können. 100 PWMs mit 36 MHz macht auch der fetteste DSP > nicht mehr ohne weiteres in Software. Genau das meinte ich. Meine Aussage hat sich nicht darauf beschränkt, dass man nur einen Controller hat :-)
@ Frank (Gast) >Mir hat ein "Experte"mal gesagt das 14 Bit PWM mit 500 Hz und den >entsprechenden Beiwerk wie Speicher für die Reloudwerte und den ganzen >Timern sowie der Logik zum Bedienen über SPI schon einen LX45 (Spartan >6) ganz schön beschäftigen können. ;-) "Expert" eben. >aber die Hälfte wurde mir schon vorhergesagt. Weihnachtsmärchen. > Soll ja auch nicht >statisch laufen sondern flüssig mit einer CPU die das ganze füttert. Ja und ? Da gähnt der FPGA müde. Beitrag "Re: LED-Matrix, 9x9 RGB, Voll dimmbar" Ist zuwar "nur" 13 Bit PWM und 100 Hz, spielt aber keine Geige. >Deswegen bin ich jetzt etwas überrascht das manche schon 100 Pwm in >einen spartan 3a hineinbekommen der bei 5€ 50k Gatter hat. Mit echtem Expertenwissen. ;-) >Ich programmiere nicht seit gestern und Softpwms habe ich auch schon >programmiert, aber wenn es daran geht gleichzeitig eine Schnittstelle >mit den Werten zu überwachen und noch ein paar andere Dinge ist bei CPUs >schnell Ende. FPGAs sind keine CPUs. Bei FPGAs kann man MASSIV parallel arbeiten. Das ist deren großer Vorteil. Und Bitschubserei, Zähler und anderer Kram ist auch DEUTLICH perfomanter. Dafür will man rein mit einem FPGA eher keinen TCP/IP Stack programmieren. @ tomb (Gast) >Hast du schonmal an eine Lookuptable für alle 1024 Werte (10 Bit) >gedacht (RAM haben die Cortex Dinger ja ausreichend)? Zu groß. >In jedem Tabelleneintrag (32 Bit) kannst du dann den Wert von 32 Pins >speichern. Das heißt bei jedem Timerintervall (500Hz mal 1024) brauchst >du nur einen Zugriff auf die Lookuptable. Oder gleich clever, mit Soft-PWM deluxe ;-) MfG Falk
Christian R. schrieb: > Eine 14 Bit PWM braucht einen 14 Bit > Zähler und ein 14 Bit Register für den Reload-Wert. Also 28 FlipFops. > Für 100 PWM der Art also 2800 FlipFlops. Den Zaehler braeuchte man doch eigentlich nur einmal.
Falk Brunner schrieb: >>Hast du schonmal an eine Lookuptable für alle 1024 Werte (10 Bit) >>gedacht (RAM haben die Cortex Dinger ja ausreichend)? > > Zu groß. Überhaupt nicht. 8KB RAM ist nichts bei den Dingern >>In jedem Tabelleneintrag (32 Bit) kannst du dann den Wert von 32 Pins >>speichern. Das heißt bei jedem Timerintervall (500Hz mal 1024) brauchst >>du nur einen Zugriff auf die Lookuptable. > > Oder gleich clever, mit Soft-PWM deluxe ;-) Schneller als über Lookuptable wirds nicht gehen ;) Mit sortierten Listen braucht man zumindest ein paar Cycles mehr.
Nur zur Veranschaulichung. Die ISR mit Loopkuptable schaut im einfachsten Fall so aus:
1 | ISR(TIMER1_COMPA_vect) { |
2 | PWM_PORT = lookup[TIMER_CNT] |
3 | }
|
Will man nicht alle 1024 Stellen ausfüllen sieht es so aus:
1 | ISR(TIMER1_COMPA_vect) { |
2 | if(TIMER_CNT == 1023) |
3 | PWM_PORT = lookup[TIMER_CNT] |
4 | else
|
5 | PWM_PORT |= lookup[TIMER_CNT] |
6 | }
|
Auf die Art und Weise sind 500Hz 10 Bit PWM mit einem Cortex M3 locker drin, dafür leg ich meine Hand ins Feuer ;)
@ tomb (Gast) >> Zu groß. >Überhaupt nicht. 8KB RAM ist nichts bei den Dingern Ich meinte, man braucht kein 1024 Array. >> Oder gleich clever, mit Soft-PWM deluxe ;-) >Schneller als über Lookuptable wirds nicht gehen ;) Schnell in Bezug auf was? Der Einzelinterrupt oder die gesamte Interruptlast? >Mit sortierten Listen braucht man zumindest ein paar Cycles mehr. Einmalig, wenn sich die PWM-Werte ändern. Aber auch das ist erträglich. Dein Array muss ja auch jedesmal aktualisiert werden, wenn gleich man das mit etwas Hirnschmalz schon recht fix hinbekommt. Ok, es ist ein guter Kompromiss, wenn man mehr RAM hat. MfG Falk
Falk Brunner schrieb: > Schnell in Bezug auf was? Der Einzelinterrupt oder die gesamte > Interruptlast? Einzelinterrupt, wenn es darum geht "sauber" eine möglichst hohe Frequenz zu erreichen >>Mit sortierten Listen braucht man zumindest ein paar Cycles mehr. > > Einmalig, wenn sich die PWM-Werte ändern. Aber auch das ist erträglich. > Dein Array muss ja auch jedesmal aktualisiert werden, wenn gleich man > das mit etwas Hirnschmalz schon recht fix hinbekommt. Ok, es ist ein > guter Kompromiss, wenn man mehr RAM hat. Man braucht nicht die ganze Tabelle aktualisieren, wenn man das Portregister mit dem Lookupwert verODERt (zweite Variante). Per sortierte Liste ist natürlich eleganter, wobei ich zugeben muss, dass ich den Counterwert noch selbst verglichen hätte, anstatt einfach das OCR Register neu zu setzen.
@tomb (Gast) >Man braucht nicht die ganze Tabelle aktualisieren, wenn man das >Portregister mit dem Lookupwert verODERt (zweite Variante). Man muss aber bei Änderungen der PWM-Werte den alten Wert löschen und den neuen setzen. Aber die Idee mit der LUT kann man auch sehr perfomant im FPGA umsetzen bei noch mehr Takt und noch besserer Resourcennutzung! MFG Falk
Falk Brunner schrieb: > Man muss aber bei Änderungen der PWM-Werte den alten Wert löschen und > den neuen setzen. Ja genau, also zwei Speicherzugriffe, das ist jetzt nicht die Welt. Den alten zu löschenden Index merkt sich am besten der SPI-Master. > Aber die Idee mit der LUT kann man auch sehr perfomant im FPGA umsetzen > bei noch mehr Takt und noch besserer Resourcennutzung! Stimmt, da eignen sich BRAM Blocke natürlich prima dafür. Aber für 500Hz wäre es halt noch nicht notwendig. Wobei die Variante mit der Liste ebenfalls auf BRAM zugreifen könnte und dabei nicht wesentlich langsamer wäre.
> ;-) "Expert" eben. < Den habe ich genauso gefragt wie euch jetzt, kann genauso sein das er recht hat und Ihr Mist erzählt!? Die Loop UP Table finde ich eine gute Sache, werde ich mal ausprobieren. Bisher hatte ich eine LU benutzt um meinen Interrupt mit dem nächsten auftreten einer Änderung zu programmieren. Hatte aber bisher nur 16 SoftPwms zu bedienen. Schaue ich mir jeden der 1024 Werte an kann das mal besser sein oder auch belastender von der CPU Zeit gesehen. Ich will nochmal betonen das es mir nicht um CPU gegen FPGA geht. Ich will lediglich wissen was eben nur Meinungen sind und was der Realität entspricht. 150Mhz kann ja möglich sein, wenn das Dingen dann aber so heiß wird das ich es kühlen muss habe ich auch nichts mehr davon.
Christian R. schrieb: > Eine 14 Bit PWM braucht einen 14 Bit > Zähler und ein 14 Bit Register für den Reload-Wert. Nur der Form halber: Das sind aber dann keine 14 Bit Signalgüte am Ausgang. Frank schrieb: > Die Loop UP Table "look up" - auch nur der Form halber :-)
gut das eine cpu kein deutsch verarbeiten muss. Nur weil ich so schnell jetzt nicht darauf komme, warum habe ich die Güte nicht?
@ tomb (Gast) >Ja genau, also zwei Speicherzugriffe, das ist jetzt nicht die Welt. >Den alten zu löschenden Index merkt sich am besten der SPI-Master. Würde ich nicht machen. Das sollte an Ort und Stelle verwaltet werden. MfG Falk
Falk Brunner schrieb: > @ tomb (Gast) > >>Ja genau, also zwei Speicherzugriffe, das ist jetzt nicht die Welt. >>Den alten zu löschenden Index merkt sich am besten der SPI-Master. > > Würde ich nicht machen. Das sollte an Ort und Stelle verwaltet werden. > > MfG > Falk Ja hab ich mir nachdem ich's gepostet habe, auch gedacht. Bringt wirklich keinen Vorteil das den Master machen zu lassen. Und man braucht auch nur für jeden Pin nochmal den Counterstand speichern, welcher dann der Index ist, andem das alte, gesetzte Bit wieder gelöscht wird. Naja auf jedenfall geht das aktualisieren recht zügig.
Frank schrieb: > Nur weil ich so schnell jetzt nicht darauf komme, warum habe ich die > Güte nicht? Nur der vollständigkeit halber eine Antowrt, auch wenn es etwas her ist: Eine 14 Bit-PWM. die aufgebaut ist, wie oben beschrieben, also mit 14 Bit Zähler, erzielt nur nach ausreichender Dezimation wieder 14 Bit und die ist niemals perfekt, sondern nur bei ausreichend "langsamer" Betrachtung, sie bringt auch bei Weitem nicht die Bandbreite von 1/N wie viele meinen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.