www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Generic langsamer als hart kodiert?


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei einem Beispielcode aus dem I-net-Fundus fand ich div. 
Modul-Varianten für den gleichen Einsatzzweck mit der Begründung, dass 
die hart kodierte Varianten schneller wären, als die äquivalenten Module 
mit Generic Parameter.

Kann mir bitte jemand das erklären?

Ich dachte, Generic wäre ein Weg, Module flexibler und mehrfach 
verwendbar zu machen. Bei der Synthese muss dann doch alles in HW 
gepresst werden - und die ist ja wohl nicht variabel.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich dachte, Generic wäre ein Weg, Module flexibler und mehrfach
> verwendbar zu machen.
Das ist wie im "normalen" Leben auch:
Ein "Universalauto" hat einen kleinen Motor (Verbrauch), 7 Sitzplätze 
(Ausflüge), einen riesigen Kofferraum und eine Anhängekupplung.
Warum werden aber ausschliesslich lauter "Spezialautos" gebaut?

Wenn du etwas flexibel beschreibst, dann bekommst du ab einer gewissen 
Komplexität fast automatisch unnötigen Overhead, der von der Toolchain 
erkannt und rausoptimiert werden muß.

Wenn du nur genau das beschreibst, was du brauchst, sind Optimierungen 
nicht nötig oder zumindest viel einfacher.

Ich codiere idR. erst mit harten Werten. Wenn sich das Modul dann 
bewährt, wird es generisch umgeschrieben. Dann kann ich vergleichen, was 
es kostet, wenn ich an irgendeiner Schraube drehe... ;-)

Autor: nixda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

also module mit generic parametern sollten modulen mit hart kodierten 
konstanten defacto gleichwertig sein. in der synthesezeit bzw. 
elaborationszeit gibt es evtl kleine unterschiede aber das finale 
resultat sollte equivalent sein.

generics sind schliesslich auch nur elaboration time constants! da muss 
nichts rausoptimiert werden, da ja nur fuer den jeweiligen konstanten 
wert wirklich synthetisiert wird.

btw: noch besser als generics finde ich, module so zu schreiben, dass 
sie sich automatisch an den einsatz anpassen. also via *_vector, 
iterationen via 'range, 'left,'right, ... geht leider nicht fuer alles 
aber wenns es geht generic settings aus input properties abzuleiten ist 
dies besser als ein generic zu machen.

regards

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nixda schrieb:
> also module mit generic parametern sollten modulen mit hart kodierten
> konstanten defacto gleichwertig sein.
Ich meinte eigentlich, dass manche durch einen sehr generischen Ansatz 
dann auch zu einer umständlichen Schreibweise neigen. Und z.B. statt 
eines Schieberegisters einen Multiplexer einsetzen, einfach nur, weil es 
sich schöner schreiben lässt...

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich meinte eigentlich, dass manche durch einen sehr generischen Ansatz
> dann auch zu einer umständlichen Schreibweise neigen.

Ok, aber eine prosaische Ader kann man ja nicht dem Generic anlasten.
Ich würde genauso vorgehen, wie von Lothar vorgeschlagen, bzw. habe es 
auch so gemacht. Erst ein Modul fertig gemacht und dann ein, zwei Werte 
gegen Generics ausgetauscht.

Dann ist also die These, dass ein Modul mit Generics langsamer sein soll 
"Humbug"?

> module so zu schreiben, dass sie sich automatisch an den einsatz anpassen.
> also via *_vector, iterationen via 'range, 'left,'right, ... geht leider
> nicht fuer alles aber wenns es geht generic settings aus input properties
> abzuleiten ist dies besser als ein generic zu machen.

Hm, ich habe auch schon versucht, Attribute zu verwenden, aber das 
ableiten von properties ist mir noch nicht klar.
Könntest Du dafür bitte mal ein Beispiel geben?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.