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


von Peter (Gast)


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?

von Falk B. (falk)


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


von Rick Dangerus (Gast)


Lesenswert?

1
use ieee.numeric_std.all;
2
3
if (zahl_integer = to_integer(unsigned(zahl_slv))) then
4
end if;

von Rick Dangerus (Gast)


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

von Michael N. (bigmike47)


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.

von Klaus F. (kfalser)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

Okey, danke für eure nette und mehr als schnelle Hilfe!
Verwendet habe ich
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
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.

von Sebastian (Gast)


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

von Johnsn (Gast)


Lesenswert?

Probier's doch aus!

von Peter (Gast)


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.
1
if (reg0(0 to 7) = 23) then...

von Johnsn (Gast)


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.

von Rick Dangerus (Gast)


Lesenswert?

Es gibt in VHDL auch alias:

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

Rick

von SagINet (Gast)


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, ...)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.