Forum: FPGA, VHDL & Co. conv_integer(x) vs. to_integer(unsigned(x))


von Franz (Gast)


Lesenswert?

Moin,

mir ist da eine Sache bei den Convertierungsfunktionen der 
ieee.numeric_std Library aufgefallen.

Das hier geht:
1
    port map (
2
        input => CONV_INTEGER(x)
3
    );

Das hier geht nicht (Zumindest nicht in Modelsim, Quartus frisst das 
trozudem):
1
    port map (
2
        input => to_integer(unsigned(x))
3
    );

Fehlermeldung ist:
> Actual (type conversion (to ieee.numeric_std.unsigned)) for formal "input"
> is not a globally static expression.

Wie kommt das? Bzw. warum kommt das bei conv_integer nicht?

Danke für Erhellung! :)

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


Lesenswert?

Franz schrieb:
> Bzw. warum kommt das bei conv_integer nicht?
Was passiert, wenn du nur 1 Konvertierung machst (also z.B. von unsigned 
nach integer)?

> Das hier geht nicht (Zumindest nicht in Modelsim, Quartus frisst das
> trozudem)
Das deutet auf eine unerwartete Syntaxvariante hin. Um es einfach und 
portabel zu halten: in der port map darf nicht konvertiert werden.
Nimm besser ein lokales Signal dafür...

> trozudem
Tolles Wort, ich werude das Hilfs-U in Zukunuft auch verwenuden... ;-)

von Franz (Gast)


Lesenswert?

Lothar Miller schrieb:
> Franz schrieb:
>> Bzw. warum kommt das bei conv_integer nicht?
> Was passiert, wenn du nur 1 Konvertierung machst (also z.B. von unsigned
> nach integer)?

Damit geht es auch. Und nur mit einer Konvertierung von std_logic_vector 
nach unsigned geht es auch. Nur mit beiden nicht. Mit einem lokalen 
Signal lässt sich das natürlich lösen.
Also dass es jetzt eine offizielle numeric lib gibt, ist ja schön und 
gut. Aber ich finde die an vielen Stellen deutlich umständlicher zu 
benutzen, als die alten Synopsys Libs.


Lothar Miller schrieb:
> Um es einfach und
> portabel zu halten: in der port map darf nicht konvertiert werden.
> Nimm besser ein lokales Signal dafür...

Ich finde das ist immer eine Frage der Code Lesbarkeit. Zu viele 
Zwischensignale machen das ganze noch unübersichtlicher, als VHDL 
sowieso schon ist.

Lothar Miller schrieb:
>> trozudem
> Tolles Wort, ich werude das Hilfs-U in Zukunuft auch verwenuden... ;-)

Oh, ein 'u' zu viel, da hab ich wohl was nicht richtig initialisiert ;-)

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


Lesenswert?

Franz schrieb:
> Ich finde das ist immer eine Frage der Code Lesbarkeit.
Ich füge lieber ein paar Zwischensignale ein, als mich auf eine 
Definitionslücke zu verlassen...

> Also dass es jetzt eine offizielle numeric lib gibt, ist ja schön und
> gut. Aber ich finde die an vielen Stellen deutlich umständlicher zu
> benutzen, als die alten Synopsys Libs.
Sie ist nur anders. Aber in sich konsistent, weil man explizit angeben 
muss, wie ein Signal zu bearbeiten ist. In deinem Einzeiler würde 
nämlich ganz was anderes rauskommen, abhängig davon, ob du die 
std_logic_signed oder die std_logic_unsigned eingebunden hättest. 
Bei der numeric_std ist aber klar, was rauskommen wird.

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.