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?
@ 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
1 | use ieee.numeric_std.all; |
2 | |
3 | if (zahl_integer = to_integer(unsigned(zahl_slv))) then |
4 | end if; |
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
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.
Wer sagt denn neu schreiben? Das Package numeric_std sollte man verwenden anstelle von std_logic_arith.
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.
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
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... |
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.