mikrocontroller.net

Forum: FPGA, VHDL & Co. std_logic_vector auf Integer testen


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine Möglichkeit einen std_logic_vektor auf eine bestimmte 
Dezimalzahl zu prüfen?
Klar, ich könnte die Dezimalzahl erst manuell in Binär umrechnen und 
dann auf das Binärmuster testen, aber gibt es noch eine andere 
Möglichkeit?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter

>Gibt es eine Möglichkeit einen std_logic_vektor auf eine bestimmte
>Dezimalzahl zu prüfen?

Sicher.

>Klar, ich könnte die Dezimalzahl erst manuell in Binär umrechnen und

Aua! Nein, so macht man das nicht.

>dann auf das Binärmuster testen, aber gibt es noch eine andere
>Möglichkeit?

Einfach hinschreiben. Damit das funktioniert brasucht man nur die 
Bibliotheken.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


....

signal my_vector: std_logic_vector(7 downto 0)

--im Prozess

if my_vector = 55 then

MFG
Falk


Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
use ieee.numeric_std.all;

if (zahl_integer = to_integer(unsigned(zahl_slv))) then
end if;

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Bitte nicht empfehlen!
Das ist eine Synopsis-Erweiterung die nicht standardisiert ist. Siehe 
auch: http://www.vhdl.org/comp.lang.vhdl/FAQ1.html#4.11

Autor: Michael Niegl (bigmike47)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso sollte man sie nicht verwenden? die kennt quasi jeder compiler, 
synthesizer und simulator, auch wenn sich vielleicht rein formal nicht 
im standard drinsteht. ist immer noch leichter als sich sämtliche der 
funktionen selbst neu zu schreiben.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer sagt denn neu schreiben?
Das Package numeric_std sollte man verwenden anstelle von 
std_logic_arith.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okey, danke für eure nette und mehr als schnelle Hilfe!
Verwendet habe ich
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Syntetisieren konnte ich jetzt alles ohne Probleme. Bin nur mal 
gespannt, ob es auch läuft, so wie ich mir das vorstelle, aber das werde 
ich erst am Montag erfahren.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Merkt der Compiler auch wenn die Integerzahl die ich angebe zu groß für 
den Vektor ist?

z.b.

signal my_vector: std_logic_vector(7 downto 0)

--im Prozess

if my_vector = 401 then

Grüsse

Sebastian

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier's doch aus!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe da nochmal eine Frage :)
Wie kann ich das anstellen, wenn ich nur einen Teil des Vektor auf einen 
Integer testen will?
Also z.B.
if (reg0(0 to 7) = 23) then...

Autor: Johnsn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es direkt nicht funktioniert, dann ein separetes Signal 
deklarieren, und per Concurrent Statement den gewünschten Indexbereich 
zuweisen. Danach kannst du dieses Signal prüfen.

Autor: Rick Dangerus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt in VHDL auch alias:

http://de.wikibooks.org/wiki/VHDL#alias

Rick

Autor: SagINet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn das hier alt ist:
Spaßvogel... "der Compiler" - selbst ohne verschiedene Versionen sind es 
mindestens 3 (und da wird es noch ein paar mehr geben als ich bisher 
gesehen habe...)
--> kann sein, dass "der Compiler" erkennt, dass die Zahl zu groß ist 
für den Vector, kann aber auch sein, dass er es ignoriert, die Zahl 
einpasst und nur mit x Bit testet...(i.A. ist selber testen bei sowas 
leichter/schneller als rumfragen und am Ende wundern warum die Antworten 
nicht stimmen - falsches Tool, falsche Version, veränderte 
Einstellungen, ...)

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.