VHDL: Index auf Integer?

#1148708
Lesenswert?

Hallo!

Ich habe ein Problem mit der Synthese eines "Vergleiches".
Ich habe einen 4-Bit-Zähler, bei dem das vierte Bit als "Überlauf" 
aufgefasst werden soll. Im Code habe ich den Zähler als Integer 
realisiert, weil es einfacher ist. Schreibe ich nun aber:
1
if (bla_int = 8) then

wird unnötigerweise ein kompletter Komparator synthetisiert (naja, gut, 
das Synthesewerkzeug kann ja nicht wissen, dass ich das vierte Bit nur 
dazu verwende).

Ich helfe mir gerade damit aus, dass ich eine Kopie des integers in 
einem STD_LOGIC_VECTOR vorhalte, indem ich dann auf den Index zugreife, 
also so:
1
if (bla_std_cpy(3) = '1') then

- geht das auch einfacher?

Danke,
Heiko.
#1148709
Lesenswert?

Normalerweise sollte
if (bla_int > 7) then
dem Optimierer auf die Spruenge helfen. Die uebliche Regel "ungleich 
braucht mehr Ressourcen als gleich" trifft in solch speziellen Faellen 
nicht zu.

Du kannst auch einfach unsigned statt integer verwenden, dann kannst du 
auch direkt auf die einzelnen Bits zugreifen.
#1148746
Lesenswert?

Jan M. wrote:
> Normalerweise sollte
> if (bla_int > 7) then
> dem Optimierer auf die Spruenge helfen. Die uebliche Regel "ungleich
> braucht mehr Ressourcen als gleich" trifft in solch speziellen Faellen
> nicht zu.

Da wird dann kein Komparator, sondern ein "greatervalue" synthetisiert.

> Du kannst auch einfach unsigned statt integer verwenden, dann kannst du
> auch direkt auf die einzelnen Bits zugreifen.

Das funktioniert.

Danke euch beiden!
#1148845
Lesenswert?

Lothar Miller wrote:

> Wenn du die numeric_std Lib verwendest, dann mach doch einfach eine
> Conversion.
>
1
> if (to_unsigned(bla_int,4)(3) = '1') then
2
>

Ich habe jetzt den integer in unsigned geändert und musste dadurch 
natürlich bei Zuweisungen auf "array" (others => '0') umsteigen- da wäre 
die Lösung ja noch ein bisschen "änderungsärmer", danke!

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