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.
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.
@ 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 :-)
@ 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.