www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 8 bit Hex auf 5 bit std_logic_vector legen


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ne ganz einfache Frage. Wie kann ich einem std_logic_vector der 5 
Bit breit ist eine 2 Stelligen Hexwert zuordnen.
Der Hexwert geht nie über 2^5 hinaus.
Bekomme deshalb immer ne Size missmatch Fehlermeldung
...
BlaBla : std_logic_vector (4 downto 0); 
...
BlaBla <= x"00";
...

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch es doch mal so:

BlaBla : std_logic_vector (4 downto 0);
tmp : std_logic_vector (4 downto 0);

tmp = x"00";
BlaBla <= tmp(4 downto 0);

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich mache das immer so (braucht leider eine library):

use ieee.std_logic_arith.conv_std_logic_vector;
...
signal BlaBla : std_logic_vector(4 downto 0);
...
BlaBla <= conv_std_logic_vector(16#00#,5);

Der Besucher

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mki:

du meinst doch sicherlich:

signal BlaBla : std_logic_vector (4 downto 0);
...
variable tmp : std_logic_vector (7 downto 0);
...
tmp := x"00";
BlaBla <= tmp(4 downto 0);


Jo, sollte auch gehen :)

Autor: mki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@der Besucher

hmm... ja natürlich. Das passiert wenn alles schnell gehen muß und 
einfach nur kopiert. Naja wustest ja trotzdem was gemeint war :-)

Danke nochmal

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich mache das immer so (braucht leider eine library):
>
> use ieee.std_logic_arith.conv_std_logic_vector;

Und genau das sollte man nicht machen!! std_logic_arith sollte nicht 
mehr verwendet werden. Sondern nur noch numeric_std.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@mki: nicht ich, sondern der Fragesteller soll das verstehen ;)

@Mathi: hast du eine Erklärung, oder einen Link zu einer Erklärung warum 
das nicht so gut sein soll? Ich lerne gern dazu, hätte aber gern einen 
Beleg dafür. Vielleicht weis ja auch jemand anderes mehr dazu?

Der Besucher

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

Bewertung
0 lesenswert
nicht lesenswert
> std_logic_arith
ist eine herstellerabhängige Synopsys Library.
abhängig davon, ob du dazu die std_logic_unsigned oder die 
std_logic_signed verwendest, ergeben die Berechnungen andere 
Ergebnisse.
Wenn du also z.B. nur einen Prozess kopierst, kann das Verhalten 
unterschiedlich sein, wenn im "alten" VHDL-File std_logic_signed oben 
drin stand, und im neuen std_logic_unsigned   :-o

Mit der numeric_std ist das begradigt:
du mußt explizit angeben, ob die Berechnungen signed oder unsigend 
sind.

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die std_logic_arith-Bibliotheken gehören nicht zum offiziellen Standard 
der IEEE. Sie wurden mal als Übergangslösung verwendet.
Dadurch entstand das Problem das es unterschiedliche Versionen der 
std_logic_arith/signed/unisgned von unterschiedlichen Herstellern 
existieren.
Zu diesem Punkt gibt es unzählige Diskussionen im Netz.

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort. Ja, ich erinner mich, da war was mit 
signed und unsigned.

Zum Glück benutze ich nie std_logic_signed und std_logic_unsigned 
(eigentlich wohl unbewußterweise aus genau diesem Grund).
Ich beschränke mich bei den vektoren auf std_logic_vector.
Und wenn Vorzeichenbehandlung nötig ist, kümmere ich mich lieber selbst 
dadrum. Das erleichtert das Leben ungemein.
Mal sehen, ob ich da was bei meinem Stil ändere.

Der Besucher

Autor: Der Besucher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:

ersetze in meinem obigen posting std_logic_unsigned mit unsigned und
std_logic_signed mit signed. Sonst ergibt das keinen Sinn.

Der Besucher

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.