Forum: FPGA, VHDL & Co. VHDL-Vergleich eines vectors mit einer Konstanten


von Schroeder (Gast)


Lesenswert?

Hallo,
nachdem ich bisher nur mit Verilog programmiert habe, versuche ich mich 
nun einmal kurz an VHDL. Hmmm, scheitern tue ich schon an den 
einfachsten Sachen:
1.
  signal dreg : std_logic_vector(2 downto 0);

  if dreg = x"7" then

Hier scheitert der Vergleich mit dem Hinweis, dass der Arrayvergleich 
immer FALSE sei.

2.
if dreg = std_logic_vector(to_unsigned(7, dreg'length)) then

Das scheint zu funktionieren.

3.
if dreg = std_logic_vector(to_unsigned(x"7", dreg'length)) then

Das hier nicht. Was ist an x"7" nicht ok?

Evtl. wäre jemand so nett, mich aufzuklären. Vielen Dank.

von Tobias L. (murxwitz)


Lesenswert?

x"7" sind 4 bit, dein Vector hat nur 3. nimm "111" dann sollte es gehen.

von Schroeder (Gast)


Lesenswert?

Danke sehr. Allerdings gefällt mir die binäre Schreibweise nicht 
unbedingt. Wenns 23 bit sind, wirds etwas unübersichtlich. Mit Verilog 
würde ich die Konstante wie folgt schreiben: 3'h7. Gibt es nicht 
entsprechendes in VHDL?

von Schroeder (Gast)


Lesenswert?

Ich beantworte meine Frage der Vollständigkeit halber selbst. Seit VHDL 
2008 können Konstanten auch so formuliert werden: 3x"7".

von J. S. (engineer) Benutzerseite


Lesenswert?

Wie wäre es mit "others" oder x"123456" als Hex?

Wenn es mit der Vektorlänge nicht passt, dann erweitert man ihn auf ein 
komplettes nibble, oder man nutzt einen Konversion ds Vektors und 
vergleicht auf den integer-Wert. Festvergleiche sollte man ohnehin aus 
Gründen der Pflegbarkeit mit Konstanten durchführen, aus deren Name die 
Funktion hervor geht.

von user (Gast)


Lesenswert?

Es geht auch mit "Stückeln" um zB. 7 bit zu erhalten
  if vec = "010" & x"4" then

von user (Gast)


Lesenswert?

oder auch gerne genommen

if vec = (vec'range => '1') then

von Schroeder (Gast)


Lesenswert?

Danke für all die Alternativen. Am besten gefällt mir dennoch:
if dreg = 3x"7" then

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.