www.mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL: Index auf Integer?


Autor: Heiko L. (drcaveman)
Datum:

Bewertung
0 lesenswert
nicht 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:
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:
if (bla_std_cpy(3) = '1') then

- geht das auch einfacher?

Danke,
Heiko.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans-Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wahrscheinlich mit "unsigned" nicht mit "integer".

Autor: Heiko L. (drcaveman)
Datum:

Bewertung
0 lesenswert
nicht 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!

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

Bewertung
0 lesenswert
nicht lesenswert
>  if (bla_std_cpy(3) = '1') then
> - geht das auch einfacher?
Wenn du die numeric_std Lib verwendest, dann mach doch einfach eine 
Conversion.
if (to_unsigned(bla_int,4)(3) = '1') then

Autor: Heiko L. (drcaveman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:

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

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

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.