Verdammt ineffizienter Code?

OP #5070840
Lesenswert?

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
Gast #5070858
Lesenswert?

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.
OP #5070859
Lesenswert?

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
OP #5070876
Lesenswert?

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?).
Gast #5070880
Lesenswert?

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.
Gast #5070887
Lesenswert?

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.
Gast #5070895
Lesenswert?

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.
Gast #5070905
Lesenswert?

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.
OP #5070938
Lesenswert?

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
Gast #5070976
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren