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


von Anfänger (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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... ;-)

von nixda (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Anfänger (Gast)


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?

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
Noch kein Account? Hier anmelden.