mikrocontroller.net

Forum: FPGA, VHDL & Co. Integer: range passt Laenge nicht an


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moin,

mir tut sich gerade folgendes Problem auf: ich habe ein

signal index: integer range 0 to 1023;

Nun denke ich mir fuer diese 1024 Zahlen sollte ein 10 Bit breites 
Signal genuegen. Wenn ich die Schose aber kompiliere (mit ghdl, bin ein 
armer Linuxnutzer) und mir im GTKwave anzeigen lasse wird "index" da als 
32bit Zahl aufgefuehrt:

index[31:0]

Wie vermittle ich dem Teil nun, dass das eigentlich ein index[9:0] sein 
soll. Die "range" Angabe scheint ja nicht wirklich zu helfen. Es muss 
uebrigens ein integer sein, weil ich das ding zur Indizierung eines 
Arrays brauche. Mit "unsigned"-Typen aus dem numeric_std-Paket geht das 
wohl nicht.

Danke, Tim

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

Bewertung
0 lesenswert
nicht lesenswert
> Mit "unsigned"-Typen aus dem numeric_std-Paket geht das wohl nicht.
Wie wärs mit einer Conversion:
  signal index: unsigned(9 downto 0);
  :
  data <= ram(to_integer(unsinged_index));

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ja, das funktioniert. Nun haemmere ich gerade meinen Kopf gegen die 
Wand, weil ich da selbst nicht drauf gekommen bin, obwohl ich ech schon 
wild rumcaste.
Aus Interesse und fuer die Zukunft wuerde ich aber trotzdem wissen 
wollen, wieso der Integer nicht auf die noetige Groesse verkleinert 
wird.

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

Bewertung
0 lesenswert
nicht lesenswert
> wieso der Integer nicht auf die noetige Groesse verkleinert wird.
Sieh dir mal /Synthese/-Ergebnisse an. Bei der Synthese wird dann auch 
tatsächlich gespart und optimiert.
Evtl. gibt es auch einen Schalter an deiner SW?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bis zur Synthese dauert es wohl noch etwas wenn im aktuellen Tempo 
weitergeht :(.
Doof nur, dass erst dann optimiert wird. So kann ich einen Integer nicht 
in meiner Simulation als Arrayindex benutzen, weil mein Array nunmal 
keine 2**32 Werte enthaelt. Naja, das Problem haben wir ja jetzt 
formschoen umgangen.
Ich sollte wohl mal auf ISE umsteigen, dann hab ich nicht immer das 
Gefuehl meine Probleme laegen im OpenSource compiler begruendet (auch 
wenns sie's gar nicht sind).

Tim

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.