Hi Leute, Ich hätte da das folgende Problem: Ich hab mal für ein größeres Projekt in VHDL einen Baustein implementiert, der am SPI angeschlossen wird und 12 mal servotaugliches PWM liefert. Nun wollte ich das natürlich auf einem CPLD laufen lassen, die Wahl fiel auf die von Xilinx, weil ich mit dem ISE arbeite. Das Problem ist - das Projekt passt nur auf den ganz großen Coolrunner II! Obwohl es im Grunde ein 5-Bit-Demultiplexer, ein 22- und 13 8-Bit-Zähler und ca. 32 8-bit-Register sind. Von den Outputs her hätte der kleinste gereicht, und der war auch der Einzige, den ich einigermaßen löten konnte. Hab ich mich um Größenordnungen verschätzt (ist auch das erste Mal, das ich so was mache)? Den Code kann ich leider gerade nicht posten, da der aus vielen Dateien besteht, von denen ein paar noch sehr WIP sind. Aber auch die Dateien sind klein bzw. sollten es sein. Irgendeine Idee, woran es liegen kann? Was ist so der häufigste Fehler, der zu einer Hardwarebedarfexplosion führt? MfG
Liegt wahrscheinlich an deinem Code...ohne den kann man schlecht eine Aussage treffen... Nebenbei ist auch die Frage relevant wozu du das überhaupt machen willst ? Ein rein akademisches Problem ?
Viktor B. schrieb: > Ich hätte da das folgende Problem: Ich hab mal für ein größeres Projekt > in VHDL einen Baustein implementiert, der am SPI angeschlossen wird und > 12 mal servotaugliches PWM liefert. Nun wollte ich das natürlich auf > einem CPLD laufen lassen Sowas kann man auch auf einem AVR-Tiny laufen lassen. Erfordert aber etwas Hirnschmalz und Basic oder C statt VHDL.
Update: Hab mal das Ganze abschnittsweise gefitted. Sieht aus, als ob keine der Komponenten jetzt irgendwie viiiel mehr benötigt als die anderen. Heißt also entweder kein Fehler oder er ist überall. Anbei die .htm fitter report Datei. Vielleich ist da was Auffälliges zu sehen. TestX schrieb: > Nebenbei ist auch die Frage relevant wozu du das überhaupt machen willst > ? Ein rein akademisches Problem ? Es ist ein Teil eines Autopiloten. Wird entweder an einen RPi oder µC angeschlossen. Wollte ich nur als Hobbyprojekt machen
Kenne jetzt den CoolRunner nich im Detail, aber ich erinnere mich, dass CPLDs z.T. sehr wenige Flipflops haben. Evtl. ist das der Grund für den hohen Ressourcenbedarf.
Schreiber schrieb: > Viktor B. schrieb: >> Ich hätte da das folgende Problem: Ich hab mal für ein größeres Projekt >> in VHDL einen Baustein implementiert, der am SPI angeschlossen wird und >> 12 mal servotaugliches PWM liefert. Nun wollte ich das natürlich auf >> einem CPLD laufen lassen > > Sowas kann man auch auf einem AVR-Tiny laufen lassen. Erfordert aber > etwas Hirnschmalz und Basic oder C statt VHDL. Das erfordert wahrscheinlich nicht mehr Hirnschmalz als ich schon beim Erlernen von VHDL reingesteckt hab. Bei einer Implementierung im AVR leidet die Genauigkeit, weil man die Bits jeweils manuell hin und her wackeln muss (oder hat etwa irgendein Tiny 12 Timer?).
Viktor B. schrieb: > Obwohl es im Grunde ein 5-Bit-Demultiplexer, ein > 22- und 13 8-Bit-Zähler und ca. 32 8-bit-Register sind. Von den Outputs > her hätte der kleinste gereicht, und der war auch der Einzige, den ich > einigermaßen löten konnte. Hab ich mich um Größenordnungen verschätzt > (ist auch das erste Mal, das ich so was mache)? Du hast garnicht geschätzt, dann dann wäre es dir leicht aufgefallen das 104 Zähler-FF und 256 Register-FF kaum in ein PLA aka CPLD passen können das 1 FF pro User-IO hat. Der Coolrunner-II ist kein FPGA sondern ein PLD. https://www.xilinx.com/support/documentation/data_sheets/ds090.pdf S.5 Das ist eben der wesentliche Unterschied zwischen Gate-Array ("Schachbrett" aus FF) und einem PLAD (Grosses FanIn-Netzwerk mit abschliessenden optionalen FF). Siehe auch CPLD Mit Code-effizienz hat dein Problem nix zu tun, dagegen mit mangelnden Grundlagen-Kenntnissen. OK, die Hersteller machen es dir nicht leicht, da wird auch schon mal ein FPGA als CPLD bezeichnet.
Deinen Angaben über Zähler und Register nach brauchst du >350 FlipFlops. Der kleinste CoolRunner II hat 32, nur die ganz großen haben dann mal glaub ich 512. Ich denke da liegt dein Problem, entweder du sparst bei den Zählern&Registern oder nimmst einen FPGA, der hat mehr FlipFlops.
Viktor B. schrieb: > Bei einer Implementierung im AVR > leidet die Genauigkeit, weil man die Bits jeweils manuell hin und her > wackeln muss (oder hat etwa irgendein Tiny 12 Timer?). Man muss ja keinen Tiny 12 nehmen, ich würde mal über den Tiny2313 nachdenken, der hat genug Pins UND einen Timer. Davon abgesehen, bei 20MHz Taktfrequenz kann man so ein paar PWM-Signale auch ganz ohne Timer erzeugen.
Viktor B. schrieb: > Irgendeine Idee, woran es liegen kann Der XC2C32A hat nur 32 MacroCells, also FlipFlops, und 56 Macroterme, also Bitabhängigkeiten. Und du brauchst mindestens 382 FlipFlops, und für jeden Ausgang die x<counter Verknüpfung mit 8 bit, was mehr asl 56 Macroterme sein werden. CPLD sind einfach nicht leistungsfähig genug.
Schreiber schrieb: > Viktor B. schrieb: >> Nun wollte ich das natürlich auf >> einem CPLD laufen lassen > > Sowas kann man auch auf einem AVR-Tiny laufen lassen. Oder schau doch mal nach einem "dummen" Peripherie-IC mit extra viel PWM-Kanälen: http://www.linear.com/product/LT8500 https://www.sparkfun.com/products/retired/10136 (!abgekündigt!) Beitrag "16 PWM Signale I2C" Es muss nicht immer was programmierbares sein.
Was ist "servotaugliches PWM"? Falls das bedeutet auf 12 Leitungen alle 20ms einen 1..2ms Puls zu erzeugen, dann wird der Tiny quenglig wegen Langeweile.
:
Bearbeitet durch User
FÜr den Projekt hab ich generell versucht, FPGAs durch CPLDs zu ersetzen. Die FPGAs sind einfach ein Overkill. Das Mapping an dem kleinsten Spartan 6 z.B. hat ergeben, das nur 30% der Ressourcen genutzt werden. Zugegeben, wenn ich an meinem Atmega 328 rumspiele, erreiche ich sogar 0% (wenn es mal wieder hängen bleibt), ist aber trotzdem nicht weniger sinnvoll. P.S. Ich hab mal eine Idee zur Optimisation. Die werde ich später noch ausprobieren, soll aber den Bedarf an FF's drastisch senken
Viktor B. schrieb: > FÜr den Projekt hab ich generell versucht, FPGAs durch CPLDs zu > ersetzen. Die FPGAs sind einfach ein Overkill. Das Mapping an dem > kleinsten Spartan 6 z.B. hat ergeben, das nur 30% der Ressourcen genutzt > werden. Bei Lattice sollte es noch kleineres an FPGA geben (die evtl. irriger weise als CPLD bezeichent werden). Und 30% sind kein Overkill sondern genug Reserven für timing-Probleme und zukünftige Features. Overkill ist da eher das externe Konfig-speicher und die mehrfachen Supply-Voltages. Altera drückt z.Z mit dem Flex10 einen kleinen und schaltungstechnisch einfachen (single-supply Option) FPGA auf den Markt: http://www.elektroniknet.de/markt-technik/halbleiter/cpld-fpgas-fuer-1-50-dollar-in-hohen-volumina-113411.html Und wenn die PWM das PLD nicht füllt kannst du fa auch deinen SPI-Master mit reinscheiben.
Viktor B. schrieb: > Die FPGAs sind einfach ein Overkill. Sieh dir Lattice MachXO2 an. Das sind exakt die Bausteine, die du als "FPGA-Ersatz" suchst....
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.