Ich habe eine APP mit diversen Berechnungen in komplexer Zahlenebene, die ich mit einem Cyclone FPGA mache. Nun habe ich erfahren, daß der Stratix dieses ausdrücklich unterstützt, finde aber bei Altera keine INfo, wie man das programmiert, benutzt. Müsswen da mit dem Wizzard spezielle Instanzen genutzt werden oder macht das der Compiler aus dem Code indem er erkennt, daß komplex gerechnet wird?
Hallo, FPGAs bieten Unterstüzung für die Verarbeitung numerischer Variablen durch Bereitstellung von Addierern und Multiplizierern. Ein FPGA-Hersteller wird die Universalität seiner FPGAs nicht dahin einschränken, in dem er Adder und Multiplizierer fest zu komplexen Operationen verdrahtet. Darum ist die Aussage "daß der Stratix dieses ausdrücklich unterstützt" falsch. Nun beschäftige ich mich schon jahrelang mit FPGAs, wenn auch weniger mit Altera's FPGAs. Trotzdem hat mir das Suchwort "complex" auf der Altera Webseite sofort die gewünschte Info hinsichtlich komplexer Operationen geliefert. Ich gehe mal davon aus, dass du das auch gemacht hast. Du kannst mit den Infos scheinbar nichts anfangen. Weiterhin schreibst du: "oder macht das der Compiler aus dem Code indem er erkennt, daß komplex gerechnet wird?". Beide Fakten sagen mir, dass du von FPGAs absolut keine Ahnung hast. Darum empfehle ich dir für die Bearbeitung deines Projekts, sehr viel Zeit (Monate) für die Einarbeitung in das FPGA-Design einzuplanen oder das Projekt von jemanden machen zu lassen, der sich mit FPGAs auskennt. Auch wenn viele die Implementierung von Algorithmen auf FPGAs als FPGA-Programmierung bezeichnen, hat es mit der klassichen Programmierung gar nichts zu tun. VHDL ist auch keine Programmiersprache. Bye Tom
Mich interessiert das jetzt auch. Wenn ich die Altera Note richtig lese, macht man das am Besten mit dem MEGA Wizzard. Was mir dabei auffiel: Die Implementieung in konventioneller Form mit 18 Bit braucht bei Stratix III und Cyclone III jeweils 4 DSP Blocks. Beim Stratix kommen zusätzlich 36 LEs hinzu, beim Cyclone jedoch 180! (Seite 13 "ALTMUL_COMPLEX").
Die MAC-Einheiten haben (wie bei den meisten FPGA-Herstellern) eine Struktur, um Multiplikationen und Additionen günstig miteinander zu verbinden. Je nachdem wie diese Multiplizierer und Addierer nun verschaltet sind, kann man damit auch komplex Multiplizieren. Bei Altera kannst du dir im MegaWizzard diverse mathematische Operationen bauen lassen, die du dann instanzieren kannst. Da es keine standardisierte Libary für komplexe Zahlen gibt, kann Quartus auch keine Operator inference machen (=selbsterkennen der notwendigen Struktur). Reele Multiplikationen werden aber erkennt und in DSP-Blöcke gemappt. Man könnte natürlich Funktionen für komplexe Multiplikationen aus den reelen selbst definieren. Inwiefern das sinnvoll zu verwenden ist, kannst du dir selbst überlegen, wenn der Multiplizierer mehrere Pipelinestufen hat.
>wenn der Multiplizierer mehrere Pipelinestufen hat. So arg viele pipeline Stufen haben die MULs aber garnicht und wenn, haben das die ADD-Komponenten auf. Eine simple komplexe Zahl zu multiplizieren geht oft mit einen CLK! >Beim Stratix kommen zusätzlich 36 LEs hinzu, beim Cyclone jedoch 180! ( Der Stratix hat komplexere ( :-) ) LEs.
Sicher kann man in einem Taktzyklus eine komplexe Zahl multiplizieren, die mögliche Taktfrequenz ist dann aber recht bescheiden, trotz gleichen Ressourcenverbrauchs. Baut man sein Design nun aber so, dass das Resultat erst 2 Taktzyklen später benötigt wird, dann kann man die Pipelinestruktur voll ausnützen. Mögliche Überläufe beim Multiplizieren zu erkennen ist wieder ein anderes Thema.
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.