Forum: FPGA, VHDL & Co. Integer to STD_LOGIC_VECTOR (nur obere Bits)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Holger K. (holgerkraehe)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich versuche folgende Konversion durchzuführen:
std_logic_vector(to_unsigned(DATA_IN((chipCount - 1) - chipCounter)(arrayCount), 16))(15 downto 8);

Leider scheitert diese in der Simulation mit folgender Meldung:
Type names are not allowed as primaries.
 The index types in the reference to the array object are incompatible with its range type.
 Expected array type.
Undefined type of expression. Expected type 'STD_LOGIC_VECTOR'.

Warum darf ich das Ergebnis der Konvertierung nicht "Maskieren" mittels 
(15 downto 8) ?

von Tobias N. (technick2)


Bewertung
-1 lesenswert
nicht lesenswert
Bitte mal vollständige Zuweisung!

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Holger K. schrieb:
> Warum darf ich das Ergebnis der Konvertierung nicht "Maskieren" mittels
> (15 downto 8) ?
Mal davon ausgegangen, dass der Rest wahrscheinlich schon passen wird, 
dann darfst du das schon, nur brauchst du eben tatsächlich ein 
Zwischenergebnis:
zwischenergebnis <= std_logic_vector(to_unsigned(DATA_IN((chipCount - 1) - chipCounter)(arrayCount), 16));
endergebnis      <= zwischenergebnis(15 downto 8);

> Warum darf ich das Ergebnis der Konvertierung nicht "Maskieren" mittels
> (15 downto 8) ?
Weil die "Typdefinition" von to_unsinged eben völlig anders aussieht, 
als die Typdefinition eines Vektors. Siehe dort die ersten paar Zeilen 
und die Id D.3:
https://www.csee.umbc.edu/portal/help/VHDL/packages/numeric_std.vhd

von FPGAzumSpass (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Trotzdem ist das jedes mal nervig für so etwas Triviales eine Variable 
oder ein Signal definieren zu müssen.

Das führt dann dazu, das ich in so einem Fall oft abwäge was jetzt am 
hässlichsten aussieht:

- Hilfssignal bzw -Variable
- gar nicht erst Integer nehmen und gleich bei Unsigned bleiben
- mit Integer weiter arbeiten, in dem Fall also:
ergebnis <= DATA_IN((chipCount - 1) - chipCounter)(arrayCount) / 256;

Was aber auch wieder nur klappt wenn das Ergebnis nicht an einen Port 
ran muss, weil die Konvertierung bei der Portzuweisungen auch wieder 
nicht zulässig ist.

Wenn da jemand eine ein-Anweisungs-Lösung finden würde wäre es echt eine 
Erleichterung.

von Markus F. (mfro)


Bewertung
1 lesenswert
nicht lesenswert
Ich versteh's nicht.

Ja, man kann keinen Slice aus einer Typkonvertierung bilden:
std_logic_vector(to_unsigned(DATA_IN((chipCount - 1) - chipCounter)(arrayCount), 16))(15 downto 8);
Geht nicht.
na und?
Man kann einen Slice aus einem unsigned rausschneiden:
std_logic_vector(to_unsigned(DATA_IN((chipCount - 1) - chipCounter)(arrayCount), 16)(15 downto 8));

Und das geht völlig ohne Verrenkungen, man muss nur eine Klammer ein 
bißchen verschieben.

: Bearbeitet durch User
von FPGAzumSpass (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wahnsinn, das ich noch nie darauf gekommen bin das so rum zu probieren.
(der Threadersteller und Lothar wohl auch nicht)

Probiere ich bei Gelegenheit mal in Simulator und Synthese aus, ob das 
so "baut".

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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.